From f64431239b3cbf77042491290e4d87e5c4fef5ba Mon Sep 17 00:00:00 2001 From: Lukas Plank Date: Wed, 6 Nov 2024 16:59:57 +0100 Subject: [PATCH] test: implement basic tests for replace_query_select_clause The tests run variations of the example given in #122. Every test implemented here fails without the fix introduced with this PR. --- .../unit/test_replace_query_select_clause.py | 75 +++++++++++++++++++ tests/utils/_types.py | 7 ++ 2 files changed, 82 insertions(+) create mode 100644 tests/unit/test_replace_query_select_clause.py diff --git a/tests/unit/test_replace_query_select_clause.py b/tests/unit/test_replace_query_select_clause.py new file mode 100644 index 0000000..16130a0 --- /dev/null +++ b/tests/unit/test_replace_query_select_clause.py @@ -0,0 +1,75 @@ +"""Unit tests for rdfproxy.utils.sparql_utils.replace_query_select_clause.""" + +import re +from textwrap import dedent + +import pytest + +from rdfproxy.utils.sparql_utils import replace_query_select_clause +from tests.utils._types import QueryConstructionParameter + + +def _normalize_whitespace(string: str) -> str: + return re.sub(r"\s+", " ", string.strip()) + + +expected_simple_query = "select where { ?s ?p ?o . }" + +query_construction_parameters = [ + QueryConstructionParameter( + input_query=""" + select ?s ?p ?o + where { + ?s ?p ?o . + } + """, + expected_query=expected_simple_query, + ), + QueryConstructionParameter( + input_query=""" + select ?s + ?p ?o + where { + ?s ?p ?o . + } + """, + expected_query=expected_simple_query, + ), + QueryConstructionParameter( + input_query=""" + select ?s ?p + ?o + where { + ?s ?p ?o . + } + """, + expected_query=expected_simple_query, + ), + QueryConstructionParameter( + input_query=""" + select ?s ?p ?o where { + ?s ?p ?o . + } + """, + expected_query=expected_simple_query, + ), + QueryConstructionParameter( + input_query="select ?s ?p ?o where { ?s ?p ?o . }", + expected_query=expected_simple_query, + ), +] + + +@pytest.mark.parametrize( + ["input_query", "expected_query"], query_construction_parameters +) +def test_basic_replace_query_select_clause(input_query, expected_query): + _constructed_indent: str = replace_query_select_clause(input_query, "select ") + _constructed_dedent: str = replace_query_select_clause( + dedent(input_query), "select " + ) + + constructed_indent = _normalize_whitespace(_constructed_indent) + constructed_dedent = _normalize_whitespace(_constructed_dedent) + + assert constructed_dedent == constructed_indent == expected_query diff --git a/tests/utils/_types.py b/tests/utils/_types.py index d51993d..cf8b2da 100644 --- a/tests/utils/_types.py +++ b/tests/utils/_types.py @@ -19,3 +19,10 @@ class CountQueryParameter(NamedTuple): query: str model: type[BaseModel] expected: int + + +class QueryConstructionParameter(NamedTuple): + """Parameter type for query constructors.""" + + input_query: str + expected_query: str