def test_union_datasource(self): # Given expected_query_dict = {"queryType": None, "dataSource": "things"} builder = QueryBuilder() # when builder_dict = {"datasource": "things"} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given expected_query_dict = { "queryType": None, "dataSource": { "type": "union", "dataSources": ["things", "others", "more"], }, } builder = QueryBuilder() # when builder_dict = {"datasource": ["things", "others", "more"]} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given check that it rejects non-string items builder = QueryBuilder() builder_dict = {"datasource": ["things", 123]} with pytest.raises(ValueError): query = builder.build_query(None, builder_dict)
def test_build_query_none_type(self): # given expected_query_dict = { "queryType": None, "dataSource": "things", "aggregations": [{"fieldName": "thing", "name": "count", "type": "count"}], "filter": {"dimension": "one", "type": "selector", "value": 1}, "having": {"aggregation": "sum", "type": "greaterThan", "value": 1}, "dimension": "dim1", } builder = QueryBuilder() # when builder_dict = { "datasource": "things", "aggregations": {"count": aggregators.count("thing")}, "filter": filters.Dimension("one") == 1, "having": having.Aggregation("sum") > 1, "dimension": "dim1", } query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # you should be able to pass `None` to dimension/having/filter for v in ["dimension", "having", "filter"]: expected_query_dict[v] = None builder_dict[v] = None query = builder.build_query(None, builder_dict) assert query.query_dict == expected_query_dict
def test_union_datasource(self): # Given expected_query_dict = { 'queryType': None, 'dataSource': 'things', } builder = QueryBuilder() # when builder_dict = {'datasource': 'things'} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given expected_query_dict = { 'queryType': None, 'dataSource': { 'type': 'union', 'dataSources': ['things', 'others', 'more'] } } builder = QueryBuilder() # when builder_dict = {'datasource': ['things', 'others', 'more']} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given check that it rejects non-string items builder = QueryBuilder() builder_dict = {'datasource': ['things', 123]} with pytest.raises(ValueError): query = builder.build_query(None, builder_dict)
def test_build_query_none_type(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{ 'fieldName': 'thing', 'name': 'count', 'type': 'count' }], 'filter': { 'dimension': 'one', 'type': 'selector', 'value': 1 }, 'having': { 'aggregation': 'sum', 'type': 'greaterThan', 'value': 1 }, 'dimension': 'dim1', } builder = QueryBuilder() # when builder_dict = { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'dimension': 'dim1', } query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # you should be able to pass `None` to dimension/having/filter for v in ['dimension', 'having', 'filter']: expected_query_dict[v] = None builder_dict[v] = None query = builder.build_query(None, builder_dict) assert query.query_dict == expected_query_dict
def test_build_query(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{'fieldName': 'thing', 'name': 'count', 'type': 'count'}], 'postAggregations': [{ 'fields': [{ 'fieldName': 'sum', 'type': 'fieldAccess', }, { 'fieldName': 'count', 'type': 'fieldAccess', }], 'fn': '/', 'name': 'avg', 'type': 'arithmetic', }], 'pagingSpec': {'pagingIdentifies': {}, 'threshold': 1}, 'filter': {'dimension': 'one', 'type': 'selector', 'value': 1}, 'having': {'aggregation': 'sum', 'type': 'greaterThan', 'value': 1}, 'new_key': 'value', 'virtualColumns': [{ 'type': 'expression', 'name': 'foo', 'expression': "concat('foo' + page)", 'outputType': 'STRING' }], } builder = QueryBuilder() # when query = builder.build_query(None, { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'post_aggregations': { 'avg': (postaggregator.Field('sum') / postaggregator.Field('count')), }, 'paging_spec': { 'pagingIdentifies': {}, 'threshold': 1, }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'new_key': 'value', 'virtualColumns': [VirtualColumn(type='expression', name='foo', expression="concat('foo' + page)", outputType='STRING')] }) # then assert query.query_dict == expected_query_dict
def test_union_datasource(self): # Given expected_query_dict = {'queryType': None, 'dataSource': 'things',} builder = QueryBuilder() # when builder_dict = {'datasource': 'things'} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given expected_query_dict = {'queryType': None, 'dataSource': {'type': 'union', 'dataSources': ['things','others','more']}} builder = QueryBuilder() # when builder_dict = {'datasource': ['things', 'others','more']} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given check that it rejects non-string items builder = QueryBuilder() builder_dict = {'datasource': ['things',123]} with pytest.raises(ValueError): query = builder.build_query(None, builder_dict)
def test_build_query_none_type(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{'fieldName': 'thing', 'name': 'count', 'type': 'count'}], 'filter': {'dimension': 'one', 'type': 'selector', 'value': 1}, 'having': {'aggregation': 'sum', 'type': 'greaterThan', 'value': 1}, 'dimension': 'dim1', } builder = QueryBuilder() # when builder_dict = { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'dimension': 'dim1', } query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # you should be able to pass `None` to dimension/having/filter for v in ['dimension', 'having', 'filter']: expected_query_dict[v] = None builder_dict[v] = None query = builder.build_query(None, builder_dict) assert query.query_dict == expected_query_dict
def test_build_query(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{'fieldName': 'thing', 'name': 'count', 'type': 'count'}], 'postAggregations': [{ 'fields': [{ 'fieldName': 'sum', 'type': 'fieldAccess', }, { 'fieldName': 'count', 'type': 'fieldAccess', }], 'fn': '/', 'name': 'avg', 'type': 'arithmetic', }], 'pagingSpec': {'pagingIdentifies': {}, 'threshold': 1}, 'filter': {'dimension': 'one', 'type': 'selector', 'value': 1}, 'having': {'aggregation': 'sum', 'type': 'greaterThan', 'value': 1}, 'new_key': 'value', } builder = QueryBuilder() # when query = builder.build_query(None, { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'post_aggregations': { 'avg': (postaggregator.Field('sum') / postaggregator.Field('count')), }, 'paging_spec': { 'pagingIdentifies': {}, 'threshold': 1, }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'new_key': 'value', }) # then assert query.query_dict == expected_query_dict
def test_build_query(self): # given expected_query_dict = { "queryType": None, "dataSource": "things", "aggregations": [{"fieldName": "thing", "name": "count", "type": "count"}], "postAggregations": [ { "fields": [ {"fieldName": "sum", "type": "fieldAccess"}, {"fieldName": "count", "type": "fieldAccess"}, ], "fn": "/", "name": "avg", "type": "arithmetic", } ], "pagingSpec": {"pagingIdentifies": {}, "threshold": 1}, "filter": {"dimension": "one", "type": "selector", "value": 1}, "having": {"aggregation": "sum", "type": "greaterThan", "value": 1}, "new_key": "value", } builder = QueryBuilder() # when query = builder.build_query( None, { "datasource": "things", "aggregations": {"count": aggregators.count("thing")}, "post_aggregations": { "avg": (postaggregator.Field("sum") / postaggregator.Field("count")) }, "paging_spec": {"pagingIdentifies": {}, "threshold": 1}, "filter": filters.Dimension("one") == 1, "having": having.Aggregation("sum") > 1, "new_key": "value", }, ) # then assert query.query_dict == expected_query_dict