Esempio n. 1
0
class MacroParserTest(BaseParserTest):
    def setUp(self):
        super().setUp()
        self.parser = MacroParser(
            results=ParseResult.rpc(),
            project=self.snowplow_project_config,
        )

    def file_block_for(self, data, filename):
        return super().file_block_for(data, filename, 'macros')

    def test_single_block(self):
        raw_sql = '{% macro foo(a, b) %}a ~ b{% endmacro %}'
        block = self.file_block_for(raw_sql, 'macro.sql')
        self.parser.parse_file(block)
        self.assert_has_results_length(self.parser.results, macros=1)
        macro = list(self.parser.results.macros.values())[0]
        expected = ParsedMacro(
            name='foo',
            resource_type=NodeType.Macro,
            unique_id='macro.snowplow.foo',
            package_name='snowplow',
            original_file_path=normalize('macros/macro.sql'),
            root_path=get_abs_os_path('./dbt_modules/snowplow'),
            path=normalize('macros/macro.sql'),
            raw_sql=raw_sql
        )
        self.assertEqual(macro, expected)
        path = get_abs_os_path('./dbt_modules/snowplow/macros/macro.sql')
        self.assertIn(path, self.parser.results.files)
        self.assertEqual(self.parser.results.files[path].macros, ['macro.snowplow.foo'])
Esempio n. 2
0
class MacroParserTest(BaseParserTest):
    def setUp(self):
        super().setUp()
        self.parser = MacroParser(project=self.snowplow_project_config,
                                  manifest=Manifest({}, {}, {}, {}, {}, {}, {},
                                                    {}))

    def file_block_for(self, data, filename):
        return super().file_block_for(data, filename, 'macros')

    def test_single_block(self):
        raw_sql = '{% macro foo(a, b) %}a ~ b{% endmacro %}'
        block = self.file_block_for(raw_sql, 'macro.sql')
        self.parser.parse_file(block)
        self.assertEqual(len(self.parser.manifest.macros), 1)
        macro = list(self.parser.manifest.macros.values())[0]
        expected = ParsedMacro(
            name='foo',
            resource_type=NodeType.Macro,
            unique_id='macro.snowplow.foo',
            package_name='snowplow',
            original_file_path=normalize('macros/macro.sql'),
            root_path=get_abs_os_path('./dbt_modules/snowplow'),
            path=normalize('macros/macro.sql'),
            macro_sql=raw_sql,
        )
        self.assertEqual(macro, expected)
        path = get_abs_os_path('./dbt_modules/snowplow/macros/macro.sql')
        self.assertIn(path, self.parser.manifest.files)
        self.assertEqual(self.parser.manifest.files[path].macros,
                         ['macro.snowplow.foo'])

    def test_multiple_blocks(self):
        raw_sql = '{% macro foo(a, b) %}a ~ b{% endmacro %}\n{% macro bar(c, d) %}c + d{% endmacro %}'
        block = self.file_block_for(raw_sql, 'macro.sql')
        self.parser.parse_file(block)
        self.assertEqual(len(self.parser.manifest.macros), 2)
        macros = sorted(self.parser.manifest.macros.values(),
                        key=lambda m: m.name)
        expected_bar = ParsedMacro(
            name='bar',
            resource_type=NodeType.Macro,
            unique_id='macro.snowplow.bar',
            package_name='snowplow',
            original_file_path=normalize('macros/macro.sql'),
            root_path=get_abs_os_path('./dbt_modules/snowplow'),
            path=normalize('macros/macro.sql'),
            macro_sql='{% macro bar(c, d) %}c + d{% endmacro %}',
        )
        expected_foo = ParsedMacro(
            name='foo',
            resource_type=NodeType.Macro,
            unique_id='macro.snowplow.foo',
            package_name='snowplow',
            original_file_path=normalize('macros/macro.sql'),
            root_path=get_abs_os_path('./dbt_modules/snowplow'),
            path=normalize('macros/macro.sql'),
            macro_sql='{% macro foo(a, b) %}a ~ b{% endmacro %}',
        )
        self.assertEqual(macros, [expected_bar, expected_foo])
        path = get_abs_os_path('./dbt_modules/snowplow/macros/macro.sql')
        self.assertIn(path, self.parser.manifest.files)
        self.assertEqual(
            sorted(self.parser.manifest.files[path].macros),
            ['macro.snowplow.bar', 'macro.snowplow.foo'],
        )