Merge remote-tracking branch 'origin/sub_laptop_6' into main_laptop_1
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
import { describe, expect, it, vi } from 'vitest';
|
||||||
|
|
||||||
|
const info = vi.fn();
|
||||||
|
vi.mock('react-toastify', () => ({ toast: { info, success: vi.fn() } }));
|
||||||
|
vi.mock('../state', () => ({
|
||||||
|
getEntities: () => [],
|
||||||
|
isDrawingReadOnly: () => false,
|
||||||
|
resetUndoBaseline: vi.fn(),
|
||||||
|
setActiveLayerId: vi.fn(),
|
||||||
|
setEntities: vi.fn(),
|
||||||
|
setLayers: vi.fn(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('registerAutoSave', () => {
|
||||||
|
it('백업이 있어도 시작 토스트를 띄우지 않고 백업 듣기만 건다', async () => {
|
||||||
|
const addEventListener = vi.fn();
|
||||||
|
vi.stubGlobal('window', { addEventListener });
|
||||||
|
vi.stubGlobal('localStorage', {
|
||||||
|
getItem: () => JSON.stringify({ savedAt: 1, json: '{}' }),
|
||||||
|
setItem: vi.fn(),
|
||||||
|
removeItem: vi.fn(),
|
||||||
|
});
|
||||||
|
const { registerAutoSave } = await import('./autosave');
|
||||||
|
registerAutoSave();
|
||||||
|
expect(info).not.toHaveBeenCalled();
|
||||||
|
expect(addEventListener).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -107,17 +107,10 @@ export async function restoreRecovery(): Promise<void> {
|
|||||||
toast.success(`백업을 되살렸습니다 (${new Date(file.savedAt).toLocaleString()}).`);
|
toast.success(`백업을 되살렸습니다 (${new Date(file.savedAt).toLocaleString()}).`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 시작할 때 한 번 부른다. 백업이 있으면 안내만 띄우고, 되살리기는 사용자가 누른다. */
|
/** 시작할 때 한 번 부른다. 시작 안내는 띄우지 않음 — 되살리기는 파일 명령으로. */
|
||||||
export function registerAutoSave(): void {
|
export function registerAutoSave(): void {
|
||||||
window.addEventListener(HtmlEvent.UPDATE_STATE, () => {
|
window.addEventListener(HtmlEvent.UPDATE_STATE, () => {
|
||||||
clearTimeout(debounceTimer);
|
clearTimeout(debounceTimer);
|
||||||
debounceTimer = setTimeout(() => void writeBackup(), AUTOSAVE_DEBOUNCE_MS);
|
debounceTimer = setTimeout(() => void writeBackup(), AUTOSAVE_DEBOUNCE_MS);
|
||||||
});
|
});
|
||||||
|
|
||||||
const file = readRecovery();
|
|
||||||
if (!file) return;
|
|
||||||
toast.info(
|
|
||||||
`이전 작업 백업이 있습니다 (${new Date(file.savedAt).toLocaleString()}). 눌러서 되살리기.`,
|
|
||||||
{ autoClose: false, onClick: () => void restoreRecovery() }
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user