import os, tempfile
fd, path=tempfile.mkstemp(suffix='.sqlite3'); os.close(fd); os.unlink(path)
os.environ['ICTW_DB']=path
os.environ['ICTW_BOOTSTRAP_ADMIN_TOKEN']='test-admin-secret'
from fastapi.testclient import TestClient
from app import app
c=TestClient(app)
assert c.get('/health').json()['ok']
r=c.post('/admin/clients',headers={'X-Admin-Token':'test-admin-secret'},json={'name':'Demo merchant','website':'https://example.com','personal_number':'01700000000','merchant_number':'01800000000','qr_url':'https://example.com/qr.png'})
assert r.status_code==200,r.text
key=r.json()['api_key']
a={'Authorization':'Bearer '+key}
r=c.post('/v1/checkouts',headers=a,json={'merchant_order_id':'ORDER-1','amount':'1000','mode':'merchant'})
assert r.status_code==200,r.text
p=r.json()
assert c.get('/pay/'+p['checkout_url'].rsplit('/',1)[-1]).status_code==200
assert c.get('/v1/payments/'+p['payment_id'],headers=a).json()['status']=='pending'
assert c.post('/v1/checkouts',headers=a,json={'merchant_order_id':'ORDER-1','amount':'1000','mode':'merchant'}).status_code==409
assert c.post('/admin/decisions',headers={'X-Admin-Token':'test-admin-secret'},json={'payment_id':p['payment_id'],'status':'verified_success'}).status_code==200
assert c.get('/v1/payments/'+p['payment_id'],headers=a).json()['status']=='verified_success'
assert c.post('/admin/decisions',headers={'X-Admin-Token':'test-admin-secret'},json={'payment_id':p['payment_id'],'status':'verified_success'}).status_code==409
print('PASS: client creation, hosted checkout, status, duplicate order, admin approval')
os.unlink(path)
