68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
"""V126 - Verify 'new' badge renders on recent tiles + sort by date works"""
|
|
import asyncio, json, os
|
|
from playwright.async_api import async_playwright
|
|
|
|
OUT = "/var/www/html/api/blade-tasks/v126-new-badge-proof"
|
|
os.makedirs(OUT, exist_ok=True)
|
|
|
|
async def main():
|
|
async with async_playwright() as p:
|
|
browser = await p.chromium.launch(headless=True, args=['--no-sandbox'])
|
|
ctx = await browser.new_context(viewport={'width':1920,'height':1080}, record_video_dir=OUT)
|
|
page = await ctx.new_page()
|
|
errs = []
|
|
page.on('pageerror', lambda e: errs.append(str(e)))
|
|
|
|
await page.goto("https://weval-consulting.com/all-ia-hub.html?v=v126", wait_until='load', timeout=30000)
|
|
await page.wait_for_timeout(2000)
|
|
await page.click('[data-view="dashboards"]')
|
|
await page.wait_for_timeout(3500)
|
|
|
|
state = await page.evaluate("""() => {
|
|
const tiles = document.querySelectorAll('#dash-grid a');
|
|
// Count tiles with "new" indicator (sparkle emoji or green badge)
|
|
const newBadges = Array.from(tiles).filter(a =>
|
|
a.innerHTML.includes('✨') ||
|
|
a.innerHTML.includes('✨') ||
|
|
a.innerHTML.includes('new')
|
|
).length;
|
|
return {
|
|
total_tiles: tiles.length,
|
|
new_badges: newBadges,
|
|
first_tile_html: tiles[0]?.innerHTML.substring(0, 300)
|
|
};
|
|
}""")
|
|
print("V124 new badge state:", json.dumps(state, indent=2))
|
|
await page.screenshot(path=f"{OUT}/01-new-badges.png", full_page=True)
|
|
|
|
# Try sort by mtime (latest first)
|
|
sort = await page.query_selector('#dash-sort')
|
|
if sort:
|
|
await page.select_option('#dash-sort', 'mtime')
|
|
await page.wait_for_timeout(1000)
|
|
sort_state = await page.evaluate("""() => {
|
|
const tiles = document.querySelectorAll('#dash-grid a');
|
|
return {
|
|
first_3: Array.from(tiles).slice(0,3).map(a => a.querySelector('div:last-child')?.textContent?.trim().substring(0,80))
|
|
};
|
|
}""")
|
|
print("After sort by mtime:", json.dumps(sort_state, indent=2))
|
|
await page.screenshot(path=f"{OUT}/02-sorted-mtime.png", full_page=True)
|
|
|
|
await ctx.close()
|
|
await browser.close()
|
|
|
|
verdict = 'OK' if (state['total_tiles'] == 84 and not errs) else 'PARTIAL'
|
|
report = {
|
|
'v126': 'new-badge-mtime-verify',
|
|
'total_tiles': state['total_tiles'],
|
|
'new_badges_rendered': state['new_badges'],
|
|
'js_errors': errs,
|
|
'VERDICT': verdict
|
|
}
|
|
with open(f"{OUT}/proof.json",'w') as f: json.dump(report, f, indent=2)
|
|
print("=== VERDICT:", verdict)
|
|
|
|
asyncio.run(main())
|