diff --git a/src/components/administration/ProvisioningOptionsPage.unit.ts b/src/components/administration/ProvisioningOptionsPage.unit.ts index a534f69b07..a1938e1e06 100644 --- a/src/components/administration/ProvisioningOptionsPage.unit.ts +++ b/src/components/administration/ProvisioningOptionsPage.unit.ts @@ -17,14 +17,6 @@ import { VCheckboxBtn } from "vuetify/lib/components/index"; vi.mock("@data-provisioning-options"); -vi.mock( - "@/utils/pageTitle", - () => - ({ - buildPageTitle: (pageTitle) => pageTitle ?? "", - }) as typeof import("@/utils/pageTitle") -); - vi.mock("vue-router"); const useRouterMock = useRouter; @@ -87,9 +79,8 @@ describe("ProvisioningOptionsPage", () => { const breadcrumbs = wrapper.findAll(".breadcrumbs-item"); - expect(breadcrumbs[0].text()).toEqual("pages.administration.index.title"); - expect(breadcrumbs[1].text()).toEqual("pages.administration.school.index.title"); - expect(breadcrumbs[2].text()).toEqual("components.administration.provisioningOptions.page.title"); + expect(breadcrumbs[0].text()).toEqual("pages.administration.school.index.title"); + expect(breadcrumbs[1].text()).toEqual("components.administration.provisioningOptions.page.title"); }); }); diff --git a/src/components/administration/ProvisioningOptionsPage.vue b/src/components/administration/ProvisioningOptionsPage.vue index d1129f6c47..9580f65f94 100644 --- a/src/components/administration/ProvisioningOptionsPage.vue +++ b/src/components/administration/ProvisioningOptionsPage.vue @@ -123,8 +123,8 @@ diff --git a/src/modules/page/class-members/ClassMembers.page.unit.ts b/src/modules/page/class-members/ClassMembers.page.unit.ts index f7029eedfb..1de5adbf26 100644 --- a/src/modules/page/class-members/ClassMembers.page.unit.ts +++ b/src/modules/page/class-members/ClassMembers.page.unit.ts @@ -74,8 +74,7 @@ describe("@pages/ClassMembers.page.vue", () => { const breadcrumbs = wrapper.findAll(".breadcrumbs-item"); - expect(breadcrumbs.at(0)?.text()).toEqual("pages.administration.index.title"); - expect(breadcrumbs.at(1)?.text()).toEqual("pages.administration.classes.index.title"); + expect(breadcrumbs.at(0)?.text()).toEqual("pages.administration.classes.index.title"); }); it("should render dynamic class name breadcrumb", () => { @@ -83,7 +82,7 @@ describe("@pages/ClassMembers.page.vue", () => { groupId: "groupId", }); - const breadcrumb = wrapper.findAll(".breadcrumbs-item").at(2); + const breadcrumb = wrapper.findAll(".breadcrumbs-item").at(1); expect(breadcrumb?.text()).toEqual(`common.labels.class '${group.name}'`); }); diff --git a/src/modules/page/class-members/ClassMembers.page.vue b/src/modules/page/class-members/ClassMembers.page.vue index dc00f37eb8..28912219ec 100644 --- a/src/modules/page/class-members/ClassMembers.page.vue +++ b/src/modules/page/class-members/ClassMembers.page.vue @@ -75,10 +75,6 @@ export default defineComponent({ const title: ComputedRef = computed(() => `${t("common.labels.class")} '${groupName.value}'`); const breadcrumbs: ComputedRef = computed(() => [ - { - title: t("pages.administration.index.title"), - disabled: true, - }, { title: t("pages.administration.classes.index.title"), to: "/administration/groups/classes", diff --git a/src/modules/page/folder/Folder.page.unit.ts b/src/modules/page/folder/Folder.page.unit.ts index 8a88f306d2..e9665650f3 100644 --- a/src/modules/page/folder/Folder.page.unit.ts +++ b/src/modules/page/folder/Folder.page.unit.ts @@ -39,7 +39,7 @@ describe("FolderPage", () => { folderComponent.vm.$emit("update:folder-name", "Updated Folder"); - expect(document.title).toBe("Updated Folder - pages.folder.title - Test Title"); + expect(document.title).toEqual("Updated Folder"); }); }); }); diff --git a/src/modules/page/folder/Folder.page.vue b/src/modules/page/folder/Folder.page.vue index fac5995213..0fe310baed 100644 --- a/src/modules/page/folder/Folder.page.vue +++ b/src/modules/page/folder/Folder.page.vue @@ -3,10 +3,8 @@ diff --git a/src/modules/page/media-shelf/MediaShelf.page.unit.ts b/src/modules/page/media-shelf/MediaShelf.page.unit.ts index dc1a80abdb..92787fc2cb 100644 --- a/src/modules/page/media-shelf/MediaShelf.page.unit.ts +++ b/src/modules/page/media-shelf/MediaShelf.page.unit.ts @@ -4,7 +4,9 @@ import { mediaAvailableLineResponseFactory, mediaBoardResponseFactory } from "@@ import { createTestingI18n, createTestingVuetify } from "@@/tests/test-utils/setup"; import { MediaBoard, useSharedMediaBoardState } from "@feature-media-shelf"; import { createMock, DeepMocked } from "@golevelup/ts-vitest"; +import { createTestingPinia } from "@pinia/testing"; import { flushPromises, mount } from "@vue/test-utils"; +import { setActivePinia } from "pinia"; import { ref } from "vue"; vi.mock("@feature-media-shelf", async (importOriginal) => { @@ -15,10 +17,6 @@ vi.mock("@feature-media-shelf", async (importOriginal) => { }; }); -vi.mock("@/utils/pageTitle", () => ({ - buildPageTitle: (pageTitle: string | undefined) => pageTitle ?? "", -})); - describe("MediaShelfPage", () => { let useSharedMediaBoardStateMock: DeepMocked>; @@ -38,6 +36,10 @@ describe("MediaShelfPage", () => { }; }; + beforeAll(() => { + setActivePinia(createTestingPinia()); + }); + beforeEach(() => { useSharedMediaBoardStateMock = createMock>({ isLoading: ref(false), diff --git a/src/modules/page/room/AdministrationRoomMembers.page.unit.ts b/src/modules/page/room/AdministrationRoomMembers.page.unit.ts index 7907836f80..237503d9da 100644 --- a/src/modules/page/room/AdministrationRoomMembers.page.unit.ts +++ b/src/modules/page/room/AdministrationRoomMembers.page.unit.ts @@ -22,14 +22,6 @@ import { Router, useRoute } from "vue-router"; vi.mock("vue-router"); const useRouteMock = useRoute; -vi.mock( - "@/utils/pageTitle", - () => - ({ - buildPageTitle: (pageTitle) => pageTitle ?? "", - }) as typeof import("@/utils/pageTitle") -); - vi.mock("vue-i18n", () => ({ useI18n: vi.fn().mockReturnValue({ t: vi.fn().mockImplementation((key: string) => key), diff --git a/src/modules/page/room/AdministrationRoomMembers.page.vue b/src/modules/page/room/AdministrationRoomMembers.page.vue index 52a28c71da..ec55df2a2f 100644 --- a/src/modules/page/room/AdministrationRoomMembers.page.vue +++ b/src/modules/page/room/AdministrationRoomMembers.page.vue @@ -48,7 +48,7 @@ const headerText = computed(() => }) ); -const pageTitle = computed(() => buildPageTitle(headerText.value)); +const pageTitle = computed(() => buildPageTitle(headerText.value, t("pages.rooms.administration.title"))); useTitle(pageTitle); onMounted(async () => { diff --git a/src/modules/page/room/RoomCreate.page.unit.ts b/src/modules/page/room/RoomCreate.page.unit.ts index f28923d154..a25f82d4a2 100644 --- a/src/modules/page/room/RoomCreate.page.unit.ts +++ b/src/modules/page/room/RoomCreate.page.unit.ts @@ -3,7 +3,9 @@ import { createTestingI18n, createTestingVuetify } from "@@/tests/test-utils/set import { useRoomCreateState } from "@data-room"; import { RoomForm } from "@feature-room"; import { RoomCreatePage } from "@page-room"; +import { createTestingPinia } from "@pinia/testing"; import { flushPromises } from "@vue/test-utils"; +import { setActivePinia } from "pinia"; import { useRouter } from "vue-router"; vi.mock("vue-router", () => ({ @@ -28,14 +30,6 @@ vi.mock("@data-room/RoomCreate.state.ts", () => ({ }), })); -vi.mock( - "@/utils/pageTitle", - () => - ({ - buildPageTitle: (pageTitle) => pageTitle ?? "", - }) as typeof import("@/utils/pageTitle") -); - const roomParams: RoomCreateParams = { name: "test", color: RoomColor.Blue, @@ -61,6 +55,10 @@ describe("@pages/RoomCreate.page.vue", () => { }; }; + beforeAll(() => { + setActivePinia(createTestingPinia()); + }); + it("should have roomFormComponent", () => { const { roomFormComponent } = setup(); expect(roomFormComponent).toBeDefined(); diff --git a/src/modules/page/room/RoomDetails.page.vue b/src/modules/page/room/RoomDetails.page.vue index 00c7c70df0..9c2e48cf07 100644 --- a/src/modules/page/room/RoomDetails.page.vue +++ b/src/modules/page/room/RoomDetails.page.vue @@ -82,7 +82,7 @@ const { createBoard } = roomDetailsStore; const isLeaveRoomProhibitedDialogOpen = ref(false); -const pageTitle = computed(() => buildPageTitle(`${room.value.name} - ${t("pages.roomDetails.title")}`)); +const pageTitle = computed(() => buildPageTitle(room.value.name, t("pages.roomDetails.title"))); useTitle(pageTitle); const { canDeleteRoom, canEditRoomContent, canLeaveRoom, canCopyRoom, canShareRoom, canListDrafts, canViewRoom } = diff --git a/src/modules/page/room/RoomEdit.page.vue b/src/modules/page/room/RoomEdit.page.vue index 91c3c66475..a2b58a5f29 100644 --- a/src/modules/page/room/RoomEdit.page.vue +++ b/src/modules/page/room/RoomEdit.page.vue @@ -39,7 +39,7 @@ const { canEditRoom } = useRoomAuthorization(); const roomData = ref(); -const pageTitle = computed(() => buildPageTitle(`${t("pages.roomEdit.title")}`)); +const pageTitle = computed(() => buildPageTitle(t("pages.roomEdit.title"), roomData.value?.name)); useTitle(pageTitle); onMounted(async () => { diff --git a/src/modules/page/room/RoomInvitationLinkStatus.page.vue b/src/modules/page/room/RoomInvitationLinkStatus.page.vue index 0be901930f..a981e6f393 100644 --- a/src/modules/page/room/RoomInvitationLinkStatus.page.vue +++ b/src/modules/page/room/RoomInvitationLinkStatus.page.vue @@ -56,7 +56,7 @@ const useLink = async () => { updateInfoMessage(validationMessage, schoolName); }; -const pageTitle = computed(() => buildPageTitle(`${t("pages.rooms.invitationLinkStatus.title")}`)); +const pageTitle = computed(() => buildPageTitle(t("pages.rooms.invitationLinkStatus.title"))); useTitle(pageTitle); const breadcrumbs: Breadcrumb[] = [ diff --git a/src/modules/page/room/RoomMembers.page.unit.ts b/src/modules/page/room/RoomMembers.page.unit.ts index 7324d67614..d10ed86974 100644 --- a/src/modules/page/room/RoomMembers.page.unit.ts +++ b/src/modules/page/room/RoomMembers.page.unit.ts @@ -208,12 +208,13 @@ describe("RoomMembersPage", () => { it("should set correct title when user can add members", () => { roomPermissions.canAddRoomMembers = computed(() => true); const { room } = setup(); - expect(document.title).toContain(`${room?.name} - pages.rooms.members.manage`); + expect(document.title).toContain(`pages.rooms.members.management - ${room?.name}`); }); + it("should set correct title when user can not add members", () => { roomPermissions.canAddRoomMembers = computed(() => false); const { room } = setup(); - expect(document.title).toContain(`${room?.name} - pages.rooms.members.label`); + expect(document.title).toContain(`pages.rooms.members.label - ${room?.name}`); }); }); diff --git a/src/modules/page/room/RoomMembers.page.vue b/src/modules/page/room/RoomMembers.page.vue index 6b78ddc436..219c73d37a 100644 --- a/src/modules/page/room/RoomMembers.page.vue +++ b/src/modules/page/room/RoomMembers.page.vue @@ -136,7 +136,7 @@ watchEffect(() => { } }); -const pageTitle = computed(() => buildPageTitle(`${room.value?.name} - ${membersInfoText.value}`)); +const pageTitle = computed(() => buildPageTitle(membersInfoText.value, room.value?.name)); useTitle(pageTitle); const isVisibleTabNavigation = computed(() => canManageRoomInvitationLinks.value); diff --git a/src/modules/page/room/Rooms.page.vue b/src/modules/page/room/Rooms.page.vue index 863aa3dc2a..5c405ea2f9 100644 --- a/src/modules/page/room/Rooms.page.vue +++ b/src/modules/page/room/Rooms.page.vue @@ -8,7 +8,7 @@ @@ -35,7 +35,7 @@ const router = useRouter(); const { rooms, fetchRooms, isLoading, isEmpty } = useRoomsState(); const { canCreateRoom } = useRoomAuthorization(); -const pageTitle = computed(() => buildPageTitle(`${t("pages.rooms.title")}`)); +const pageTitle = computed(() => buildPageTitle(t("pages.rooms.title"))); useTitle(pageTitle); const fabAction = computed(() => { @@ -71,6 +71,8 @@ onMounted(() => { fetchRooms(); }); +const importFlowDestinations = computed(() => rooms.value.filter((room) => !room.isLocked)); + const onImportSuccess = (newName: string, destinationId?: string) => { notifySuccess( t("components.molecules.import.options.success", { diff --git a/src/pages/Error.page.unit.ts b/src/pages/Error.page.unit.ts index 38efbd5b1a..e02dffa545 100644 --- a/src/pages/Error.page.unit.ts +++ b/src/pages/Error.page.unit.ts @@ -9,14 +9,6 @@ import { setActivePinia } from "pinia"; import { beforeEach } from "vitest"; import { nextTick } from "vue"; -vi.mock( - "@/utils/pageTitle", - () => - ({ - buildPageTitle: (pageTitle) => pageTitle ?? "", - }) as typeof import("@/utils/pageTitle") -); - vi.mock("@/composables/locale-storage.composable", () => ({ useStorage: () => ({ set: vi.fn(), diff --git a/src/pages/administration/ClassOverview.page.unit.ts b/src/pages/administration/ClassOverview.page.unit.ts index 2d8d3102d4..5401f2ea05 100644 --- a/src/pages/administration/ClassOverview.page.unit.ts +++ b/src/pages/administration/ClassOverview.page.unit.ts @@ -32,14 +32,6 @@ vi.mock("vue-router", () => ({ const useRouteMock = useRoute; const useRouterMock = useRouter; -vi.mock( - "@/utils/pageTitle", - () => - ({ - buildPageTitle: (pageTitle) => pageTitle ?? "", - }) as typeof import("@/utils/pageTitle") -); - type Tab = "current" | "next" | "archive"; type CreateWrapperOptions = { @@ -149,17 +141,6 @@ describe("ClassOverview", () => { expect(wrapper.exists()).toBe(true); }); - describe("breadcrumbs", () => { - it("should render static breadcrumbs", () => { - const { wrapper } = setup(); - - const breadcrumbs = wrapper.findAll(".breadcrumbs-item"); - - expect(breadcrumbs.at(0)?.text()).toEqual("pages.administration.index.title"); - expect(breadcrumbs.at(1)?.text()).toEqual("pages.administration.classes.index.title"); - }); - }); - describe("onMounted", () => { describe("when loading the page", () => { it("should load the classes", async () => { diff --git a/src/pages/administration/ClassOverview.page.vue b/src/pages/administration/ClassOverview.page.vue index c7abb23066..dd065a9e43 100644 --- a/src/pages/administration/ClassOverview.page.vue +++ b/src/pages/administration/ClassOverview.page.vue @@ -1,7 +1,6 @@