diff --git a/dbt_meshify/storage/jinja_blocks.py b/dbt_meshify/storage/jinja_blocks.py index 795f061..2332e5c 100644 --- a/dbt_meshify/storage/jinja_blocks.py +++ b/dbt_meshify/storage/jinja_blocks.py @@ -24,7 +24,7 @@ def find_block_range(file_content: str, block_type: str, name: str) -> Tuple[int end_line = None for match in re.finditer( - r"{%-?\s+" + block_type + r"\s+" + name + r"([(a-zA-Z0-9=,_ )]*)\s-?%}", + r"{%-?\s*" + block_type + r"\s*" + name + r"\s*([(a-zA-Z0-9=,_ \'\")]*)\s*-?%}", file_content, re.MULTILINE, ): @@ -36,7 +36,7 @@ def find_block_range(file_content: str, block_type: str, name: str) -> Tuple[int raise Exception(f"Unable to find a {block_type} block with the name {name}.") for match in re.finditer( - r"{%-?\s+end" + block_type + r"\s+-?%}", file_content, re.MULTILINE + r"{%-?\s*end" + block_type + r"\s*-?%}", file_content, re.MULTILINE ): end = match.span()[1] # .span() gives tuple (start, end) new_end_line = end # file_content[:start].count("\n") diff --git a/dbt_meshify/utilities/versioner.py b/dbt_meshify/utilities/versioner.py index fdc331e..c1710d0 100644 --- a/dbt_meshify/utilities/versioner.py +++ b/dbt_meshify/utilities/versioner.py @@ -171,7 +171,6 @@ def bump_version( LatestVersionBehavior.Latest: greatest_version + 1, } - new_latest_version_number = latest_version_number_map[latest_version_behavior] # Setup the new version definitions new_version_data: Dict[str, Any] = {"v": new_greatest_version_number} diff --git a/tests/unit/test_jinja_blocks.py b/tests/unit/test_jinja_blocks.py index 6a8e896..9c62367 100644 --- a/tests/unit/test_jinja_blocks.py +++ b/tests/unit/test_jinja_blocks.py @@ -20,12 +20,146 @@ {% enddocs %} """ +no_leading_space = """\ + + +{%docs customer_id %} +The unique key for each customer. +{% enddocs %} +""" + +no_trailing_space = """\ + + +{% docs customer_id%} +The unique key for each customer. +{% enddocs %} +""" + +no_spaces = """\ + + +{%docs customer_id%} +The unique key for each customer. +{% enddocs %} +""" + +no_spaces_end_docs = """\ + + +{%docs customer_id%} +The unique key for each customer. +{%enddocs%} +""" + +special_character = """\ + + +{% docs cust-omer_id %} +The unique key for each customer. +{% enddocs %} +""" + +simple_macro = """\ + + +{% macro test_macro(name) %} + {{ name }} +{% endmacro %} +""" + +simple_macro_no_spaces = """\ + + +{%macro test_macro(name)%} + {{ name }} +{%endmacro%} +""" + +simple_macro_space_to_args = """\ + + +{% macro test_macro (name) %} + {{ name }} +{% endmacro %} +""" + +simple_macro_string_defaults = """\ + + +{% macro test_macro(name='dave') %} + {{ name }} +{% endmacro %} +""" + +simple_macro_string_defaults_double_quotes = """\ + + +{% macro test_macro(name="dave") %} + {{ name }} +{% endmacro %} +""" + +simple_macro_int_defaults = """\ + + +{% macro test_macro(num=8) %} + {{ num }} +{% endmacro %} +""" + class TestJinjaBlock: def test_from_file_detects_block_range(self): range = JinjaBlock.find_block_range(string, "docs", "customer_id") assert range == (2, 72) + def test_from_file_detects_block_range_no_leading_space(self): + range = JinjaBlock.find_block_range(no_leading_space, "docs", "customer_id") + assert range == (2, 71) + + def test_from_file_detects_block_range_no_trailing_space(self): + range = JinjaBlock.find_block_range(no_trailing_space, "docs", "customer_id") + assert range == (2, 71) + + def test_from_file_detects_block_range_no_spaces(self): + range = JinjaBlock.find_block_range(no_spaces, "docs", "customer_id") + assert range == (2, 70) + + def test_from_file_detects_block_range_no_spaces_end_docs(self): + range = JinjaBlock.find_block_range(no_spaces_end_docs, "docs", "customer_id") + assert range == (2, 68) + + def test_from_file_detects_block_range_special_character(self): + range = JinjaBlock.find_block_range(special_character, "docs", "cust-omer_id") + assert range == (2, 73) + + def test_from_file_detects_block_range_simple_macro(self): + range = JinjaBlock.find_block_range(simple_macro, "macro", "test_macro") + assert range == (2, 58) + + def test_from_file_detects_block_range_simple_macro_no_spaces(self): + range = JinjaBlock.find_block_range(simple_macro_no_spaces, "macro", "test_macro") + assert range == (2, 54) + + def test_from_file_detects_block_range_simple_macro_space_to_args(self): + range = JinjaBlock.find_block_range(simple_macro_space_to_args, "macro", "test_macro") + assert range == (2, 59) + + def test_from_file_detects_block_range_simple_macro_string_defaults(self): + range = JinjaBlock.find_block_range(simple_macro_string_defaults, "macro", "test_macro") + assert range == (2, 65) + + def test_from_file_detects_block_range_simple_macro_string_defaults_double_quotes(self): + range = JinjaBlock.find_block_range( + simple_macro_string_defaults_double_quotes, "macro", "test_macro" + ) + assert range == (2, 65) + + def test_from_file_detects_block_range_simple_macro_int_defaults(self): + range = JinjaBlock.find_block_range(simple_macro_int_defaults, "macro", "test_macro") + assert range == (2, 58) + def test_from_file_extracts_content(self): content = JinjaBlock.isolate_content(string, 2, 72) assert (