11import pytest
22
3+ from api_tabular import config
34from api_tabular .utils import build_sql_query_string
45
6+ from .conftest import RESOURCE_ID
7+
58
69def test_query_build_limit ():
710 query_str = []
8- result = build_sql_query_string (query_str , 12 )
11+ result = build_sql_query_string (query_str , page_size = 12 )
912 assert result == "limit=12&order=__id.asc"
1013
1114
1215def test_query_build_offset ():
1316 query_str = []
14- result = build_sql_query_string (query_str , 12 , 12 )
17+ result = build_sql_query_string (query_str , page_size = 12 , offset = 12 )
1518 assert result == "limit=12&offset=12&order=__id.asc"
1619
1720
1821def test_query_build_sort_asc ():
1922 query_str = ["column_name__sort=asc" ]
20- result = build_sql_query_string (query_str , 50 )
23+ result = build_sql_query_string (query_str , page_size = 50 )
2124 assert result == 'order="column_name".asc&limit=50'
2225
2326
@@ -39,43 +42,43 @@ def test_query_build_sort_asc_with_page_in_query():
3942
4043def test_query_build_sort_desc ():
4144 query_str = ["column_name__sort=desc" ]
42- result = build_sql_query_string (query_str , 50 )
45+ result = build_sql_query_string (query_str , page_size = 50 )
4346 assert result == 'order="column_name".desc&limit=50'
4447
4548
4649def test_query_build_exact ():
4750 query_str = ["column_name__exact=BIDULE" ]
48- result = build_sql_query_string (query_str , 50 )
51+ result = build_sql_query_string (query_str , page_size = 50 )
4952 assert result == '"column_name"=eq.BIDULE&limit=50&order=__id.asc'
5053
5154
5255def test_query_build_differs ():
5356 query_str = ["column_name__differs=BIDULE" ]
54- result = build_sql_query_string (query_str , 50 )
57+ result = build_sql_query_string (query_str , page_size = 50 )
5558 assert result == '"column_name"=neq.BIDULE&limit=50&order=__id.asc'
5659
5760
5861def test_query_build_contains ():
5962 query_str = ["column_name__contains=BIDULE" ]
60- result = build_sql_query_string (query_str , 50 )
63+ result = build_sql_query_string (query_str , page_size = 50 )
6164 assert result == '"column_name"=ilike.*BIDULE*&limit=50&order=__id.asc'
6265
6366
6467def test_query_build_in ():
6568 query_str = ["column_name__in=value1,value2,value3" ]
66- result = build_sql_query_string (query_str , 50 )
69+ result = build_sql_query_string (query_str , page_size = 50 )
6770 assert result == '"column_name"=in.(value1,value2,value3)&limit=50&order=__id.asc'
6871
6972
7073def test_query_build_less ():
7174 query_str = ["column_name__less=12" ]
72- result = build_sql_query_string (query_str , 50 , 12 )
75+ result = build_sql_query_string (query_str , page_size = 50 , offset = 12 )
7376 assert result == '"column_name"=lte.12&limit=50&offset=12&order=__id.asc'
7477
7578
7679def test_query_build_greater ():
7780 query_str = ["column_name__greater=12" ]
78- result = build_sql_query_string (query_str , 50 )
81+ result = build_sql_query_string (query_str , page_size = 50 )
7982 assert result == '"column_name"=gte.12&limit=50&order=__id.asc'
8083
8184
@@ -85,7 +88,7 @@ def test_query_build_multiple():
8588 "column_name__greater=12" ,
8689 "column_name__exact=BIDULE" ,
8790 ]
88- result = build_sql_query_string (query_str , 50 )
91+ result = build_sql_query_string (query_str , page_size = 50 )
8992 assert (
9093 result
9194 == '"column_name"=eq.BIDULE&"column_name"=gte.12&"column_name"=eq.BIDULE&limit=50&order=__id.asc'
@@ -95,16 +98,29 @@ def test_query_build_multiple():
9598def test_query_build_multiple_with_unknown ():
9699 query_str = ["select=numnum" ]
97100 with pytest .raises (ValueError ):
98- build_sql_query_string (query_str , 50 )
99-
100-
101- def test_query_aggregators ():
101+ build_sql_query_string (query_str , page_size = 50 )
102+
103+
104+ @pytest .mark .parametrize (
105+ "allow_aggregation" ,
106+ [
107+ False ,
108+ True ,
109+ ],
110+ )
111+ def test_query_aggregators (allow_aggregation , mocker ):
112+ if allow_aggregation :
113+ mocker .patch ("api_tabular.config.ALLOW_AGGREGATION" , [RESOURCE_ID ])
102114 query_str = [
103115 "column_name__groupby" ,
104116 "column_name__min" ,
105117 "column_name__avg" ,
106118 ]
107- results = build_sql_query_string (query_str , 50 ).split ("&" )
119+ if not allow_aggregation :
120+ with pytest .raises (PermissionError ):
121+ build_sql_query_string (query_str , resource_id = RESOURCE_ID , page_size = 50 )
122+ return
123+ results = build_sql_query_string (query_str , resource_id = RESOURCE_ID , page_size = 50 ).split ("&" )
108124 assert "limit=50" in results
109125 assert "order=__id.asc" not in results # no sort if aggregators
110126 select = [_ for _ in results if "select" in _ ]
0 commit comments