stackchain-dashboard/tests/test_private_data_inventory.py
timmy a2c91e0296
All checks were successful
CI / lint (pull_request) Successful in 3m1s
CI / build-release (pull_request) Successful in 6s
CI / browser-journey (pull_request) Successful in 2m9s
CI / release-candidate (pull_request) Has been skipped
fix: guard IndexedDB private work cleanup (Closes #1000)
2026-08-17 04:39:04 +00:00

80 lines
2.6 KiB
Python

import json
import subprocess
from pathlib import Path
MODULE = Path(__file__).parents[1] / "frontend" / "private-data-inventory.js"
def run_inventory(databases: dict[str, list[int]], registered: list[str]) -> dict:
script = r"""
const createInspector = require(__MODULE__);
const databases = __DATABASES__;
const indexedDB = {
async databases() { return Object.keys(databases).map(name => ({name})); },
open(name) {
const request = {};
queueMicrotask(() => {
const stores = databases[name];
const db = {
objectStoreNames: stores.map((_records, index) => `store-${index}`),
transaction(names) {
return {
objectStore(storeName) {
return {
count() {
const countRequest = {};
const index = Number(storeName.split('-')[1]);
queueMicrotask(() => {
countRequest.result = stores[index];
countRequest.onsuccess?.();
});
return countRequest;
},
};
},
};
},
close() {},
};
request.result = db;
request.onsuccess?.();
});
return request;
},
};
createInspector(indexedDB)(__REGISTERED__)
.then(result => process.stdout.write(JSON.stringify(result)))
.catch(error => { console.error(error); process.exit(1); });
"""
script = (
script.replace("__MODULE__", json.dumps(str(MODULE)))
.replace("__DATABASES__", json.dumps(databases))
.replace("__REGISTERED__", json.dumps(registered))
)
completed = subprocess.run(["node", "-e", script], capture_output=True, text=True)
assert completed.returncode == 0, completed.stderr
return json.loads(completed.stdout)
def test_inventory_counts_records_without_creating_absent_registered_databases():
result = run_inventory(
{"private-a": [2, 1], "other-app": [99]},
["private-a", "private-empty", "private-missing"],
)
assert result == {"recordCount": 3, "unavailable": False}
def test_inventory_is_conservatively_unavailable_when_enumeration_is_unsupported():
script = f"""
const createInspector = require({json.dumps(str(MODULE))});
createInspector({{}})(['private-a'])
.then(result => process.stdout.write(JSON.stringify(result)))
.catch(error => {{ console.error(error.message); process.exit(1); }});
"""
completed = subprocess.run(["node", "-e", script], capture_output=True, text=True)
assert completed.returncode == 0, completed.stderr
assert json.loads(completed.stdout) == {"recordCount": 0, "unavailable": True}