Closes #1405 - Properly uses `typescript-eslint`: we were missing the preset from it, so some of the default `eslint` rules (that don't properly work with typescript) were being applied and causing false positives - I also moved the `eslint` config into its own file, and enabled `typescript-eslint`'s type-awareness, so that we can enable more type-aware rules in the future if we like - Adds `ts-lit-plugin` to the typescript config, which _hopefully_ will allow us to catch issues during build (in CI) - It looks like `ts-lit-plugin` is sort of abandonware at the moment, and unfortunately _doesn't_ actually work for this purpose right now, but the lit team is working on a replacement here: https://www.npmjs.com/package/@lit-labs/analyzer - Adds `fork-ts-checker-webpack-plugin`, which allows the typescript checking process to be run on a separate forked thread in Webpack, which can help speed up builds & checking - Enables incremental type checking for better speed - Fixes a whole bunch of `eslint`-auto-fixable issues (unused imports and variables, some type issues, etc) - Fixes a bunch of `lit-analyzer` issues (mostly attribute naming, some type issues as well) - Fixes various other type issues: - Improves type safety in a bunch of places, notably anywhere `apiFetch` and `APIPaginatedList` are used - Removes some `any`s
62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { stub, restore } from "sinon";
|
|
import { expect } from "@open-wc/testing";
|
|
|
|
import AuthService from "./AuthService";
|
|
|
|
describe("AuthService", () => {
|
|
beforeEach(() => {
|
|
AuthService.broadcastChannel = new BroadcastChannel(AuthService.storageKey);
|
|
window.sessionStorage.clear();
|
|
stub(window.history, "pushState");
|
|
});
|
|
|
|
afterEach(() => {
|
|
AuthService.broadcastChannel.close();
|
|
restore();
|
|
});
|
|
|
|
describe("#initSessionStorage", () => {
|
|
it("returns auth in session storage", async () => {
|
|
stub(window.sessionStorage, "getItem").returns(
|
|
JSON.stringify({
|
|
headers: { Authorization: "_fake_headers_" },
|
|
tokenExpiresAt: "_fake_tokenExpiresAt_",
|
|
username: "test-auth@example.com",
|
|
})
|
|
);
|
|
const result = await AuthService.initSessionStorage();
|
|
expect(result).to.deep.equal({
|
|
headers: { Authorization: "_fake_headers_" },
|
|
tokenExpiresAt: "_fake_tokenExpiresAt_",
|
|
username: "test-auth@example.com",
|
|
});
|
|
});
|
|
it("returns auth from another tab", async () => {
|
|
stub(window.sessionStorage, "getItem");
|
|
const otherTabChannel = new BroadcastChannel(AuthService.storageKey);
|
|
otherTabChannel.addEventListener("message", () => {
|
|
otherTabChannel.postMessage({
|
|
name: "responding_auth",
|
|
auth: {
|
|
headers: { Authorization: "_fake_headers_from_tab_" },
|
|
tokenExpiresAt: "_fake_tokenExpiresAt_from_tab_",
|
|
username: "test-auth@example.com_from_tab_",
|
|
},
|
|
});
|
|
});
|
|
const result = await AuthService.initSessionStorage();
|
|
expect(result).to.deep.equal({
|
|
headers: { Authorization: "_fake_headers_from_tab_" },
|
|
tokenExpiresAt: "_fake_tokenExpiresAt_from_tab_",
|
|
username: "test-auth@example.com_from_tab_",
|
|
});
|
|
otherTabChannel.close();
|
|
});
|
|
it("resolves without stored auth or another tab", async () => {
|
|
stub(window.sessionStorage, "getItem");
|
|
const result = await AuthService.initSessionStorage();
|
|
expect(result).to.equal(null);
|
|
});
|
|
});
|
|
});
|