Skip to content
Merged
51 changes: 30 additions & 21 deletions __tests__/components/WaveSmallLeaderboardDrop.test.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,41 @@
import { render, screen } from '@testing-library/react';
import React from 'react';
import { render, screen } from "@testing-library/react";
import React from "react";

jest.mock('@/components/waves/small-leaderboard/MemesWaveSmallLeaderboardDrop', () => ({
MemesWaveSmallLeaderboardDrop: () => <div>memes</div>,
}));
jest.mock('@/components/waves/small-leaderboard/DefaultWaveSmallLeaderboardDrop', () => ({
DefaultWaveSmallLeaderboardDrop: () => <div>default</div>,
}));
jest.mock('@/hooks/useWave', () => ({ useWave: jest.fn() }));
const useWaveLeaderboardRendererSet = jest.fn();

const { useWave } = require('@/hooks/useWave');
jest.mock("@/components/waves/leaderboard/leaderboardRendererRegistry", () => ({
useWaveLeaderboardRendererSet: (...args: any[]) =>
useWaveLeaderboardRendererSet(...args),
}));

const { WaveSmallLeaderboardDrop } = require('@/components/waves/small-leaderboard/WaveSmallLeaderboardDrop');
const {
WaveSmallLeaderboardDrop,
} = require("@/components/waves/small-leaderboard/WaveSmallLeaderboardDrop");

describe('WaveSmallLeaderboardDrop', () => {
describe("WaveSmallLeaderboardDrop", () => {
const drop = {} as any;
const wave = {} as any;
const wave = { id: "w1" } as any;
const onDropClick = jest.fn();

it('renders Memes component when wave is memes', () => {
useWave.mockReturnValue({ isMemesWave: true });
render(<WaveSmallLeaderboardDrop drop={drop} wave={wave} onDropClick={onDropClick} />);
expect(screen.getByText('memes')).toBeInTheDocument();
beforeEach(() => {
useWaveLeaderboardRendererSet.mockReset();
});

it('renders Default component when wave is not memes', () => {
useWave.mockReturnValue({ isMemesWave: false });
render(<WaveSmallLeaderboardDrop drop={drop} wave={wave} onDropClick={onDropClick} />);
expect(screen.getByText('default')).toBeInTheDocument();
it("renders the resolved small leaderboard renderer", () => {
useWaveLeaderboardRendererSet.mockReturnValue({
variant: "quorum",
LeaderboardDrop: () => null,
SmallLeaderboardDrop: () => <div>quorum</div>,
});

render(
<WaveSmallLeaderboardDrop
drop={drop}
wave={wave}
onDropClick={onDropClick}
/>
);
expect(useWaveLeaderboardRendererSet).toHaveBeenCalledWith("w1");
expect(screen.getByText("quorum")).toBeInTheDocument();
});
});
21 changes: 15 additions & 6 deletions __tests__/components/memes/drops/MemesLeaderboardDrop.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,18 @@ jest.mock("@/components/waves/memes/submission/MemesArtResubmitAction", () => ({
</button>
),
}));

const mockMemesArtSubmissionModal = jest.fn((p: any) =>
p.isOpen ? (
<button data-testid="resubmit-modal" onClick={p.onSourceDropDeleted}>
source deleted
</button>
) : null
);

jest.mock("@/components/waves/memes/MemesArtSubmissionModal", () => ({
__esModule: true,
default: (p: any) =>
p.isOpen ? (
<button data-testid="resubmit-modal" onClick={p.onSourceDropDeleted}>
source deleted
</button>
) : null,
default: (p: any) => mockMemesArtSubmissionModal(p),
}));
jest.mock("react-dom", () => ({
...jest.requireActual("react-dom"),
Expand All @@ -130,6 +134,7 @@ const drop: any = {
};

beforeEach(() => {
mockMemesArtSubmissionModal.mockClear();
useDropInteractionRules.mockReturnValue({ canDelete: true });
useLongPressInteraction.mockReturnValue({
isActive: false,
Expand Down Expand Up @@ -198,10 +203,14 @@ test("opens mobile resubmit modal after the touch menu leaves", async () => {
await userEvent.click(screen.getByTestId("resubmit-action"));

expect(setIsActive).toHaveBeenCalledWith(false);
expect(mockMemesArtSubmissionModal).not.toHaveBeenCalled();
expect(screen.queryByTestId("resubmit-modal")).not.toBeInTheDocument();

await userEvent.click(screen.getByTestId("after-leave"));

expect(mockMemesArtSubmissionModal).toHaveBeenCalledWith(
expect.objectContaining({ isOpen: true })
);
expect(screen.getByTestId("resubmit-modal")).toBeInTheDocument();
});

Expand Down
51 changes: 25 additions & 26 deletions __tests__/components/waves/drop/SingleWaveDrop.test.tsx
Original file line number Diff line number Diff line change
@@ -1,36 +1,35 @@
import { render, screen } from '@testing-library/react';
import React from 'react';
import { SingleWaveDrop } from '@/components/waves/drop/SingleWaveDrop';
import { render, screen } from "@testing-library/react";
import React from "react";
import { SingleWaveDrop } from "@/components/waves/drop/SingleWaveDrop";

jest.mock('@/components/waves/drop/DefaultSingleWaveDrop', () => ({
__esModule: true,
DefaultSingleWaveDrop: () => <div data-testid="default" />,
}));
const useWaveParticipationRendererSet = jest.fn();

jest.mock('@/components/waves/drop/MemesSingleWaveDrop', () => ({
__esModule: true,
MemesSingleWaveDrop: () => <div data-testid="memes" />,
}));
jest.mock(
"@/components/waves/drops/participation/participationRendererRegistry",
() => ({
useWaveParticipationRendererSet: (...args: any[]) =>
useWaveParticipationRendererSet(...args),
})
);

const useSettings = jest.fn();

jest.mock('@/contexts/SeizeSettingsContext', () => ({
useSeizeSettings: () => ({ isMemesWave: useSettings }),
}));

describe('SingleWaveDrop', () => {
const drop: any = { wave: { id: 'w1' } };
describe("SingleWaveDrop", () => {
const drop: any = { wave: { id: "w1" } };
const onClose = jest.fn();

it('renders memes drop when wave is memes', () => {
useSettings.mockReturnValue(true);
render(<SingleWaveDrop drop={drop} onClose={onClose} />);
expect(screen.getByTestId('memes')).toBeInTheDocument();
beforeEach(() => {
useWaveParticipationRendererSet.mockReset();
});

it('renders default drop otherwise', () => {
useSettings.mockReturnValue(false);
it("renders the resolved single drop renderer", () => {
useWaveParticipationRendererSet.mockReturnValue({
variant: "quorum",
ParticipationDrop: () => null,
SingleWaveDrop: () => <div data-testid="quorum" />,
});

render(<SingleWaveDrop drop={drop} onClose={onClose} />);
expect(screen.getByTestId('default')).toBeInTheDocument();

expect(useWaveParticipationRendererSet).toHaveBeenCalledWith("w1");
expect(screen.getByTestId("quorum")).toBeInTheDocument();
});
});
Loading
Loading