Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/app/components/site/NavigationBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
isAdminOrEventManager,
isContentEditor,
isEventLeader,
isLoggedIn,
isTeacherOrAbove,
isTutorOrAbove,
} from "../../services";
Expand All @@ -32,6 +33,12 @@ export const NavigationBar = () => {
<LinkItem to="/tests">My tests {<MenuBadge count={quizzesCount} message="incomplete tests" />}</LinkItem>
</NavigationSection>

{!isLoggedIn(user) && (
<NavigationSection title="Teachers" svgIcon={<img src="/assets/Vector.svg" alt="Icon" className="svgIcon" />}>
<LinkItem to="/pages/teacher_landing_page">Benefits for teachers</LinkItem>
</NavigationSection>
)}

{isTutorOrAbove(user) && (
<NavigationSection title="Teachers" svgIcon={<img src="/assets/Vector.svg" alt="Icon" className="svgIcon" />}>
<LinkItem to="/groups">Manage groups</LinkItem>
Expand All @@ -43,6 +50,7 @@ export const NavigationBar = () => {
<LinkItem to="/gcse_teaching_order">GCSE suggested teaching order</LinkItem>
<LinkItem to="/teaching_order">A Level suggested teaching order</LinkItem>
<LinkItem to="/teacher_gcse_revision_page">GCSE revision plan</LinkItem>
<LinkItem to="/pages/teacher_landing_page">Benefits for teachers</LinkItem>
</>
)}
</NavigationSection>
Expand All @@ -57,6 +65,7 @@ export const NavigationBar = () => {
<LinkItem to="/pages/computer_science_journeys_gallery">Computer Science Journeys</LinkItem>
<LinkItem to="/careers_in_computer_science">Careers in Computer Science</LinkItem>
<LinkItem to="/glossary">Glossary</LinkItem>
<LinkItem to="/pages/student_landing_page">Benefits for students</LinkItem>
</NavigationSection>

<NavigationSection title="Events" svgIcon={<img src="/assets/Vector.svg" alt="Icon" className="svgIcon" />}>
Expand Down
83 changes: 80 additions & 3 deletions src/test/pages/IsaacApp.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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);
Expand All @@ -34,7 +40,7 @@ const navigationBarLinksPerRole: {
} = {
ANONYMOUS: {
"My Isaac": myIsaacLinks,
Teach: null,
Teach: loggedOutTeacherLinks,
Learn: learnLinks,
Events: eventsLinks,
Help: helpLinks,
Expand Down Expand Up @@ -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");
Expand Down
Loading