Files

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