|
| 1 | +from linter.rule import Severity |
| 2 | +from linter.rules.explore_joins_contain_many_to_many_relationship import ExploreJoinsContainManyToManyRelationship |
| 3 | + |
| 4 | + |
| 5 | +def test_run_method_successfully_validates_explore_with_joins_and_no_many_to_many_relationships() -> None: |
| 6 | + rule = ExploreJoinsContainManyToManyRelationship(Severity.ERROR.value) |
| 7 | + |
| 8 | + explore = {'sql_always_where': "${products.category} in\n (select ${products.category} from ${products.SQL_TABLE_NAME} products\n where ${products.brand} = 'Allegra K'\n group by 1)", 'joins': [{'type': 'left_outer', 'sql_on': '${order_items.user_id} = ${users.id}', 'relationship': 'many_to_one', 'name': 'users'}, {'fields': [ |
| 9 | + 'inventory_items.id'], 'type': 'left_outer', 'sql_on': '${order_items.inventory_item_id} = ${inventory_items.id}', 'relationship': 'many_to_one', 'name': 'inventory_items'}, {'type': 'left_outer', 'sql_on': '${inventory_items.product_id} = ${products.id}', 'relationship': 'many_to_one', 'name': 'products'}], 'name': 'order_items'} |
| 10 | + rule_result = rule.run(explore) |
| 11 | + assert rule_result == True |
| 12 | + |
| 13 | + |
| 14 | +def test_run_method_successfully_validates_explore_without_joins() -> None: |
| 15 | + rule = ExploreJoinsContainManyToManyRelationship(Severity.ERROR.value) |
| 16 | + |
| 17 | + explore = { |
| 18 | + 'sql_always_where': "${products.category} in\n (select ${products.category} from ${products.SQL_TABLE_NAME} products\n where ${products.brand} = 'Allegra K'\n group by 1)", 'name': 'order_items'} |
| 19 | + rule_result = rule.run(explore) |
| 20 | + assert rule_result == True |
| 21 | + |
| 22 | + |
| 23 | +def test_run_method_warns_when_explore_has_joins_and_with_many_to_many_relationship() -> None: |
| 24 | + rule = ExploreJoinsContainManyToManyRelationship(Severity.WARNING.value) |
| 25 | + |
| 26 | + explore = {'sql_always_where': "${products.category} in\n (select ${products.category} from ${products.SQL_TABLE_NAME} products\n where ${products.brand} = 'Allegra K'\n group by 1)", 'joins': [{'type': 'left_outer', 'sql_on': '${order_items.user_id} = ${users.id}', 'name': 'users'}, {'fields': [ |
| 27 | + 'inventory_items.id'], 'type': 'left_outer', 'sql_on': '${order_items.inventory_item_id} = ${inventory_items.id}', 'relationship': 'many_to_many', 'name': 'inventory_items'}, {'type': 'left_outer', 'sql_on': '${inventory_items.product_id} = ${products.id}', 'relationship': 'many_to_one', 'name': 'products'}], 'name': 'order_items'} |
| 28 | + rule_result = rule.run(explore) |
| 29 | + assert rule_result == False |
0 commit comments