From d3390b696153a27801ec710e903c8d6929be4c7a Mon Sep 17 00:00:00 2001 From: Said Turksever Date: Wed, 23 Sep 2026 18:48:58 +0100 Subject: [PATCH] test(mapillary): harness accepts images without a creator name and dumps state on caption timeouts Co-Authored-By: Claude Fable 5.1 --- scripts/qa-mapillary.mjs | 42 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/scripts/qa-mapillary.mjs b/scripts/qa-mapillary.mjs index 2ce906d2e..3649317cc 100644 --- a/scripts/qa-mapillary.mjs +++ b/scripts/qa-mapillary.mjs @@ -71,6 +71,10 @@ async function main() { const page = await browser.newPage(); const errors = []; page.on('pageerror', (error) => errors.push(error.message)); + // The layer swallows listener exceptions into a console warning; surface them. + page.on('console', (message) => { + if (/listener error/i.test(message.text())) errors.push(message.text()); + }); await page.goto(url, { waitUntil: 'domcontentloaded' }); await page.waitForFunction( () => Boolean(window.__godsEyeView?.dataManager), @@ -270,17 +274,49 @@ async function main() { }, { timeout: 90_000 }, ); - await sleep(2500); + const street = await page.evaluate( + () => + window.__godsEyeView.dataManager.layers + .get('mapillary') + .module.getUIState().street, + ); + assert.equal(street.error, null, `viewer error: ${street.error}`); + // Some images carry no creator name; the date/bearing side always fills. + try { + await page.waitForFunction( + () => + document.getElementById('mly-image-when').textContent.trim() + .length > 0, + { timeout: 30_000 }, + ); + } catch (error) { + const dump = await page.evaluate(() => { + const u = window.__godsEyeView.dataManager.layers + .get('mapillary') + .module.getUIState(); + return { + street: u.street, + wrapHidden: document.getElementById('mly-viewer-wrap').hidden, + collapsed: document + .getElementById('mapillary-panel') + .classList.contains('collapsed'), + }; + }); + throw new Error( + `caption never filled: ${JSON.stringify(dump)}; errors=${JSON.stringify(errors)}`, + { cause: error }, + ); + } const view = await page.evaluate(() => ({ hidden: document.getElementById('mly-viewer-wrap').hidden, - by: document.getElementById('mly-image-by').textContent, + when: document.getElementById('mly-image-when').textContent.trim(), width: Math.round( document.getElementById('mly-viewer').getBoundingClientRect().width, ), })); assert.equal(view.hidden, false); assert.ok(view.width > 200); - assert.match(view.by, /Image by/); + assert.ok(view.when.length > 0, 'caption shows the capture date'); }, ); await step(