From 1b76f46ef742f951db708a3bbba40055df329524 Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Tue, 20 Aug 2019 21:53:56 -0500
Subject: [PATCH] alerts: add unit tests for new label query parser

---
 gracedb/alerts/tests/test_label_query.py | 46 ++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 gracedb/alerts/tests/test_label_query.py

diff --git a/gracedb/alerts/tests/test_label_query.py b/gracedb/alerts/tests/test_label_query.py
new file mode 100644
index 000000000..ec46e0300
--- /dev/null
+++ b/gracedb/alerts/tests/test_label_query.py
@@ -0,0 +1,46 @@
+try:
+    from unittest import mock
+except ImportError:  # python < 3
+    import mock
+import string
+
+import pytest
+
+from alerts.utils import get_label_query_parser
+
+# NOTE: list('ABC') == ['A', 'B', 'C']
+@pytest.mark.parametrize(
+    "labels,label_query,match",
+    [
+        (['A'], 'A & B', False),
+        (['A', 'B'], 'A & B', True),
+        (['A', 'B'], '~B', False),
+        (['A', 'B'], '~B', False),
+        (['A', 'B'], '~B', False),
+        (list('ABC'), 'A & B', True),
+        (['C'], 'A & B | C', True),
+        (['C'], '~C | B', False),
+        (list('ABCD'), 'A & B & C & D', True),
+        (list('ABCD'), 'A & B & C & D & ~E', True),
+        (list('ABCD'), 'A & B & C & D & E', False),
+        (list('ABCD'), 'A & C | C & ~E', True),
+        (list('ABCD'), '~A | C & ~E', True),
+        (list('ABCD'), '~A | D & E', False),
+        (list('ABCD'), 'A', True),
+        (list('ABCD'), 'A | F | G | H', True),
+        (list('ABCD'), 'E | F | C | H', True),
+        (list('ABCD'), 'Y | F | Z | H', False),
+        (list('ABCD'), 'A & B | ~C & ~D', True),
+        # Try a few with werid spacings
+        (list('ABCD'), 'A|D &~E', True),
+        (['A', 'B'], '~A |B&C&~D', False),
+        (['A', 'B'], 'A| B|C&~D', True),
+    ]
+)
+def test_label_query_parsing(labels, label_query, match):
+    label_list_method = 'alerts.utils.Label.objects.values_list'
+    #with mock.patch('alerts.utils.get_label_parser') as mock_glp:
+    with mock.patch(label_list_method) as mock_llm:
+        mock_llm.return_value = list(string.ascii_uppercase)
+        lqp = get_label_query_parser(labels)
+    assert lqp.parseString(label_query)[0] == match
-- 
GitLab