Files
houseplan-card/demo/smoke_backup_transfer.mjs
T

55 lines
2.1 KiB
JavaScript

import { launch, checkAll, finish } from './serve.mjs';
const { page, browser } = await launch();
const result = await page.evaluate(async () => {
const card = window.__card;
const root = () => card.shadowRoot || card.renderRoot;
card._openSettingsDialog();
await card.updateComplete;
const group = [...root().querySelectorAll('.dispsection')]
.some((node) => node.textContent.trim() === card._t('gs.backup_group'));
const actions = root().querySelectorAll('.backupactions .btn').length;
const importTrigger = root().querySelector('.backupupload > button');
importTrigger?.focus();
const keyboardImport = importTrigger?.tagName === 'BUTTON'
&& importTrigger.tabIndex === 0
&& importTrigger.matches(':focus');
card._openBackupExport();
await card.updateComplete;
const exportRadios = root().querySelectorAll('input[name="backup-kind"]').length;
const exportWarning = !!root().querySelector('.backupwarn');
card._backupExportDialog = null;
card._backupImportDialog = {
filename: 'backup.json', size: 1024, token: 'opaque',
preview: {
kind: 'full', source: 'foreign', created_at: '2026-08-11T00:00:00Z',
counts: { spaces: 1, rooms: 2, markers: 3, layout: 4 },
confirmation_required: true,
content: [{ url: '/api/houseplan/content/plans/_/floor.svg', state: 'detach_required' }],
},
expectedConfigRev: 1, expectedLayoutRev: 2, duplicatePolicy: 'skip',
confirmMissing: false, busy: false, error: '',
};
await card.updateComplete;
const apply = root().querySelector('hp-dialog .btn.danger');
const importSafe = {
danger: !!apply,
disabledUntilConfirmed: !!apply?.disabled,
noHorizontalOverflow: root().querySelector('hp-dialog').scrollWidth
<= root().querySelector('hp-dialog').clientWidth,
};
return { group, actions, keyboardImport, exportRadios, exportWarning, importSafe };
});
checkAll(result, {
group: true,
actions: 2,
keyboardImport: true,
exportRadios: 2,
exportWarning: true,
importSafe: { danger: true, disabledUntilConfirmed: true, noHorizontalOverflow: true },
});
await finish(browser, result);