26 lines
2.1 KiB
JavaScript
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)
|