import fs from 'node:fs';import {expect,test}from '@playwright/test';import {adminEnv,root,recovery,keys,preset,selected,openPreset,save,screen,fresh,go,settled,refresh,denied,persist,record,type Check}from './permission-support';
test('[CO] 지갑·송금 독립 권한 재검증',async({browser},info)=>{
 test.setTimeout(600000);test.skip(process.env.QA_ALLOW_PERMISSION_MUTATION!=='1','BLOCKED: mutation guard missing');const rows:Check[]=JSON.parse(fs.readFileSync(`${root}/matrix/CO.json`,'utf8'));const original=JSON.parse(fs.readFileSync(`${recovery}/CO-baseline.json`,'utf8'));const c=await browser.newContext({storageState:adminEnv().storageState,viewport:{width:1600,height:1000}});const a=await c.newPage();let p=await fresh(browser,'CO');const labels=['스토어 거래조회','스토어 정산조회','스토어 지갑내역','스토어 송금하기'];
 try{await go(p,'/');await openPreset(a,'CO');await save(a,'CO',{'스토어 거래조회':false,'스토어 정산조회':true,'스토어 지갑내역':false,'스토어 송금하기':false},'법인 지갑·송금 별도 권한 OFF');await refresh(p);await screen(p,info,'CO-independent-wallet-saved-refresh');await p.context().close();p=await fresh(browser,'CO');await go(p,'/');const wallet=await denied(p,'/wallets',info,'CO-independent-wallet-access-denied');const transfer=await denied(p,'/transfer',info,'CO-independent-transfer-access-denied');for(let i=rows.length-1;i>=0;i--)if(rows[i].id==='W06'&&rows[i].status==='BLOCKED')rows.splice(i,1);record(rows,'CO','isolated regression','W06',wallet.ok&&transfer.ok,'정산만 추가해도 별도 권한 OFF인 지갑·송금 직접 접근 모두 제한',[wallet.shot,transfer.shot]);
 }catch(error){if(/Timeout|ERR_CONNECTION|ERR_HTTP2/.test(String(error)))throw new Error(`BLOCKED: ${String(error)}`);throw error;}finally{try{await openPreset(a,'CO');await save(a,'CO',Object.fromEntries(labels.map(n=>[n,selected(original).includes(keys[n])])),'법인 지갑·송금 검증 원복');expect(selected(await preset(c,'CO'))).toEqual(selected(original));await refresh(p);await screen(p,info,'CO-independent-wallet-restored-refresh');}finally{persist('CO',rows);await p.context().close();await c.close();}}
});
