Skip to content
Open
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
158 changes: 158 additions & 0 deletions frontend/__tests__/controllers/url-handler.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import * as Notifications from "../../src/ts/states/notifications";
import * as TestLogic from "../../src/ts/test/test-logic";
import * as TestState from "../../src/ts/states/test";
import * as Misc from "../../src/ts/utils/misc";
import * as CustomText from "../../src/ts/test/custom-text";
import { FunboxName } from "@monkeytype/schemas/configs";
import { CustomTextSettings } from "@monkeytype/schemas/results";
import { loadTestSettingsFromUrl } from "../../src/ts/controllers/url-handler";
Expand All @@ -28,6 +29,12 @@ describe("url-handler", () => {
);
const notifyMock = vi.spyOn(Notifications, "showNoticeNotification");

const setTextMock = vi.spyOn(CustomText, "setText");
const setModeMock = vi.spyOn(CustomText, "setMode");
const setLimitModeMock = vi.spyOn(CustomText, "setLimitMode");
const setLimitValueMock = vi.spyOn(CustomText, "setLimitValue");
const setPipeDelimiterMock = vi.spyOn(CustomText, "setPipeDelimiter");

beforeEach(() => {
[
setConfigMock,
Expand All @@ -36,6 +43,11 @@ describe("url-handler", () => {
restartTestMock,
notifySuccessMock,
notifyMock,
setTextMock,
setModeMock,
setLimitModeMock,
setLimitValueMock,
setPipeDelimiterMock,
].forEach((it) => it.mockClear());

findGetParameterMock.mockImplementation((override) => override);
Expand Down Expand Up @@ -212,6 +224,152 @@ describe("url-handler", () => {
);
expect(restartTestMock).toHaveBeenCalled();
});
it("sets custom text (text, mode, limit, pipeDelimiter)", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["hello", "world"],
limit: { mode: "word", value: 5 },
mode: "random",
pipeDelimiter: true,
},
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setTextMock).toHaveBeenCalledWith(["hello", "world"]);
expect(setModeMock).toHaveBeenCalledWith("random");
expect(setLimitModeMock).toHaveBeenCalledWith("word");
expect(setLimitValueMock).toHaveBeenCalledWith(5);
expect(setPipeDelimiterMock).toHaveBeenCalledWith(true);
expect(restartTestMock).toHaveBeenCalled();
});
it("sets custom text with pipeDelimiter to false", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["a b c"],
pipeDelimiter: false,
mode: "repeat",
limit: { mode: "word", value: 10 },
},
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setTextMock).toHaveBeenLastCalledWith(["a b c"]);
expect(setModeMock).toHaveBeenCalledWith("repeat");
expect(setLimitModeMock).toHaveBeenCalledWith("word");
expect(setLimitValueMock).toHaveBeenLastCalledWith(10);
expect(setPipeDelimiterMock).toHaveBeenCalledWith(false);
expect(restartTestMock).toHaveBeenCalled();
});
it("sets custom text mode to 'repeat' when undefined", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["hello"],
limit: { mode: "word", value: 5 },
} as any,
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setModeMock).toHaveBeenCalledWith("repeat");
expect(restartTestMock).toHaveBeenCalled();
});
it("does not call limit setters when limit is undefined", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["hello", "world"],
mode: "repeat",
} as any,
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setLimitModeMock).not.toHaveBeenCalled();
expect(setLimitValueMock).not.toHaveBeenCalled();
expect(restartTestMock).toHaveBeenCalled();
});
it("sets pipeDelimiter to true when delimiter is '|' (legacy)", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["a", "b"],
mode: "repeat",
delimiter: "|",
} as any,
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setPipeDelimiterMock).toHaveBeenCalledWith(true);
expect(restartTestMock).toHaveBeenCalled();
});
it("handles legacy isWordRandom", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["hello"],
mode: "repeat",
isWordRandom: true,
word: 10,
} as any,
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setLimitModeMock).toHaveBeenCalledWith("word");
expect(setLimitValueMock).toHaveBeenCalledWith(10);
expect(restartTestMock).toHaveBeenCalled();
});
it("handles legacy isTimeRandom", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
urlData({
customText: {
text: ["hello"],
mode: "repeat",
isTimeRandom: true,
time: 60,
} as any,
}),
);

//WHEN
loadTestSettingsFromUrl("");

//THEN
expect(setLimitModeMock).toHaveBeenCalledWith("time");
expect(setLimitValueMock).toHaveBeenCalledWith(60);
expect(restartTestMock).toHaveBeenCalled();
});
it("adds notification", () => {
//GIVEN
findGetParameterMock.mockReturnValue(
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/ts/controllers/url-handler.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ export function loadTestSettingsFromUrl(getOverride?: string): void {
}
}

if (customTextSettings.pipeDelimiter) {
if (customTextSettings.pipeDelimiter !== undefined) {
CustomText.setPipeDelimiter(customTextSettings.pipeDelimiter);
}
//convert legacy values
Expand Down
Loading