mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-18 03:30:39 +09:00
72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
|
|
import { describe, expect, it } from "vitest";
|
||
|
|
import { resolveBootstrapCompanySelection, shouldClearStoredCompanySelection } from "./CompanyContext";
|
||
|
|
|
||
|
|
const activeCompany = { id: "company-1" };
|
||
|
|
const secondActiveCompany = { id: "company-2" };
|
||
|
|
const archivedCompany = { id: "archived-company" };
|
||
|
|
|
||
|
|
describe("resolveBootstrapCompanySelection", () => {
|
||
|
|
it("does not expose a stale stored company id before companies load", () => {
|
||
|
|
expect(resolveBootstrapCompanySelection({
|
||
|
|
companies: [],
|
||
|
|
sidebarCompanies: [],
|
||
|
|
selectedCompanyId: null,
|
||
|
|
storedCompanyId: "stale-company",
|
||
|
|
})).toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
it("replaces a stale stored company id with the first loaded company", () => {
|
||
|
|
expect(resolveBootstrapCompanySelection({
|
||
|
|
companies: [activeCompany],
|
||
|
|
sidebarCompanies: [activeCompany],
|
||
|
|
selectedCompanyId: null,
|
||
|
|
storedCompanyId: "stale-company",
|
||
|
|
})).toBe("company-1");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("keeps a valid selected company ahead of stored bootstrap state", () => {
|
||
|
|
expect(resolveBootstrapCompanySelection({
|
||
|
|
companies: [activeCompany],
|
||
|
|
sidebarCompanies: [activeCompany],
|
||
|
|
selectedCompanyId: "company-1",
|
||
|
|
storedCompanyId: "stale-company",
|
||
|
|
})).toBe("company-1");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("keeps a valid stored company id instead of falling back to the first company", () => {
|
||
|
|
expect(resolveBootstrapCompanySelection({
|
||
|
|
companies: [activeCompany, secondActiveCompany],
|
||
|
|
sidebarCompanies: [activeCompany, secondActiveCompany],
|
||
|
|
selectedCompanyId: null,
|
||
|
|
storedCompanyId: "company-2",
|
||
|
|
})).toBe("company-2");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("uses selectable sidebar companies before archived companies", () => {
|
||
|
|
expect(resolveBootstrapCompanySelection({
|
||
|
|
companies: [archivedCompany, activeCompany],
|
||
|
|
sidebarCompanies: [activeCompany],
|
||
|
|
selectedCompanyId: null,
|
||
|
|
storedCompanyId: "archived-company",
|
||
|
|
})).toBe("company-1");
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("shouldClearStoredCompanySelection", () => {
|
||
|
|
it("does not clear the stored company selection during an unauthorized company list response", () => {
|
||
|
|
expect(shouldClearStoredCompanySelection({
|
||
|
|
companies: [],
|
||
|
|
isLoading: false,
|
||
|
|
unauthorized: true,
|
||
|
|
})).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("clears the stored company selection when an authorized company list is empty", () => {
|
||
|
|
expect(shouldClearStoredCompanySelection({
|
||
|
|
companies: [],
|
||
|
|
isLoading: false,
|
||
|
|
unauthorized: false,
|
||
|
|
})).toBe(true);
|
||
|
|
});
|
||
|
|
});
|