"""集成用例构造真实图片字节与明确填报,测试数据不属于企业政策。""" from io import BytesIO from datetime import date import json from PIL import Image BASE = '/api/v1' def image_bytes(color='green'): output = BytesIO() Image.new('RGB', (32, 24), color).save(output, format='PNG') return output.getvalue() def fields(**changes): data = {'invoice_no': 'TEST-001', 'invoice_date': date.today().isoformat(), 'amount': '100.00', 'tax_amount': '6.00', 'tax_rate': '0.06', 'buyer_name': '测试企业', 'seller_name': '测试销售方', 'tax_number': '123456789012345678', 'invoice_type': '测试普通发票'} return {**data, **changes} def reimbursement(client, headers, color='green', declared=None, owner='alice', total='106.00'): row = client.post(BASE + '/reimbursements', headers=headers[owner], json={'title': '集成测试报销', 'total_amount': total, 'type': 1}).json()['data'] response = client.post(f"{BASE}/reimbursements/{row['id']}/invoices", headers=headers[owner], data={'revision': row['revision'], 'metadata': json.dumps([fields() if declared is None else declared])}, files=[('files', ('test.png', image_bytes(color), 'image/png'))]) assert response.status_code == 200 and 'event: completed' in response.text, response.text return client.get(f"{BASE}/reimbursements/{row['id']}", headers=headers[owner]).json()['data'] def submit(client, headers, row, owner='alice', key='test-submit-key'): response = client.post(f"{BASE}/reimbursements/{row['id']}/submit", headers={**headers[owner], 'Idempotency-Key': key}, json={'revision': row['revision']}) assert response.status_code == 202, response.text return response.json()['data']['audit_id']