Skip to content

Commit

Permalink
fix: Unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ShrimpCryptid committed Dec 17, 2024
1 parent 5e4051c commit 917f540
Showing 1 changed file with 107 additions and 24 deletions.
131 changes: 107 additions & 24 deletions website/utils/test/gh_route_utils.test.ts
Original file line number Diff line number Diff line change
@@ -1,95 +1,178 @@
import { describe, expect, it } from "@jest/globals";
import { convertQueryStringPathToUrl, convertUrlToQueryStringPath } from "../gh_route_utils";

import {
decodeGitHubPagesUrl,
decodeUrlQueryStringPath,
encodeGitHubPagesUrl,
encodeUrlPathAsQueryString,
tryRemoveHashRouting,
} from "../gh_route_utils";

describe("Route utils", () => {
describe("convertUrlToQueryStringPath", () => {
it("converts paths to query string", () => {
const url = new URL("https://www.example.com/one/two");
const convertedUrl = convertUrlToQueryStringPath(url, 0);
const convertedUrl = encodeUrlPathAsQueryString(url, 0);
expect(convertedUrl.toString()).toEqual("https://www.example.com/?/one/two");
});

it("handles extra slashes", () => {
const url = new URL("https://www.example.com/one/two/");
const convertedUrl = convertUrlToQueryStringPath(url, 0);
const convertedUrl = encodeUrlPathAsQueryString(url, 0);
expect(convertedUrl.toString()).toEqual("https://www.example.com/?/one/two/");
});

it("handles original query params and hashes", () => {
const url = new URL("https://www.example.com/one/two?a=0&b=1#hash");
const convertedUrl = convertUrlToQueryStringPath(url, 0);
const convertedUrl = encodeUrlPathAsQueryString(url, 0);
expect(convertedUrl.toString()).toEqual("https://www.example.com/?/one/two&a=0~and~b=1#hash");
});

it("handles base path segments", () => {
const url = new URL("https://www.example.com/one/two/");
const convertedUrl1 = convertUrlToQueryStringPath(url, 1);
const convertedUrl1 = encodeUrlPathAsQueryString(url, 1);
expect(convertedUrl1.toString()).toEqual("https://www.example.com/one/?/two/");

const convertedUrl2 = convertUrlToQueryStringPath(url, 2);
const convertedUrl2 = encodeUrlPathAsQueryString(url, 2);
expect(convertedUrl2.toString()).toEqual("https://www.example.com/one/two/?/");
});
});

describe("convertQueryStringPathToUrl", () => {
it("returns original url", () => {
const url = new URL("https://www.example.com/one/two/");
const convertedUrl = convertUrlToQueryStringPath(url, 0);
const restoredUrl = convertQueryStringPathToUrl(convertedUrl);
const convertedUrl = encodeUrlPathAsQueryString(url, 0);
const restoredUrl = decodeUrlQueryStringPath(convertedUrl);
expect(restoredUrl.toString()).toEqual(url.toString());
});

it("ignores normal urls", () => {
const url = new URL("https://www.example.com/one/two/");
const restoredUrl = convertQueryStringPathToUrl(url);
const restoredUrl = decodeUrlQueryStringPath(url);
expect(restoredUrl.toString()).toEqual(url.toString());
});

it("ignores normal urls with query parameters", () => {
const url = new URL("https://www.example.com/one/two/?a=0");
const restoredUrl = convertQueryStringPathToUrl(url);
const restoredUrl = decodeUrlQueryStringPath(url);
expect(restoredUrl.toString()).toEqual(url.toString());
});

it("handles converted query params and hashes", () => {
const url = new URL("https://www.example.com/one/two?a=0&b=1#hash");
const convertedUrl = convertUrlToQueryStringPath(url, 0);
const restoredUrl = convertQueryStringPathToUrl(convertedUrl);
const convertedUrl = encodeUrlPathAsQueryString(url, 0);
const restoredUrl = decodeUrlQueryStringPath(convertedUrl);
expect(restoredUrl.toString()).toEqual(url.toString());
});
});

describe("Convert GitHub pages URLs", () => {
it("handles viewer links", () => {
const urlsToTest: string[][] = [
describe("URL encoding and decoding", () => {
function testUrlEncodingAndDecoding(urls: string[][]): void {
for (const [input, encoded, decoded] of urls) {
const url = new URL(input);

const encodedInput = encodeGitHubPagesUrl(url);
expect(encodedInput.toString()).toEqual(encoded);
expect(tryRemoveHashRouting(decodeGitHubPagesUrl(encodedInput)).toString()).toEqual(decoded);
}
}

it("handles basic viewer links", () => {
testUrlEncodingAndDecoding([
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?collection=https://example.com/collection.json",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer&collection=https://example.com/collection.json",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?collection=https://example.com/collection.json",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?collection=https://example.com/collection.json&dataset=example",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer&collection=https://example.com/collection.json~and~dataset=example",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?collection=https://example.com/collection.json&dataset=example",
],
]);
});

it("removes hash routing", () => {
testUrlEncodingAndDecoding([
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/#/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/#/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/main/#/viewer?url=https://example.com",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/#/viewer?url=https://example.com",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?url=https://example.com",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer&url=https://example.com",
],
]);
});

it("reroutes from main to root", () => {
testUrlEncodingAndDecoding([
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?url=https://example.com,https://example2.com",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer&url=https://example.com,https://example2.com",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/main/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/viewer?url=https://example.com&file=example.json",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/viewer&url=https://example.com~and~file=example.json",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/main",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/?/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/",
],
]);
});

it("keeps pr-preview basepaths", () => {
testUrlEncodingAndDecoding([
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/?/",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/?/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/viewer",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/#/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/?/#/viewer",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/viewer",
],
[
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/#/viewer?collection=https://example.com/collection.json&dataset=example",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/?/#/viewer?collection=https://example.com/collection.json&dataset=example",
"https://allen-cell-animated.github.io/website-3d-cell-viewer/pr-preview/pr-100/viewer?collection=https://example.com/collection.json&dataset=example",
],
]);
});

it("handles hash removal when decoding dev server links", () => {
const urlsToTest = [
["https://example-server.com/website-3d-cell-viewer/", "https://example-server.com/website-3d-cell-viewer/"],
[
"https://example-server.com/website-3d-cell-viewer/#/viewer",
"https://example-server.com/website-3d-cell-viewer/viewer",
],
[
"https://example-server.com/website-3d-cell-viewer/#/viewer?collection=https://example.com/collection.json&dataset=example",
"https://example-server.com/website-3d-cell-viewer/viewer?collection=https://example.com/collection.json&dataset=example",
],
];

for (const [input, expected] of urlsToTest) {
const url = new URL(input);
const convertedUrl = convertUrlToQueryStringPath(url, 1);

expect(convertedUrl.toString()).toEqual(expected);
expect(convertQueryStringPathToUrl(convertedUrl).toString()).toEqual(input);
expect(tryRemoveHashRouting(decodeGitHubPagesUrl(url)).toString()).toEqual(expected);
}
});
});
Expand Down

0 comments on commit 917f540

Please sign in to comment.