import pytest from pathlib import Path from typing import Tuple import subprocess from dds_ci import proc from dds_ci.testing import ProjectOpener, Project @pytest.fixture() def test_project(project_opener: ProjectOpener) -> Project: return project_opener.open('projects/sdist') def test_create_sdist(test_project: Project, tmp_path: Path) -> None: # Create in the default location test_project.sdist_create() sd_dir = test_project.build_root / 'foo@1.2.3.tar.gz' assert sd_dir.is_file(), 'Did not create an sdist in the default location' # Create in a different location dest = tmp_path / 'dummy.tar.gz' test_project.sdist_create(dest=dest) assert dest.is_file(), 'Did not create an sdist in the new location' @pytest.fixture() def test_sdist(test_project: Project) -> Tuple[Path, Project]: repo_content_path = test_project.dds.repo_dir / 'foo@1.2.3' assert not repo_content_path.is_dir() test_project.sdist_create() assert not repo_content_path.is_dir() return test_project.build_root / 'foo@1.2.3.tar.gz', test_project def test_import_sdist_archive(test_sdist: Tuple[Path, Project]) -> None: sdist, project = test_sdist repo_content_path = project.dds.repo_dir / 'foo@1.2.3' project.dds.pkg_import(sdist) assert repo_content_path.is_dir(), \ 'The package did not appear in the local cache' assert repo_content_path.joinpath('library.jsonc').is_file(), \ 'The package\'s library.jsonc did not get imported' # Excluded file will not be in the sdist: assert not repo_content_path.joinpath('other-file.txt').is_file(), \ 'Non-package content appeared in the package cache' def test_import_sdist_stdin(test_sdist: Tuple[Path, Project]) -> None: sdist, project = test_sdist repo_content_path = project.dds.repo_dir / 'foo@1.2.3' pipe = subprocess.Popen( list(proc.flatten_cmd([ project.dds.path, project.dds.repo_dir_arg, 'pkg', 'import', '--stdin', ])), stdin=subprocess.PIPE, ) assert pipe.stdin with sdist.open('rb') as sdist_bin: buf = sdist_bin.read(1024) while buf: pipe.stdin.write(buf) buf = sdist_bin.read(1024) pipe.stdin.close() rc = pipe.wait() assert rc == 0, 'Subprocess failed' # project.dds.pkg_import(sdist) assert repo_content_path.is_dir(), \ 'The package did not appear in the local cache' assert repo_content_path.joinpath('library.jsonc').is_file(), \ 'The package\'s library.jsonc did not get imported' # Excluded file will not be in the sdist: assert not repo_content_path.joinpath('other-file.txt').is_file(), \ 'Non-package content appeared in the package cache'