def test__build_setup_py(self, mocker): from openapi_python_client import MetaType, Project project = Project(openapi=mocker.MagicMock(title="My Test API"), meta=MetaType.SETUP) project.project_dir = mocker.MagicMock() setup_path = mocker.MagicMock(autospec=pathlib.Path) paths = { "setup.py": setup_path, } project.project_dir.__truediv__.side_effect = lambda x: paths[x] setup_template = mocker.MagicMock(autospec=jinja2.Template) project.env = mocker.MagicMock(autospec=jinja2.Environment) templates = { "setup.py.jinja": setup_template, } project.env.get_template.side_effect = lambda x: templates[x] project._build_setup_py() project.env.get_template.assert_called_once_with("setup.py.jinja") setup_template.render.assert_called_once_with( project_name=project.project_name, package_name=project.package_name, version=project.version, description=project.package_description, ) setup_path.write_text.assert_called_once_with(setup_template.render(), encoding="utf-8")
def test__reformat(mocker): import subprocess from openapi_python_client import GeneratorData, MetaType, Project sub_run = mocker.patch("subprocess.run") openapi = mocker.MagicMock(autospec=GeneratorData, title="My Test API") project = Project(openapi=openapi, meta=MetaType.POETRY) project.project_dir = mocker.MagicMock(autospec=pathlib.Path) project._reformat() sub_run.assert_has_calls([ mocker.call( "autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports .", cwd=project.package_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ), mocker.call( "isort .", cwd=project.project_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ), mocker.call("black .", cwd=project.project_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE), ])
def test__reformat(mocker): import subprocess from openapi_python_client import GeneratorData, Project sub_run = mocker.patch("subprocess.run") openapi = mocker.MagicMock(autospec=GeneratorData, title="My Test API") project = Project(openapi=openapi) project.project_dir = mocker.MagicMock(autospec=pathlib.Path) project._reformat() sub_run.assert_has_calls([ mocker.call( "isort .", cwd=project.project_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ), mocker.call("black .", cwd=project.project_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE), ])
def test__build_pyproject_toml(self, mocker, use_poetry): from openapi_python_client import MetaType, Project project = Project(openapi=mocker.MagicMock(title="My Test API"), meta=MetaType.POETRY) project.project_dir = mocker.MagicMock() pyproject_path = mocker.MagicMock(autospec=pathlib.Path) paths = { "pyproject.toml": pyproject_path, } project.project_dir.__truediv__.side_effect = lambda x: paths[x] pyproject_template = mocker.MagicMock(autospec=jinja2.Template) project.env = mocker.MagicMock(autospec=jinja2.Environment) template_path = "pyproject.toml.jinja" if use_poetry else "pyproject_no_poetry.toml.jinja" templates = { template_path: pyproject_template, } project.env.get_template.side_effect = lambda x: templates[x] project._build_pyproject_toml(use_poetry=use_poetry) project.env.get_template.assert_called_once_with(template_path) pyproject_template.render.assert_called_once_with( project_name=project.project_name, package_name=project.package_name, version=project.version, description=project.package_description, ) pyproject_path.write_text.assert_called_once_with( pyproject_template.render(), encoding="utf-8")
def test__build_metadata(self, mocker): from openapi_python_client import Project project = Project(openapi=mocker.MagicMock(title="My Test API")) project.project_dir = mocker.MagicMock() pyproject_path = mocker.MagicMock(autospec=pathlib.Path) readme_path = mocker.MagicMock(autospec=pathlib.Path) git_ignore_path = mocker.MagicMock(autospec=pathlib.Path) paths = { "pyproject.toml": pyproject_path, "README.md": readme_path, ".gitignore": git_ignore_path, } project.project_dir.__truediv__.side_effect = lambda x: paths[x] pyproject_template = mocker.MagicMock(autospec=jinja2.Template) readme_template = mocker.MagicMock(autospec=jinja2.Template) git_ignore_template = mocker.MagicMock(autospec=jinja2.Template) project.env = mocker.MagicMock(autospec=jinja2.Environment) templates = { "pyproject.toml": pyproject_template, "README.md": readme_template, ".gitignore": git_ignore_template, } project.env.get_template.side_effect = lambda x: templates[x] project._build_metadata() project.env.get_template.assert_has_calls([ mocker.call("pyproject.toml"), mocker.call("README.md"), mocker.call(".gitignore") ]) pyproject_template.render.assert_called_once_with( project_name=project.project_name, package_name=project.package_name, version=project.version, description=project.package_description, ) pyproject_path.write_text.assert_called_once_with( pyproject_template.render()) readme_template.render.assert_called_once_with( description=project.package_description, project_name=project.project_name, package_name=project.package_name, ) readme_path.write_text.assert_called_once_with( readme_template.render()) git_ignore_template.render.assert_called_once() git_ignore_path.write_text.assert_called_once_with( git_ignore_template.render())
def test_build_file_exists(self, mocker): from openapi_python_client import Project project = Project(openapi=mocker.MagicMock(title="My Test API")) project.project_dir = mocker.MagicMock() project.project_dir.mkdir.side_effect = FileExistsError result = project.build() project.project_dir.mkdir.assert_called_once() assert result == [ GeneratorError( detail= "Directory already exists. Delete it or use the update command." ) ]
def test_build_no_meta(self, mocker): from openapi_python_client import MetaType, Project project = Project(openapi=mocker.MagicMock(title="My Test API"), meta=MetaType.NONE) project.project_dir = mocker.MagicMock() project.package_dir = mocker.MagicMock() project._build_metadata = mocker.MagicMock() project._build_models = mocker.MagicMock() project._build_api = mocker.MagicMock() project._create_package = mocker.MagicMock() project._reformat = mocker.MagicMock() project._get_errors = mocker.MagicMock() project.build() project.project_dir.mkdir.assert_not_called()
def test__build_metadata_setup(self, mocker): from openapi_python_client import MetaType, Project project = Project(openapi=mocker.MagicMock(title="My Test API"), meta=MetaType.SETUP) project._build_pyproject_toml = mocker.MagicMock() project._build_setup_py = mocker.MagicMock() project.project_dir = mocker.MagicMock() readme_path = mocker.MagicMock(autospec=pathlib.Path) git_ignore_path = mocker.MagicMock(autospec=pathlib.Path) paths = { "README.md": readme_path, ".gitignore": git_ignore_path, } project.project_dir.__truediv__.side_effect = lambda x: paths[x] readme_template = mocker.MagicMock(autospec=jinja2.Template) git_ignore_template = mocker.MagicMock(autospec=jinja2.Template) project.env = mocker.MagicMock(autospec=jinja2.Environment) templates = { "README.md.jinja": readme_template, ".gitignore.jinja": git_ignore_template, } project.env.get_template.side_effect = lambda x: templates[x] project._build_metadata() project.env.get_template.assert_has_calls( [mocker.call("README.md.jinja"), mocker.call(".gitignore.jinja")]) readme_template.render.assert_called_once_with( description=project.package_description, project_name=project.project_name, package_name=project.package_name, ) readme_path.write_text.assert_called_once_with( readme_template.render(), encoding="utf-8") git_ignore_template.render.assert_called_once() git_ignore_path.write_text.assert_called_once_with( git_ignore_template.render(), encoding="utf-8") project._build_pyproject_toml.assert_called_once_with(use_poetry=False) project._build_setup_py.assert_called_once()
def test_build(self, mocker): from openapi_python_client import Project project = Project(openapi=mocker.MagicMock(title="My Test API")) project.project_dir = mocker.MagicMock() project.package_dir = mocker.MagicMock() project._build_metadata = mocker.MagicMock() project._build_models = mocker.MagicMock() project._build_api = mocker.MagicMock() project._create_package = mocker.MagicMock() project._reformat = mocker.MagicMock() project._get_errors = mocker.MagicMock() result = project.build() project.project_dir.mkdir.assert_called_once() project._create_package.assert_called_once() project._build_metadata.assert_called_once() project._build_models.assert_called_once() project._build_api.assert_called_once() project._reformat.assert_called_once() project._get_errors.assert_called_once() assert result == project._get_errors.return_value