25 lines
1.1 KiB
Python
25 lines
1.1 KiB
Python
|
|
"""Legacy tests assert a synchronous response. Adapt ONLY tests via the actual worker.
|
||
|
|
|
||
|
|
Production /builds always returns HTTP 202. This testing adapter submits to the
|
||
|
|
real queue, drains it through the worker executor and returns the legacy report.
|
||
|
|
It must never be imported from app/ or the production frontend.
|
||
|
|
"""
|
||
|
|
import json
|
||
|
|
import re
|
||
|
|
from fastapi.testclient import TestClient
|
||
|
|
from httpx import Response
|
||
|
|
from app import builder,db,worker
|
||
|
|
|
||
|
|
class LegacyTestClient(TestClient):
|
||
|
|
def post(self,url,*args,**kwargs):
|
||
|
|
r=super().post(url,*args,**kwargs)
|
||
|
|
if r.status_code==202 and re.fullmatch(r'/api/sites/[^/]+/builds',str(url)):
|
||
|
|
result=r.json()
|
||
|
|
job=result['id']
|
||
|
|
worker.run_once(executor=lambda sid,opts: builder.build(sid,bool(opts.get('mirror_images',False))))
|
||
|
|
record=db.one('SELECT * FROM build_jobs WHERE id=?',(job,))
|
||
|
|
if record['state']=='done':
|
||
|
|
return Response(200,json=json.loads(record['result_json']),request=r.request)
|
||
|
|
return Response(400,json={'detail':record['error']},request=r.request)
|
||
|
|
return r
|