Skip to content

Commit e72e513

Browse files
committed
fix: improve the community tests
1 parent 67126f2 commit e72e513

File tree

6 files changed

+47
-20
lines changed

6 files changed

+47
-20
lines changed

__tests__/components/sections/communities/overview/Courses.test.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ describe("CoursesOverview", () => {
1313
});
1414
expect(screen.getByText("communities.overview.courses.title")).toBeInTheDocument();
1515
[mockCourse].forEach((course) => {
16-
expect(screen.getByText(course.name)).toBeInTheDocument();
16+
const courseElement = screen.getByText(course.name);
17+
expect(courseElement).toBeInTheDocument();
18+
expect(courseElement.textContent).toBe(course.name);
1719
});
1820
});
1921
});

__tests__/components/sections/communities/overview/scoreboard/Filter.test.tsx

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,52 @@
11
import Filters, { filterOptions, sortingOptions } from "@/components/sections/communities/overview/scoreboard/Filter";
22
import "@testing-library/jest-dom";
33
import { fireEvent, screen } from "@testing-library/react";
4-
import { useRouter } from "next/router";
54
import { renderWithRedux } from "@__mocks__/renderWithRedux";
65

7-
jest.mock("next/router", () => ({
8-
useRouter: jest.fn(),
9-
}));
10-
11-
describe("Filter", () => {
6+
jest.mock("next/router", () => {
127
const mockRouter = {
138
query: { slug: "test-slug" },
149
locale: "en",
1510
push: jest.fn(),
1611
};
12+
return {
13+
useRouter: jest.fn().mockReturnValue(mockRouter),
14+
};
15+
});
1716

18-
beforeEach(() => {
19-
(useRouter as jest.Mock).mockReturnValue(mockRouter);
20-
});
17+
describe("Filter", () => {
2118

2219
it("renders filter options", () => {
2320
renderWithRedux(<Filters />);
2421
expect(screen.getByText("Filter by")).toBeInTheDocument();
2522
filterOptions.forEach((option) => {
26-
expect(screen.getByText(option.label)).toBeInTheDocument();
27-
expect(screen.getByDisplayValue(option.value)).toBeInTheDocument();
23+
const labelElement = screen.getByText(option.label)
24+
const valueElement = screen.getByDisplayValue(option.value)
25+
expect(labelElement).toBeInTheDocument();
26+
expect(labelElement.textContent).toBe(option.label)
27+
expect(valueElement).toBeInTheDocument();
28+
expect(valueElement.getAttribute("value")).toBe(option.value)
2829
});
2930
});
3031

32+
it("renders default filter and sort values", () => {
33+
renderWithRedux(<Filters />);
34+
const defaultFilter = screen.getByDisplayValue("all");
35+
const defaultSort = screen.getByDisplayValue("score");
36+
expect(defaultFilter).toBeChecked();
37+
expect(defaultSort).toBeChecked();
38+
});
39+
40+
it("disables filter options when value matches data", () => {
41+
renderWithRedux(<Filters />);
42+
filterOptions.forEach((option) => {
43+
const valueElement = screen.getByDisplayValue(option.value);
44+
if (option.value === "all") {
45+
expect(valueElement).toBeDisabled();
46+
}
47+
});
48+
});
49+
3150
it("updates filter options on change on filter", () => {
3251
renderWithRedux(<Filters />);
3352
filterOptions.forEach((option) => {
@@ -41,8 +60,12 @@ describe("Filter", () => {
4160
renderWithRedux(<Filters />);
4261
expect(screen.getByText("Sort")).toBeInTheDocument();
4362
sortingOptions.forEach((option) => {
44-
expect(screen.getByText(option.label)).toBeInTheDocument();
45-
expect(screen.getByDisplayValue(option.value)).toBeInTheDocument();
63+
const labelElement = screen.getByText(option.label)
64+
const optionElement = screen.getByDisplayValue(option.value)
65+
expect(labelElement).toBeInTheDocument();
66+
expect(labelElement.textContent).toBe(option.label);
67+
expect(optionElement).toBeInTheDocument();
68+
expect(optionElement.getAttribute("value")).toBe(option.value);
4669
});
4770
});
4871

__tests__/components/sections/communities/overview/scoreboard/_partials/FilterOption.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ describe("FilterOption", () => {
66
it("renders with label and is not checked by default", () => {
77
const label = "Test Label";
88
render(<FilterOption label={label} value="1" data="2" />);
9-
109
expect(screen.getByLabelText(label)).toBeInTheDocument();
1110
expect(screen.getByRole("radio")).not.toBeChecked();
1211
});

__tests__/components/sections/communities/overview/scoreboard/index.test.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ describe("ScoreboardOverview", () => {
2929
});
3030
if ([mockScoreboard] && [mockScoreboard].length !== 0) {
3131
[mockScoreboard].slice(0, items).forEach((item) => {
32-
expect(screen.getByText(item.user.displayName)).toBeInTheDocument();
32+
const displayNameElement = screen.getByText(item.user.displayName);
33+
expect(displayNameElement).toBeInTheDocument();
34+
expect(displayNameElement).toHaveTextContent(item.user.displayName)
3335
});
3436
} else {
3537
expect(screen.getByText("communities.scoreboard.empty-state.title")).toBeInTheDocument();

src/components/sections/communities/_partials/Section.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ interface SectionProps {
1616
className?: string;
1717
hideSubtitleOnMobile?: boolean;
1818
children?: ReactNode;
19+
testId?:string
1920
}
2021

2122
/**
@@ -33,9 +34,9 @@ interface SectionProps {
3334
}
3435
* @returns {ReactElement}
3536
*/
36-
export default function Section({ title, titleBold = true, subtitle, id, hideSubtitleOnMobile = false, children, className }: SectionProps): ReactElement {
37+
export default function Section({ title, testId="sectionId", titleBold = true, subtitle, id, hideSubtitleOnMobile = false, children, className }: SectionProps): ReactElement {
3738
return (
38-
<div data-testid="sectionId" id={id} className={`text-xl md:text-.5xl px-0 py-6 ${className}`}>
39+
<div data-testid={testId} id={id} className={`text-xl md:text-.5xl px-0 py-6 ${className}`}>
3940
{title && <H3 bold={titleBold}>{title}</H3>}
4041
<p className={`text-base md:text-.5xl font-normal leading-normal ${hideSubtitleOnMobile ? "hidden" : ""}`}>{subtitle}</p>
4142
<div>{children}</div>

src/types/course.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export type Course = {
2323
learningModules: LearningModule[];
2424
challenge?: Challenge;
2525
challenges?: Challenge[];
26-
translations?: any[];
26+
translations: any[];
2727
trailer: Trailer;
2828
disclaimer: string;
2929
items?: string[];
@@ -106,7 +106,7 @@ export type Rubric = {
106106
points: number;
107107
timestamp: number;
108108
typeSlug: string;
109-
[key?: string]: any;
109+
[key: string]: any;
110110
};
111111

112112
export type Format = {

0 commit comments

Comments
 (0)