import { test, expect } from '@playwright/test'; test.describe('Scenario 10: IndexedDB Snapshots (Export, Reset, Import)', () => { test('exports database snapshot, resets demo data, imports snapshot, and verifies restored state', async ({ page }) => { await page.goto('/settings'); await page.waitForLoadState('domcontentloaded'); // 1. Export database snapshot const exportBtn = page.locator('[data-testid="export-snapshot-btn"]'); await expect(exportBtn).toBeVisible({ timeout: 15000 }); const downloadPromise = page.waitForEvent('download'); await exportBtn.click(); const download = await downloadPromise; expect(download.suggestedFilename()).toContain('.json'); // 2. Read downloaded snapshot content const downloadPath = await download.path(); expect(downloadPath).toBeTruthy(); // 3. Reset database to initial state const resetBtn = page.locator('[data-testid="reset-database-btn"]'); await expect(resetBtn).toBeVisible(); await resetBtn.click(); await expect(page.locator('text=сброшена').or(page.locator('text=Сбросить')).first()).toBeVisible({ timeout: 5000 }); // 4. Import the exported snapshot back if (downloadPath) { const fileInput = page.locator('[data-testid="import-snapshot-input"]'); await fileInput.setInputFiles(downloadPath); // Verify successful import notification await expect(page.locator('text=успешно импортирован').or(page.locator('text=Импортировано')).first()).toBeVisible({ timeout: 10000 }); } // 5. Reload page to ensure restored state persists await page.reload(); await page.waitForLoadState('domcontentloaded'); await expect(exportBtn).toBeVisible({ timeout: 15000 }); }); });