mirror of
https://github.com/steveseguin/caption-local.git
synced 2026-10-10 01:59:31 +00:00
41 lines
2.2 KiB
Python
41 lines
2.2 KiB
Python
"""Token-gated synthetic capture; secrets remain out of evidence and relay output."""
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
from playwright.sync_api import sync_playwright
|
|
from browser_support import browser_options
|
|
|
|
root=Path(__file__).resolve().parents[1]
|
|
key=os.environ['CAPTION_API_KEY']
|
|
output=Path(os.environ.get('CAPTION_TEST_OUTPUT_DIR',str(root/'evidence')))
|
|
output.mkdir(parents=True,exist_ok=True)
|
|
with sync_playwright() as p:
|
|
browser=p.chromium.launch(**browser_options(),headless=True,args=[
|
|
'--use-fake-ui-for-media-stream','--use-fake-device-for-media-stream',
|
|
f'--use-file-for-fake-audio-capture={root/"samples/jfk.wav"}'])
|
|
context=browser.new_context(permissions=['microphone'])
|
|
context.route('**/*',lambda route: route.continue_() if route.request.url.startswith(
|
|
('http://127.0.0.1:','http://localhost:')) else route.abort())
|
|
context.route_web_socket('**/*',lambda socket: socket.close())
|
|
page=context.new_page()
|
|
page.goto(os.environ.get('CAPTION_TEST_URL','http://127.0.0.1:8772'))
|
|
page.locator('#auth').wait_for(state='visible')
|
|
assert page.locator('#start').is_disabled()
|
|
page.locator('#accessToken').fill('incorrect-test-token')
|
|
page.get_by_role('button',name='Connect to service').click()
|
|
page.wait_for_timeout(500)
|
|
assert page.locator('#auth').is_visible() and page.locator('#start').is_disabled()
|
|
page.locator('#accessToken').fill(key)
|
|
page.get_by_role('button',name='Connect to service').click()
|
|
page.locator('#auth').wait_for(state='hidden')
|
|
page.locator('#start').click()
|
|
page.wait_for_function('() => transcript.length>0',timeout=45000)
|
|
page.locator('#stop').click()
|
|
page.wait_for_function('() => !processing && !stopping',timeout=45000)
|
|
assert page.evaluate('() => !failed && !pending && localStorage.length===0 && sessionStorage.length===0')
|
|
assert page.locator('#accessToken').input_value()==''
|
|
(output/'browser-auth.json').write_text(json.dumps({'unauthenticated_blocked':True,'wrong_token_blocked':True,
|
|
'authenticated_capture_drained':True,'token_not_persisted':True}),encoding='utf-8')
|
|
browser.close()
|
|
print('Token-gated browser capture passed')
|