"""Live browser acceptance for document workbench V2. Writes one PP category rule and one file override through the UI, verifies each read-back, then clears both. It never uploads, retries, reviews or publishes. """ import json from pathlib import Path import time import urllib.request from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service from selenium.webdriver.support.ui import WebDriverWait, Select BASE='http://127.0.0.1:8088' ROOT=Path(__file__).resolve().parents[1] def request_json(path,method='GET',body=None): data=None if body is None else json.dumps(body,ensure_ascii=False).encode() request=urllib.request.Request(BASE+path,data=data,method=method,headers={'Accept':'application/json','Content-Type':'application/json'}) with urllib.request.urlopen(request,timeout=10) as response:return json.load(response) def catalog(): items=[] while True: page=request_json(f'/api/v1/source-items?limit=100&offset={len(items)}') items.extend(page['data']) if len(items)>=page['summary']['total']:break assert page['data'] assert len(items)==len({item['id'] for item in items})==page['summary']['total'] return items def rules(connection):return request_json('/api/v1/scope-rules?connection_id='+connection)['data'] def eventually(check,seconds=25): deadline=time.monotonic()+seconds while time.monotonic()