Files
Web-Parser-Constructor/tests/test_details_http.py
T

53 lines
2.8 KiB
Python

from test_web import env, login
from test_admin_http import headers
from parser_lab.views import default_view
def test_detail_configuration_preview_and_publication(env):
app, c = env
login(c)
h = headers(app, c)
repo = app.state.repo
d = repo.create('Study', b'[]', 'study.json', [{'name': 'Alice', 'bio': 'BIOGRAPHY', 'secret': 'HIDDEN'}])
view = default_view('table', ['/name'])
view['detail_columns'] = [{'pointer': '/bio', 'label': 'Biography'}]
payload = {'revision': d['revision'], 'views': {'table': view}}
endpoint = f"/api/admin/datasets/{d['id']}"
preview = c.post(endpoint + '/preview?kind=table&detail=1', json=payload, headers=h).json()
assert 'BIOGRAPHY' in preview['html'] and 'HIDDEN' not in preview['html']
saved = c.put(endpoint, json=payload, headers=h).json()
assert c.post(endpoint + '/publish', json=saved, headers=h).status_code == 200
for base in (f"/preview/{d['id']}/table", f"/dynamic-preview/{d['id']}/table",
f"/html/{d['slug']}/v/1/table", f"/interactive/{d['slug']}/v/1/table"):
assert 'BIOGRAPHY' not in c.get(base).text
detail = c.get(base + '/records/1')
assert detail.status_code == 200
assert 'BIOGRAPHY' in detail.text and 'HIDDEN' not in detail.text
# Editing the draft cannot change a published snapshot.
payload.update(revision=saved['revision'])
payload['views']['table']['detail_columns'] = [{'pointer': '/name', 'label': 'Name'}]
assert c.put(endpoint, json=payload, headers=h).status_code == 200
assert 'BIOGRAPHY' in c.get(f"/html/{d['slug']}/v/1/table/records/1").text
def test_delete_requires_auth_csrf_and_current_revision(env):
app, c = env
repo = app.state.repo
d = repo.create('Delete', b'[]', 'study.json', [{'name': 'Alice'}])
d['views'] = {'table': default_view('table', ['/name'])}
d = repo.save(d, d['revision'])
repo.publish(d['id'], d['revision'])
endpoint = f"/api/admin/datasets/{d['id']}"
assert c.request('DELETE', endpoint, headers={'origin': 'http://testserver'}, json={'revision': d['revision']}).status_code == 401
login(c)
h = headers(app, c)
assert c.request('DELETE', endpoint, headers={'origin': 'http://testserver'}, json={'revision': d['revision']}).status_code == 403
for payload in ([], {'revision': True}, {'revision': '2'}):
assert c.request('DELETE', endpoint, headers=h, json=payload).status_code == 400
assert c.request('DELETE', endpoint, headers=h, json={'revision': 1}).status_code == 409
assert c.request('DELETE', endpoint, headers=h, json={'revision': d['revision']}).status_code == 200
assert c.get(f"/html/{d['slug']}/v/1/table").status_code == 404
assert c.get(f"/admin/datasets/{d['id']}").status_code == 404
assert not list((repo.root / 'sources').iterdir())