MVP сайта
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import pytest
|
||||
from parser_lab.repository import Repository, Conflict, NotFound
|
||||
from parser_lab.views import default_view, validate_view, project_record
|
||||
from parser_lab.query import select_records
|
||||
|
||||
def make_draft(repo):
|
||||
d = repo.create('Study', b'[]', 'source.json', [{'name':'Ann','secret':'hidden'}, {'name':'Bob'}])
|
||||
d['views'] = {'table': default_view('table', ['/name'])}
|
||||
return repo.save(d, d['revision'])
|
||||
|
||||
def test_versions_and_conflicts(tmp_path):
|
||||
repo = Repository(tmp_path)
|
||||
d = make_draft(repo)
|
||||
p = repo.publish(d['id'], d['revision'])
|
||||
old = repo.get(d['id'])
|
||||
d['title'] = 'New title'
|
||||
d['records'][0]['name'] = 'Changed'
|
||||
d = repo.save(d, d['revision'])
|
||||
with pytest.raises(Conflict): repo.save(old, old['revision'])
|
||||
assert repo.publication(p['slug'],1)['records'][0]['name'] == 'Ann'
|
||||
assert repo.publish(d['id'],d['revision'])['version'] == 2
|
||||
assert Repository(tmp_path).get(d['id'])['title'] == 'New title'
|
||||
repo.unpublish(p['slug'],1)
|
||||
with pytest.raises(NotFound): repo.publication(p['slug'],1)
|
||||
|
||||
def test_view_projection_and_pagination():
|
||||
view = default_view('table',['/name'])
|
||||
rows = [{'name':str(i), 'secret':'hidden'} for i in range(51)]
|
||||
assert validate_view(view,rows) == []
|
||||
p = select_records(rows,view,3)
|
||||
assert p['items'][0]['id'] == '51'
|
||||
assert p['total'] == 51 and not p['has_next']
|
||||
assert 'hidden' not in str(project_record(rows[0],view,'1'))
|
||||
with pytest.raises(ValueError): select_records(rows,view,0)
|
||||
with pytest.raises(NotFound): select_records(rows,view,4)
|
||||
|
||||
def test_value_states_and_questionnaires():
|
||||
view = default_view('table',['/x'])
|
||||
got = [project_record(r,view,'1')['fields'][0] for r in [{},{'x':None},{'x':False},{'x':0},{'x':''}]]
|
||||
assert [v['state'] for v in got] == ['missing','null','value','value','value']
|
||||
assert [v['text'] for v in got] == ['Нет значения','null','false','0','']
|
||||
assert [v['type'] for v in got] == ['missing','null','boolean','number','string']
|
||||
q = default_view('questionnaire',['/answers'])
|
||||
q.update(questionnaire_mode='pairs',questions_pointer='/answers',question_pointer='/q',answer_pointer='/a')
|
||||
assert project_record({'answers':[{'q':'Sleep?','a':7}]},q,'1')['fields'][0]['text'] == '7'
|
||||
|
||||
def test_typed_category_and_search():
|
||||
v=default_view('table',['/x']); v.update(search_pointer='/x',category_pointer='/x')
|
||||
assert select_records([{'x':'HELLO'},{'x':'other'}],v,1,'hello')['total']==1
|
||||
assert select_records([{'x':0},{'x':'0'}],v,1,'','0')['total']==1
|
||||
Reference in New Issue
Block a user