|
@@ -0,0 +1,95 @@
|
|
|
+#
|
|
|
+# Copyright (c) Daniel Sheffield 2023
|
|
|
+#
|
|
|
+# All rights reserved
|
|
|
+#
|
|
|
+# THIS SOFTWARE IS PROVIDED AS IS WITHOUT WARRANTY
|
|
|
+from bottle import FormsDict
|
|
|
+from typing import List, Tuple, Union
|
|
|
+
|
|
|
+from pytest import mark
|
|
|
+from app.data.filter import (
|
|
|
+ get_include_exclude,
|
|
|
+ get_query_param,
|
|
|
+ get_filter,
|
|
|
+)
|
|
|
+
|
|
|
+@mark.parametrize('value, expected', [
|
|
|
+ ('abc', ({'abc'}, set())),
|
|
|
+ (['abc', ], ({'abc'}, set())),
|
|
|
+ ('!def', (set(), {'def'})),
|
|
|
+ (['!def',], (set(), {'def'})),
|
|
|
+ ('abc!def', ({'abc'}, {'def'})),
|
|
|
+ (['abc', '!def'], ({'abc'}, {'def'})),
|
|
|
+ ('abc|123', ({'abc', '123'}, set())),
|
|
|
+ (['abc', '123'], ({'abc', '123'}, set())),
|
|
|
+ ('!def|456', (set(), {'def', '456'})),
|
|
|
+ (['!def', '!456'], (set(), {'def', '456'})),
|
|
|
+ ('abc!def|456', ({'abc'}, {'def', '456'})),
|
|
|
+ (['abc', '!def', '!456'], ({'abc'}, {'def', '456'})),
|
|
|
+ ('abc|123!def', ({'abc', '123'}, {'def'})),
|
|
|
+ (['abc','123', '!def'], ({'abc', '123'}, {'def'})),
|
|
|
+ ('abc|123!def|456', ({'abc', '123'}, {'def', '456'})),
|
|
|
+ (['abc', '123', '!def', '!456'], ({'abc', '123'}, {'def', '456'})),
|
|
|
+ ('', (set(), set())),
|
|
|
+ ([], (set(), set())),
|
|
|
+])
|
|
|
+def test_get_include_exclude(
|
|
|
+ value: Union[str, List, Tuple],
|
|
|
+ expected: Tuple[set[str], set[str]]
|
|
|
+):
|
|
|
+ assert get_include_exclude(value) == expected
|
|
|
+
|
|
|
+@mark.parametrize('expected, include, exclude', [
|
|
|
+ ('abc', {'abc'}, set()),
|
|
|
+ ('!def', set(), {'def'}),
|
|
|
+ ('abc!def', {'abc'}, {'def'}),
|
|
|
+ ('123|abc', {'abc', '123'}, set()),
|
|
|
+ ('!456|def', set(), {'def', '456'}),
|
|
|
+ ('abc!456|def', {'abc'}, {'def', '456'}),
|
|
|
+ ('123|abc!def', {'abc', '123'}, {'def'}),
|
|
|
+ ('123|abc!456|def', {'abc', '123'}, {'def', '456'}),
|
|
|
+ ('', set(), set())
|
|
|
+])
|
|
|
+def test_get_query_param(
|
|
|
+ include: set[str],
|
|
|
+ exclude: set[str],
|
|
|
+ expected: str
|
|
|
+):
|
|
|
+ assert get_query_param(include, exclude) == expected
|
|
|
+
|
|
|
+@mark.parametrize('query, expected', [
|
|
|
+ ('abc', ({'abc'}, set())),
|
|
|
+ (['abc', ], ({'abc'}, set())),
|
|
|
+ ('!def', (set(), {'def'})),
|
|
|
+ (['!def',], (set(), {'def'})),
|
|
|
+ ('abc!def', ({'abc'}, {'def'})),
|
|
|
+ (['abc', '!def'], ({'abc'}, {'def'})),
|
|
|
+ ('abc|123', ({'abc', '123'}, set())),
|
|
|
+ (['abc', '123'], ({'abc', '123'}, set())),
|
|
|
+ ('!def|456', (set(), {'def', '456'})),
|
|
|
+ (['!def', '!456'], (set(), {'def', '456'})),
|
|
|
+ ('abc!def|456', ({'abc'}, {'def', '456'})),
|
|
|
+ (['abc', '!def', '!456'], ({'abc'}, {'def', '456'})),
|
|
|
+ ('abc|123!def', ({'abc', '123'}, {'def'})),
|
|
|
+ (['abc','123', '!def'], ({'abc', '123'}, {'def'})),
|
|
|
+ ('abc|123!def|456', ({'abc', '123'}, {'def', '456'})),
|
|
|
+ (['abc', '123', '!def', '!456'], ({'abc', '123'}, {'def', '456'})),
|
|
|
+ ('', (set(), set())),
|
|
|
+ ([], (set(), set())),
|
|
|
+])
|
|
|
+def test_get_filter(
|
|
|
+ query: Union[str, List, Tuple],
|
|
|
+ expected: Tuple[set[str], set[str]],
|
|
|
+):
|
|
|
+ key = 'not-kg'
|
|
|
+ fd = FormsDict()
|
|
|
+ if isinstance(query, (list, tuple)):
|
|
|
+ for item in query:
|
|
|
+ fd.append(key, item)
|
|
|
+ else:
|
|
|
+ fd.append(key, query)
|
|
|
+
|
|
|
+ assert get_filter(fd, allow=['not-kg',]) == {
|
|
|
+ 'not-kg': expected
|
|
|
+ }
|