diff --git a/src/app/components/site/NavigationBar.tsx b/src/app/components/site/NavigationBar.tsx index 33c66f6b82..55fb44ae9e 100644 --- a/src/app/components/site/NavigationBar.tsx +++ b/src/app/components/site/NavigationBar.tsx @@ -6,6 +6,7 @@ import { isAdminOrEventManager, isContentEditor, isEventLeader, + isLoggedIn, isTeacherOrAbove, isTutorOrAbove, } from "../../services"; @@ -32,6 +33,12 @@ export const NavigationBar = () => { My tests {} + {!isLoggedIn(user) && ( + }> + Benefits for teachers + + )} + {isTutorOrAbove(user) && ( }> Manage groups @@ -43,6 +50,7 @@ export const NavigationBar = () => { GCSE suggested teaching order A Level suggested teaching order GCSE revision plan + Benefits for teachers )} @@ -57,6 +65,7 @@ export const NavigationBar = () => { Computer Science Journeys Careers in Computer Science Glossary + Benefits for students }> diff --git a/src/test/pages/IsaacApp.test.tsx b/src/test/pages/IsaacApp.test.tsx index 0206e7fe3d..4ac62bc076 100644 --- a/src/test/pages/IsaacApp.test.tsx +++ b/src/test/pages/IsaacApp.test.tsx @@ -4,16 +4,21 @@ import { zip } from "lodash"; import { renderTestEnvironment, NavBarMenus, NAV_BAR_MENU_TITLE, TestUserRole } from "../utils"; import { USER_ROLES, history } from "../../app/services"; +const BENEFITS_FOR_STUDENTS_PAGE = "/pages/student_landing_page"; +const BENEFITS_FOR_TEACHERS_PAGE = "/pages/teacher_landing_page"; + const myIsaacLinks = ["/assignments", "/my_gameboards", "/progress", "/tests"]; const tutorLinks = ["/groups", "/set_assignments", "/my_markbook"]; +const loggedOutTeacherLinks = [BENEFITS_FOR_TEACHERS_PAGE]; const teacherLinks = [ "/groups", "/set_assignments", "/my_markbook", "/set_tests", - "/teaching_order_g_ocr", - "/teaching_order_g_aqa", + "/gcse_teaching_order", "/teaching_order", + "/teacher_gcse_revision_page", + BENEFITS_FOR_TEACHERS_PAGE, ]; const learnLinks = [ "/topics/gcse", @@ -23,6 +28,7 @@ const learnLinks = [ "/pages/computer_science_journeys_gallery", "/careers_in_computer_science", "/glossary", + BENEFITS_FOR_STUDENTS_PAGE, ]; const eventsLinks = ["/events", "/safeguarding"]; const teacherEventLinks = ["/events?show_reservations_only=true"].concat(eventsLinks); @@ -34,7 +40,7 @@ const navigationBarLinksPerRole: { } = { ANONYMOUS: { "My Isaac": myIsaacLinks, - Teach: null, + Teach: loggedOutTeacherLinks, Learn: learnLinks, Events: eventsLinks, Help: helpLinks, @@ -139,6 +145,77 @@ describe("IsaacApp", () => { }); it.todo("should show the users number of current assignments in the navigation menu"); + describe("Benefits navigation menus", () => { + const waitForAppToLoad = async () => { + await screen.findByTestId("main"); + }; + + const openNavDropdown = async (menu: NavBarMenus) => { + await waitForAppToLoad(); + const header = await screen.findByTestId("header"); + const navLink = await within(header).findByText(NAV_BAR_MENU_TITLE[menu]); + await userEvent.click(navLink); + const menuSectionParent = navLink.closest("li[class*='nav-item']") as HTMLLIElement | null; + if (!menuSectionParent) { + fail(`Missing NavigationSection parent for ${menu} menu.`); + } + return within(menuSectionParent).findAllByRole("menuitem"); + }; + + const expectTeachersMenuVisible = async (visible: boolean) => { + await waitForAppToLoad(); + const header = await screen.findByTestId("header"); + await waitFor(() => { + const navLink = within(header).queryByText(NAV_BAR_MENU_TITLE.Teach); + if (visible) { + expect(navLink).not.toBeNull(); + } else { + expect(navLink).toBeNull(); + } + }); + }; + + it("shows Benefits for students in the Learn menu for students", async () => { + renderTestEnvironment({ role: "STUDENT" }); + const learnMenuItems = await openNavDropdown("Learn"); + const benefitsForStudents = learnMenuItems.find((item) => item.textContent?.includes("Benefits for students")); + expect(benefitsForStudents).toBeDefined(); + expect(benefitsForStudents).toHaveAttribute("href", BENEFITS_FOR_STUDENTS_PAGE); + }); + + it("shows only Benefits for teachers in the Teachers menu for logged out users", async () => { + renderTestEnvironment({ role: "ANONYMOUS" }); + await expectTeachersMenuVisible(true); + const teachersMenuItems = await openNavDropdown("Teach"); + expect(teachersMenuItems).toHaveLength(1); + expect(teachersMenuItems[0]).toHaveTextContent("Benefits for teachers"); + expect(teachersMenuItems[0]).toHaveAttribute("href", BENEFITS_FOR_TEACHERS_PAGE); + }); + + it("shows Benefits for teachers alongside other teacher menus when logged in as a teacher", async () => { + renderTestEnvironment({ role: "TEACHER" }); + await expectTeachersMenuVisible(true); + const teachersMenuItems = await openNavDropdown("Teach"); + const hrefs = teachersMenuItems.map((item) => item.getAttribute("href")); + expect(hrefs).toEqual(teacherLinks); + expect(hrefs).toContain(BENEFITS_FOR_TEACHERS_PAGE); + }); + + it("does not show the Teachers menu for logged in students", async () => { + renderTestEnvironment({ role: "STUDENT" }); + await expectTeachersMenuVisible(false); + }); + + it("does not show Benefits for teachers in the Teachers menu for logged in tutors", async () => { + renderTestEnvironment({ role: "TUTOR" }); + await expectTeachersMenuVisible(true); + const teachersMenuItems = await openNavDropdown("Teach"); + const hrefs = teachersMenuItems.map((item) => item.getAttribute("href")); + expect(hrefs).toEqual(tutorLinks); + expect(hrefs).not.toContain(BENEFITS_FOR_TEACHERS_PAGE); + }); + }); + it.each(USER_ROLES)("should not show the promo content banner for %s users", async (role) => { renderTestEnvironment({ role }); await screen.findByTestId("main");