doxa-maps/internal/acceptance/big-picture-acceptance.mjs

26 lines
2.1 KiB
JavaScript

#!/usr/bin/env node
// Big Picture (Cat-4) composite acceptance test — the Gate-1 chain end-to-end.
// Exercises the REAL data flow: header emits research-filter {query,wagfRegion,wagfBlock,
// rop1,religion} -> parent props -> grid's applyDropdownFilters -> groups-filtered {total}.
// Runs against the live people-groups API (the same shape the grid fetches). Exit 1 on any fail.
const API='https://pray.doxa.life/api/people-groups/list?fields=name,slug,wagf_region,wagf_block,country_code,rop1,religion&lang='
function gridFilter(recs,{query='',wagfRegion='',wagfBlock='',rop1='',religion=''}={}){
let out=recs
for(const [f,sel] of Object.entries({wagf_region:wagfRegion,wagf_block:wagfBlock,rop1,religion}))
if(sel) out=out.filter(u=>(u[f]||{}).value===sel)
if(query){const q=query.toLowerCase()
out=out.filter(u=>String(u.name||'').toLowerCase().includes(q)||
['country_code','rop1','religion','wagf_region','wagf_block'].some(k=>String((u[k]||{}).label||'').toLowerCase().includes(q)))}
return out
}
const r=await fetch(API); const d=await r.json(); const recs=d.posts||d.data||d; const N=recs.length
let pass=0,fail=0
const t=(name,ok,cnt)=>{ok?pass++:fail++;console.log(` ${ok?'✓':'✗ FAIL'} ${name} -> ${cnt}`)}
t('no filter -> all',gridFilter(recs).length===N,gridFilter(recs).length)
t('Region=Africa',gridFilter(recs,{wagfRegion:'africa'}).every(u=>(u.wagf_region||{}).value==='africa'),gridFilter(recs,{wagfRegion:'africa'}).length)
t('Religion=Islam-Sunni',gridFilter(recs,{religion:'MSN'}).length>0,gridFilter(recs,{religion:'MSN'}).length)
t('Asia+Hinduism (faceted)',gridFilter(recs,{wagfRegion:'asia',religion:'H'}).length>0,gridFilter(recs,{wagfRegion:'asia',religion:'H'}).length)
t("search 'somali'",gridFilter(recs,{query:'somali'}).some(u=>u.name.toLowerCase().includes('somali')),gridFilter(recs,{query:'somali'}).length)
t("search 'a' within Africa",gridFilter(recs,{wagfRegion:'africa',query:'a'}).length>0,gridFilter(recs,{wagfRegion:'africa',query:'a'}).length)
console.log(`\n Big Picture acceptance: ${pass} passed, ${fail} failed (${N} live records)`)
process.exit(fail?1:0)