From cd15d9a329623d25890756b11c0f9e96633721b3 Mon Sep 17 00:00:00 2001 From: Samuel Marks <807580+SamuelMarks@users.noreply.github.com> Date: Mon, 9 Jan 2023 14:51:05 -0500 Subject: [PATCH] [cdd/__init__.py] Bump version ; [cdd/tests/{test_ast_utils,test_emit/test_emit_sqlalchemy_utils,test_gen}.py] Increase test coverage --- cdd/__init__.py | 2 +- cdd/tests/test_ast_utils.py | 2 +- .../test_emit/test_emit_sqlalchemy_utils.py | 33 ++++++++++++++ cdd/tests/test_gen.py | 45 +++++++++++++++++-- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/cdd/__init__.py b/cdd/__init__.py index 61f71e9..bfe1a36 100644 --- a/cdd/__init__.py +++ b/cdd/__init__.py @@ -8,7 +8,7 @@ from logging import getLogger as get_logger __author__ = "Samuel Marks" -__version__ = "0.0.92" +__version__ = "0.0.93" __description__ = ( "Open API to/fro routes, models, and tests. " "Convert between docstrings, classes, methods, argparse, and SQLalchemy." diff --git a/cdd/tests/test_ast_utils.py b/cdd/tests/test_ast_utils.py index 3cf1843..8178ecd 100644 --- a/cdd/tests/test_ast_utils.py +++ b/cdd/tests/test_ast_utils.py @@ -346,7 +346,7 @@ def test_infer_imports_with_sqlalchemy(self) -> None: identifier=None, identifier_name=None, ), - ("Boolean", "Column", "JSON", "String"), + ("Boolean", "Column", "Enum", "JSON", "String"), ) ), level=0, diff --git a/cdd/tests/test_emit/test_emit_sqlalchemy_utils.py b/cdd/tests/test_emit/test_emit_sqlalchemy_utils.py index 6fc91c7..b600b85 100644 --- a/cdd/tests/test_emit/test_emit_sqlalchemy_utils.py +++ b/cdd/tests/test_emit/test_emit_sqlalchemy_utils.py @@ -10,6 +10,7 @@ from cdd.emit.utils.sqlalchemy_utils import ( ensure_has_primary_key, param_to_sqlalchemy_column_call, + update_args_infer_typ_sqlalchemy, ) from cdd.tests.mocks.ir import ( intermediate_repr_empty, @@ -100,5 +101,37 @@ def test_param_to_sqlalchemy_column_call_when_foreign_key(self) -> None: gold=node_fk_call, ) + def test_update_args_infer_typ_sqlalchemy_when_simple_array(self) -> None: + """Tests that SQLalchemy can infer the typ from a simple array""" + args = [] + update_args_infer_typ_sqlalchemy( + {"items": {"type": "string"}, "typ": ""}, args, "", False, {} + ) + self.assertEqual(len(args), 1) + run_ast_test( + self, + args[0], + gold=Call( + func=Name(id="ARRAY", ctx=Load()), + args=[Name(id="String", ctx=Load())], + keywords=[], + expr=None, + expr_func=None, + ), + ) + + def test_update_args_infer_typ_sqlalchemy_when_simple_union(self) -> None: + """Tests that SQLalchemy can infer the typ from a simple Union""" + args = [] + update_args_infer_typ_sqlalchemy( + {"typ": "Union[string | Small]"}, args, "", False, {} + ) + self.assertEqual(len(args), 1) + run_ast_test( + self, + args[0], + gold=Name(id="Small", ctx=Load()), + ) + unittest_main() diff --git a/cdd/tests/test_gen.py b/cdd/tests/test_gen.py index 08494fd..2b5192b 100644 --- a/cdd/tests/test_gen.py +++ b/cdd/tests/test_gen.py @@ -23,7 +23,7 @@ from shutil import rmtree from tempfile import mkdtemp from unittest import TestCase -from unittest.mock import patch +from unittest.mock import MagicMock, patch import cdd.emit.class_ import cdd.parse.function @@ -32,7 +32,7 @@ from cdd.pure_utils import rpartial from cdd.source_transformer import to_code from cdd.tests.mocks.methods import function_adder_ast -from cdd.tests.utils_for_tests import run_ast_test +from cdd.tests.utils_for_tests import run_ast_test, unittest_main method_adder_ast = deepcopy(function_adder_ast) method_adder_ast.body[0] = Expr(set_value(" C class (mocked!) ")) @@ -319,8 +319,47 @@ def test_gen_with_imports_from_file_and_prepended_import(self) -> None: gold=gold, ) + def test_gen_phase_mocked(self) -> None: + """Tests that different phases are branched to correctly (doesn't test their internals though)""" + with patch( + "cdd.gen.update_with_imports_from_columns", new_callable=MagicMock() + ) as phase1_func: + gen( + name_tpl="{name}", + input_mapping="", + parse_name=None, + emit_name="sqlalchemy", + output_filename="", + phase=1, + ) + self.assertEqual(phase1_func.call_count, 1) + + with patch( + "cdd.gen.update_fk_for_file", new_callable=MagicMock() + ) as phase2_func: + gen( + name_tpl="{name}", + input_mapping="", + parse_name=None, + emit_name="sqlalchemy", + output_filename="", + phase=2, + ) + self.assertEqual(phase2_func.call_count, 1) + + self.assertRaises( + NotImplementedError, + gen, + name_tpl="{name}", + input_mapping="", + parse_name=None, + emit_name="sqlalchemy", + output_filename="", + phase=33, + ) + -# unittest_main() +unittest_main() # mock_class = ClassDef( # name="ClassyB", # bases=tuple(),