add offline switch to in-app help
This commit is contained in:
@@ -196,7 +196,8 @@ test('offline worker serves stored audio ranges including seeks, rejects invalid
|
||||
async function managerHarness({ supported = true, saved = false } = {}) {
|
||||
const { context, store } = await loadStore(true);
|
||||
const elements = new Map();
|
||||
for (const id of ['offline-cache-toggle', 'offline-cache-status', 'offline-cache-refresh', 'bootstrap-enter']) {
|
||||
for (const id of ['offline-cache-toggle', 'offline-cache-status', 'offline-cache-refresh',
|
||||
'info-offline-cache-toggle', 'info-offline-cache-status', 'info-offline-cache-refresh', 'bootstrap-enter']) {
|
||||
const element = new EventTarget();
|
||||
element.attributes = new Map();
|
||||
element.setAttribute = (name, value) => element.attributes.set(name, value);
|
||||
@@ -236,8 +237,9 @@ test('offline switch prepares all resources once, persists opt-in and clears onl
|
||||
const { manager, store, elements, downloaded } = await managerHarness();
|
||||
await manager.initialize();
|
||||
assert.equal(elements.get('offline-cache-toggle').checked, false);
|
||||
elements.get('offline-cache-toggle').checked = true;
|
||||
elements.get('offline-cache-toggle').dispatchEvent(new Event('change'));
|
||||
assert.equal(elements.get('info-offline-cache-toggle').checked, false);
|
||||
elements.get('info-offline-cache-toggle').checked = true;
|
||||
elements.get('info-offline-cache-toggle').dispatchEvent(new Event('change'));
|
||||
const pending = manager.download();
|
||||
assert.equal(manager.busy, true);
|
||||
assert.equal(elements.get('bootstrap-enter').disabled, true);
|
||||
@@ -246,13 +248,28 @@ test('offline switch prepares all resources once, persists opt-in and clears onl
|
||||
assert.equal(elements.get('bootstrap-enter').disabled, false);
|
||||
assert.equal(downloaded.length, 3, 'duplicate resources must not be stored twice');
|
||||
assert.equal(elements.get('offline-cache-toggle').checked, true);
|
||||
assert.equal(elements.get('info-offline-cache-toggle').checked, true);
|
||||
assert.equal(elements.get('info-offline-cache-toggle').attributes.get('aria-checked'), 'true');
|
||||
assert.equal(elements.get('info-offline-cache-status').textContent, elements.get('offline-cache-status').textContent);
|
||||
assert.equal(elements.get('info-offline-cache-refresh').hidden, false);
|
||||
assert.equal(elements.get('offline-cache-refresh').hidden, false);
|
||||
assert.match(elements.get('offline-cache-status').textContent, /Wegwichtel ist für unterwegs bereit/);
|
||||
assert.ok(await store.match('/image.png'));
|
||||
await manager.disable();
|
||||
elements.get('info-offline-cache-refresh').dispatchEvent(new Event('click'));
|
||||
const refreshTask = manager.download();
|
||||
assert.equal(elements.get('offline-cache-refresh').disabled, true);
|
||||
assert.equal(elements.get('info-offline-cache-refresh').disabled, true);
|
||||
await refreshTask;
|
||||
assert.equal(downloaded.length, 6);
|
||||
assert.equal(elements.get('info-offline-cache-refresh').disabled, false);
|
||||
elements.get('offline-cache-toggle').checked = false;
|
||||
elements.get('offline-cache-toggle').dispatchEvent(new Event('change'));
|
||||
await new Promise(resolve => setImmediate(resolve));
|
||||
assert.equal(await store.state(), null);
|
||||
assert.equal(elements.get('offline-cache-toggle').checked, false);
|
||||
assert.equal(elements.get('offline-cache-refresh').hidden, true);
|
||||
assert.equal(elements.get('info-offline-cache-toggle').checked, false);
|
||||
assert.equal(elements.get('info-offline-cache-refresh').hidden, true);
|
||||
});
|
||||
|
||||
test('failed refresh preserves the old snapshot and download can be cancelled with the switch', async () => {
|
||||
@@ -285,6 +302,7 @@ test('offline UI handles unsupported browsers and malformed manifests without en
|
||||
const unsupported = await managerHarness({ supported: false });
|
||||
await unsupported.manager.initialize();
|
||||
assert.equal(unsupported.elements.get('offline-cache-toggle').disabled, true);
|
||||
assert.equal(unsupported.elements.get('info-offline-cache-toggle').disabled, true);
|
||||
assert.match(unsupported.elements.get('offline-cache-status').textContent, /nicht für unterwegs speichern/);
|
||||
const setup = await managerHarness();
|
||||
await setup.manager.initialize();
|
||||
@@ -294,6 +312,7 @@ test('offline UI handles unsupported browsers and malformed manifests without en
|
||||
setup.context.fetch = async () => new Response('error', { status: 500 });
|
||||
await assert.rejects(setup.manager.download(), /nicht für unterwegs geladen/);
|
||||
assert.equal(setup.elements.get('offline-cache-toggle').checked, false);
|
||||
assert.equal(setup.elements.get('info-offline-cache-toggle').checked, false);
|
||||
});
|
||||
|
||||
for (const filesystem of [false, true]) {
|
||||
|
||||
Reference in New Issue
Block a user