feat: 기능 추가 과정중
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import {
|
||||
assertValidStoragePolicy,
|
||||
type BrowserStoragePolicy,
|
||||
} from "../../src/application/ports/browser-file-storage/shared.ts";
|
||||
|
||||
const localFirstPolicy: BrowserStoragePolicy = Object.freeze({
|
||||
owner: "frontend-platform",
|
||||
namespace: "draft-attachments",
|
||||
classification: "PERSONAL",
|
||||
authority: "LOCAL_FIRST",
|
||||
accountScope: "OPAQUE_PARTITION",
|
||||
retention: Object.freeze({ kind: "UNTIL_SYNCED" }),
|
||||
softBudgetBytes: 8 * 1024 * 1024,
|
||||
hardBudgetBytes: 16 * 1024 * 1024,
|
||||
evictionPriority: "USER_AUTHORED",
|
||||
logoutAction: "EXPORT_THEN_PURGE",
|
||||
accountDeletionAction: "PURGE_PARTITION",
|
||||
pressureAction: "RETAIN",
|
||||
unavailableFallback: "EXPORT_REQUIRED",
|
||||
});
|
||||
|
||||
describe("browser storage policy", () => {
|
||||
it("accepts a coherent dataset policy snapshot", () => {
|
||||
expect(() => assertValidStoragePolicy(localFirstPolicy)).not.toThrow();
|
||||
});
|
||||
|
||||
it("accepts explicitly evictable reconstructable origin data", () => {
|
||||
expect(() =>
|
||||
assertValidStoragePolicy({
|
||||
...localFirstPolicy,
|
||||
classification: "PUBLIC",
|
||||
authority: "RECONSTRUCTABLE",
|
||||
accountScope: "ORIGIN_SHARED",
|
||||
retention: { kind: "TTL", maxAgeMs: 60_000 },
|
||||
evictionPriority: "RECONSTRUCTABLE",
|
||||
logoutAction: "KEEP_ORIGIN_SHARED",
|
||||
accountDeletionAction: "KEEP_ORIGIN_SHARED",
|
||||
pressureAction: "EVICT_RECONSTRUCTABLE",
|
||||
unavailableFallback: "ONLINE_ONLY",
|
||||
}),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it.each([
|
||||
{
|
||||
name: "unsafe governance owner",
|
||||
patch: { owner: " account@example.com " },
|
||||
},
|
||||
{
|
||||
name: "personal origin-shared data",
|
||||
patch: {
|
||||
accountScope: "ORIGIN_SHARED",
|
||||
logoutAction: "KEEP_ORIGIN_SHARED",
|
||||
accountDeletionAction: "KEEP_ORIGIN_SHARED",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "partition without purge",
|
||||
patch: { logoutAction: "KEEP_ORIGIN_SHARED" },
|
||||
},
|
||||
{
|
||||
name: "unsynced partition without export",
|
||||
patch: { logoutAction: "PURGE_PARTITION" },
|
||||
},
|
||||
{
|
||||
name: "unsafe pressure eviction",
|
||||
patch: { pressureAction: "EVICT_RECONSTRUCTABLE" },
|
||||
},
|
||||
{
|
||||
name: "zero hard budget",
|
||||
patch: { softBudgetBytes: 0, hardBudgetBytes: 0 },
|
||||
},
|
||||
] as const)("rejects $name", ({ patch }) => {
|
||||
expect(() =>
|
||||
assertValidStoragePolicy({
|
||||
...localFirstPolicy,
|
||||
...patch,
|
||||
} as BrowserStoragePolicy),
|
||||
).toThrow(TypeError);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user