156 lines
4.5 KiB
Python
156 lines
4.5 KiB
Python
import datetime
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from wcs.categories import Category
|
|
from wcs.formdef import FormDef
|
|
from wcs.qommon.http_request import HTTPRequest
|
|
|
|
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app
|
|
from .utils import sign_uri
|
|
|
|
|
|
@pytest.fixture
|
|
def pub():
|
|
pub = create_temporary_pub(sql_mode=True)
|
|
Category.wipe()
|
|
FormDef.wipe()
|
|
|
|
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
|
pub.set_app_dir(req)
|
|
pub.cfg['identification'] = {'methods': ['password']}
|
|
pub.cfg['language'] = {'language': 'en'}
|
|
pub.write_cfg()
|
|
|
|
with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
|
|
fd.write(
|
|
'''\
|
|
[api-secrets]
|
|
coucou = 1234
|
|
'''
|
|
)
|
|
|
|
return pub
|
|
|
|
|
|
def teardown_module(module):
|
|
clean_temporary_pub()
|
|
|
|
|
|
def test_statistics_index(pub):
|
|
get_app(pub).get('/api/statistics/', status=403)
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/'))
|
|
assert resp.json['data'][0]['name'] == 'Forms Count'
|
|
assert resp.json['data'][0]['url'] == 'http://example.net/api/statistics/forms/count/'
|
|
|
|
|
|
def test_statistics_index_no_sql(pub):
|
|
pub.is_using_postgresql = lambda: False
|
|
assert get_app(pub).get(sign_uri('/api/statistics/')).json == {'data': [], 'err': 0}
|
|
|
|
|
|
def test_statistics_index_categories(pub):
|
|
Category(name='Category A').store()
|
|
Category(name='Category B').store()
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/'))
|
|
category_filter = [x for x in resp.json['data'][0]['filters'] if x['id'] == 'category'][0]
|
|
assert len(category_filter['options']) == 3
|
|
|
|
|
|
def test_statistics_forms_count(pub):
|
|
category_a = Category(name='Category A')
|
|
category_a.store()
|
|
category_b = Category(name='Category B')
|
|
category_b.store()
|
|
|
|
formdef = FormDef()
|
|
formdef.name = 'test 1'
|
|
formdef.category_id = category_a.id
|
|
formdef.fields = []
|
|
formdef.store()
|
|
formdef.data_class().wipe()
|
|
|
|
formdef2 = FormDef()
|
|
formdef2.name = 'test 2'
|
|
formdef2.category_id = category_b.id
|
|
formdef2.fields = []
|
|
formdef2.store()
|
|
formdef2.data_class().wipe()
|
|
|
|
for _i in range(20):
|
|
formdata = formdef.data_class()()
|
|
formdata.just_created()
|
|
formdata.receipt_time = datetime.datetime(2021, 1, 1, 0, 0).timetuple()
|
|
formdata.store()
|
|
|
|
for _i in range(30):
|
|
formdata = formdef2.data_class()()
|
|
formdata.just_created()
|
|
formdata.receipt_time = datetime.datetime(2021, 3, 1, 2, 0).timetuple()
|
|
formdata.store()
|
|
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/'))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [{'data': [20, 0, 30], 'label': 'Forms Count'}],
|
|
'x_labels': ['2021-01', '2021-02', '2021-03'],
|
|
},
|
|
'err': 0,
|
|
}
|
|
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/?time_interval=year'))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [{'data': [50], 'label': 'Forms Count'}],
|
|
'x_labels': ['2021'],
|
|
},
|
|
'err': 0,
|
|
}
|
|
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/?time_interval=weekday'))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [{'data': [30, 0, 0, 0, 20, 0, 0], 'label': 'Forms Count'}],
|
|
'x_labels': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
|
|
},
|
|
'err': 0,
|
|
}
|
|
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/?time_interval=hour'))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [
|
|
{
|
|
'label': 'Forms Count',
|
|
'data': [20, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
}
|
|
],
|
|
'x_labels': list(range(24)),
|
|
},
|
|
'err': 0,
|
|
}
|
|
|
|
# time_interval=day is not supported
|
|
get_app(pub).get(sign_uri('/api/statistics/forms/count/?time_interval=day'), status=400)
|
|
|
|
# apply category filter
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/?category=%s' % category_a.id))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [{'data': [20], 'label': 'Forms Count'}],
|
|
'x_labels': ['2021-01'],
|
|
},
|
|
'err': 0,
|
|
}
|
|
|
|
# apply period filter
|
|
resp = get_app(pub).get(sign_uri('/api/statistics/forms/count/?end=2021-02-01'))
|
|
assert resp.json == {
|
|
'data': {
|
|
'series': [{'data': [20], 'label': 'Forms Count'}],
|
|
'x_labels': ['2021-01'],
|
|
},
|
|
'err': 0,
|
|
}
|