diff --git a/tests/acceptance/10/CRITERIA.json b/tests/acceptance/10/CRITERIA.json new file mode 100644 index 0000000..846f9f5 --- /dev/null +++ b/tests/acceptance/10/CRITERIA.json @@ -0,0 +1,18 @@ +{ + "schema": "elffuss-t2t/criteria@2", + "issue": 10, + "criteria": [ + { + "index": 1, + "tests": [ + "tests/acceptance/10/criteria.test.js::criterion 1" + ] + }, + { + "index": 2, + "tests": [ + "tests/acceptance/10/criteria.test.js::criterion 2" + ] + } + ] +} diff --git a/tests/acceptance/10/criteria.test.js b/tests/acceptance/10/criteria.test.js new file mode 100644 index 0000000..cd442b1 --- /dev/null +++ b/tests/acceptance/10/criteria.test.js @@ -0,0 +1,31 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +const mod = await import('../../../web/js/model-cache.js') + +function setNavigator(value) { + Object.defineProperty(globalThis, 'navigator', { value, configurable: true, writable: true }) +} + +test('criterion 1', async () => { + const removed = [] + const deletedCaches = [] + const root = { + async removeEntry(name, opts) { removed.push([name, opts]) }, + } + setNavigator({ storage: { getDirectory: async () => root } }) + globalThis.caches = { delete: async (n) => { deletedCaches.push(n); return true } } + + await mod.clearModelCache() + + assert.ok(removed.some(([n]) => n === 'elffuss-models')) + assert.deepEqual(deletedCaches, ['elffuss-models-v1']) +}) + +test('criterion 2', async () => { + let calls = 0 + setNavigator({ storage: { getDirectory: async () => { calls++; throw new Error('sin OPFS') } } }) + globalThis.caches = { delete: async () => true } + + await assert.doesNotReject(mod.clearModelCache()) + assert.equal(calls, 1) +}) diff --git a/web/js/model-cache.js b/web/js/model-cache.js index c550d0e..558d2ea 100644 --- a/web/js/model-cache.js +++ b/web/js/model-cache.js @@ -48,4 +48,8 @@ export async function clearModelCache() { if (navigator.serviceWorker && navigator.serviceWorker.controller) navigator.serviceWorker.controller.postMessage('clear-models'); try { await caches.delete('elffuss-models-v1'); } catch { /* */ } + try { + const { clearAll } = await import('./runtime/model-store.js'); + await clearAll(); + } catch { /* sin almacén OPFS: nada que vaciar */ } }