43 lines
2.0 KiB
Python
43 lines
2.0 KiB
Python
import importlib.util
|
|
import json
|
|
from pathlib import Path
|
|
import subprocess
|
|
import sys
|
|
from importlib.resources import files
|
|
|
|
from starlette.testclient import TestClient
|
|
from viano_bug_analysis.api import APIConfig,Project
|
|
from viano_bug_analysis.api.app import create_app
|
|
|
|
|
|
ROOT=Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def test_bundle_matches_authoritative_sources_and_is_packaged():
|
|
spec=importlib.util.spec_from_file_location('manual_builder',ROOT/'scripts/build_user_manual.py')
|
|
builder=importlib.util.module_from_spec(spec);spec.loader.exec_module(builder)
|
|
packaged=json.loads(files('viano_bug_analysis.web').joinpath('user-manual.json').read_text(encoding='utf-8'))
|
|
assert packaged==builder.bundle()
|
|
assert len(packaged['documents'])==9
|
|
assert len({d['id'] for d in packaged['documents']})==9
|
|
assert 'user-manual.json' in (ROOT/'pyproject.toml').read_text()
|
|
subprocess.run([sys.executable,str(ROOT/'scripts/build_user_manual.py'),'--check'],check=True)
|
|
|
|
|
|
def test_manual_requires_login_and_does_not_run_worker(tmp_path):
|
|
config=APIConfig(tmp_path,(Project('p','wow','vcore'),),())
|
|
app=create_app(config);app.state.sessions.users.manage('create_user','reader','password')
|
|
client=TestClient(app)
|
|
assert client.get('/v1/manual').status_code==401
|
|
client.post('/v1/auth/login',json={'username':'reader','password':'password'})
|
|
response=client.get('/v1/manual')
|
|
assert response.status_code==200 and response.headers['cache-control']=='no-store'
|
|
docs={d['id']:d for d in response.json()['documents']}
|
|
assert 'So arbeitet BugAnalysis' in docs['user-guide']['markdown']
|
|
assert 'password_env' in docs['project-configuration']['markdown']
|
|
assert 'retry-handoffs' in docs['capture-worker']['markdown']
|
|
assert str(tmp_path) not in response.text
|
|
assert not (tmp_path/'runtime/worker/status.json').exists()
|
|
assert client.get('/assets/user-manual.js').status_code==200
|
|
assert client.get('/assets/user-manual.json').status_code==404
|