// @vitest-environment jsdom import { defineComponent, nextTick } from "vue"; import { mount } from "@vue/test-utils"; import { beforeEach, describe, expect, it, vi } from "vitest"; const selectDateMock = vi.hoisted(() => vi.fn()); const sharedDateState = vi.hoisted(() => ({ selected_date: null, selected_date_to: null, })); vi.mock("@/views/dashboards/departmentDashboard/modules/daily-report/DepartmentDailyReportObject.vue", async () => { const { ref } = await import("vue"); const selected_date = ref("2026-03-23"); const selected_date_to = ref("2026-03-23"); sharedDateState.selected_date = selected_date; sharedDateState.selected_date_to = selected_date_to; return { selected_date, selected_date_to, selectDate: selectDateMock, }; }); import DepartmentDashboardOverviewNavigation from "@/views/dashboards/departmentDashboard/other/displays/DepartmentDashboardOverviewNavigation.vue"; const DatePeriodSelectorStub = defineComponent({ name: "DatePeriodSelector", props: { onSelectionChange: { type: Function, required: true, }, selection: { type: Object, required: true, }, }, emits: ["update:selection"], template: `
`, }); describe("DepartmentDashboardOverviewNavigation", () => { beforeEach(() => { selectDateMock.mockReset(); if (sharedDateState.selected_date) { sharedDateState.selected_date.value = "2026-03-23"; } if (sharedDateState.selected_date_to) { sharedDateState.selected_date_to.value = "2026-03-23"; } }); it("maps DatePeriodSelector callbacks to shared selectDate and emits date-change", async () => { const wrapper = mount(DepartmentDashboardOverviewNavigation, { global: { stubs: { DatePeriodSelector: DatePeriodSelectorStub, }, }, }); await wrapper.get(".trigger-on-selection-change").trigger("click"); await nextTick(); expect(selectDateMock).toHaveBeenNthCalledWith(1, "2026-03-24", "2026-03-29"); expect(wrapper.emitted("date-change")?.[0]).toEqual([ { startDate: "2026-03-24", endDate: "2026-03-29", }, ]); await wrapper.get(".trigger-update-selection").trigger("click"); await nextTick(); expect(selectDateMock).toHaveBeenNthCalledWith(2, "2026-04-01", "2026-04-30"); expect(wrapper.emitted("date-change")?.[1]).toEqual([ { startDate: "2026-04-01", endDate: "2026-04-30", }, ]); }); it("passes the currently selected shared date range to DatePeriodSelector", () => { sharedDateState.selected_date.value = "2026-05-05"; sharedDateState.selected_date_to.value = "2026-05-11"; const wrapper = mount(DepartmentDashboardOverviewNavigation, { global: { stubs: { DatePeriodSelector: DatePeriodSelectorStub, }, }, }); const selector = wrapper.findComponent(DatePeriodSelectorStub); expect(selector.props("selection").startDate.toISOString().split("T")[0]).toBe("2026-05-05"); expect(selector.props("selection").endDate.toISOString().split("T")[0]).toBe("2026-05-11"); }); });