refactor: 프론트엔드 리펙토링
This commit is contained in:
@@ -18,13 +18,13 @@ function databaseName(_prefix: string): string {
|
||||
return `ca-idb-v1:a${token.slice(0, 31)}.n${token.slice(1)}.p${token.split("").reverse().join("").slice(0, 31)}`;
|
||||
}
|
||||
|
||||
async function installLifecycleRuntime(
|
||||
async function startLifecycleRuntime(
|
||||
page: Page,
|
||||
name: string,
|
||||
targetVersion: 1 | 2,
|
||||
blockedTimeoutMs = 1_000,
|
||||
) {
|
||||
return await page.evaluate(
|
||||
): Promise<void> {
|
||||
await page.evaluate(
|
||||
async ({
|
||||
currentDatabaseName,
|
||||
currentTargetVersion,
|
||||
@@ -173,8 +173,12 @@ async function installLifecycleRuntime(
|
||||
__indexedDbLifecycleRuntime?: unknown;
|
||||
}
|
||||
).__indexedDbLifecycleRuntime = runtime;
|
||||
const opened = await runtime.open();
|
||||
return { opened, status: runtime.getStatus() };
|
||||
const opening = runtime.open();
|
||||
(
|
||||
globalThis as unknown as {
|
||||
__indexedDbLifecycleOpening?: Promise<unknown>;
|
||||
}
|
||||
).__indexedDbLifecycleOpening = opening;
|
||||
},
|
||||
{
|
||||
currentDatabaseName: name,
|
||||
@@ -184,6 +188,35 @@ async function installLifecycleRuntime(
|
||||
);
|
||||
}
|
||||
|
||||
async function settleLifecycleRuntime(page: Page): Promise<unknown> {
|
||||
return await page.evaluate(async () => {
|
||||
const state = globalThis as unknown as {
|
||||
__indexedDbLifecycleRuntime?: {
|
||||
getStatus(): unknown;
|
||||
};
|
||||
__indexedDbLifecycleOpening?: Promise<unknown>;
|
||||
};
|
||||
if (!state.__indexedDbLifecycleRuntime || !state.__indexedDbLifecycleOpening) {
|
||||
throw new Error("IndexedDB lifecycle runtime is not installed.");
|
||||
}
|
||||
const opened = await state.__indexedDbLifecycleOpening;
|
||||
return {
|
||||
opened,
|
||||
status: state.__indexedDbLifecycleRuntime.getStatus(),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
async function installLifecycleRuntime(
|
||||
page: Page,
|
||||
name: string,
|
||||
targetVersion: 1 | 2,
|
||||
blockedTimeoutMs = 1_000,
|
||||
): Promise<unknown> {
|
||||
await startLifecycleRuntime(page, name, targetVersion, blockedTimeoutMs);
|
||||
return await settleLifecycleRuntime(page);
|
||||
}
|
||||
|
||||
async function lifecycleStatus(page: Page): Promise<unknown> {
|
||||
return await page.evaluate(() => {
|
||||
const runtime = (
|
||||
@@ -977,12 +1010,16 @@ test("fails a blocked v2 upgrade closed, then closes its late connection after t
|
||||
);
|
||||
expect(blocker).toBe("OPEN");
|
||||
|
||||
const blocked = await installLifecycleRuntime(
|
||||
page,
|
||||
name,
|
||||
2,
|
||||
25,
|
||||
);
|
||||
await startLifecycleRuntime(page, name, 2, 500);
|
||||
await expect
|
||||
.poll(async () => await lifecycleStatus(page))
|
||||
.toEqual({
|
||||
kind: "BLOCKED",
|
||||
currentVersion: 1,
|
||||
targetVersion: 2,
|
||||
});
|
||||
|
||||
const blocked = await settleLifecycleRuntime(page);
|
||||
expect(blocked).toMatchObject({
|
||||
opened: {
|
||||
ok: false,
|
||||
@@ -992,9 +1029,8 @@ test("fails a blocked v2 upgrade closed, then closes its late connection after t
|
||||
},
|
||||
},
|
||||
status: {
|
||||
kind: "BLOCKED",
|
||||
currentVersion: 1,
|
||||
targetVersion: 2,
|
||||
kind: "CLOSED",
|
||||
reason: "NOT_OPENED",
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user