瀏覽代碼

add test cases for filter

Daniel Sheffield 1 年之前
父節點
當前提交
3371ddd805
共有 2 個文件被更改,包括 95 次插入0 次删除
  1. 0 0
      test/data/__init__.py
  2. 95 0
      test/data/test_filter.py

+ 0 - 0
test/data/__init__.py


+ 95 - 0
test/data/test_filter.py

@@ -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
+    }