|
3 | 3 | import datetime
|
4 | 4 |
|
5 | 5 | import pytest
|
| 6 | +from sqlalchemy import func |
6 | 7 | from sqlalchemy_filters import apply_filters
|
7 | 8 | from sqlalchemy_filters.exceptions import (
|
8 | 9 | BadFilterFormat, FieldNotFound, BadQuery
|
@@ -240,6 +241,32 @@ def test_a_single_dict_can_be_supplied_as_filters(self, session):
|
240 | 241 | assert result[1].name == 'name_1'
|
241 | 242 |
|
242 | 243 |
|
| 244 | +class TestApplyFilterOnFieldBasedQuery(TestFiltersMixin): |
| 245 | + |
| 246 | + @pytest.mark.usefixtures('multiple_bars_inserted') |
| 247 | + def test_apply_filter_on_single_field_query(self, session): |
| 248 | + query = session.query(Bar.id) |
| 249 | + filters = [{'field': 'name', 'op': '==', 'value': 'name_1'}] |
| 250 | + |
| 251 | + filtered_query = apply_filters(query, filters) |
| 252 | + result = filtered_query.all() |
| 253 | + |
| 254 | + assert len(result) == 2 |
| 255 | + assert result[0] == (1,) |
| 256 | + assert result[1] == (3,) |
| 257 | + |
| 258 | + @pytest.mark.usefixtures('multiple_bars_inserted') |
| 259 | + def test_apply_filter_on_aggregate_query(self, session): |
| 260 | + query = session.query(func.count(Bar.id)) |
| 261 | + filters = [{'field': 'name', 'op': '==', 'value': 'name_1'}] |
| 262 | + |
| 263 | + filtered_query = apply_filters(query, filters) |
| 264 | + result = filtered_query.all() |
| 265 | + |
| 266 | + assert len(result) == 1 |
| 267 | + assert result[0] == (2,) |
| 268 | + |
| 269 | + |
243 | 270 | class TestApplyEqualToFilter(TestFiltersMixin):
|
244 | 271 |
|
245 | 272 | @pytest.mark.parametrize('operator', ['==', 'eq'])
|
|
0 commit comments