def test_build_code_optional_bogus(tmp_path, monkeypatch): """Check that CHARM_OPTIONAL controls what gets copied.""" monkeypatch.setattr(build, 'CHARM_OPTIONAL', ['foo.yaml']) build_dir = tmp_path / BUILD_DIRNAME build_dir.mkdir() entrypoint = tmp_path / 'charm.py' config = tmp_path / 'config.yaml' config.touch() foo = tmp_path / 'foo.yaml' foo.touch() builder = Builder({ 'from': tmp_path, 'entrypoint': entrypoint, 'requirement': [], }) builder.handle_code() built_config = build_dir / 'config.yaml' built_foo = build_dir / 'foo.yaml' # config.yaml is not in the build assert not built_config.exists() # but foo.yaml is assert built_foo.is_symlink() assert built_foo.resolve() == foo
def test_build_code_optional(tmp_path, optional): """Check transferred 'optional' files.""" build_dir = tmp_path / BUILD_DIRNAME build_dir.mkdir() entrypoint = tmp_path / 'charm.py' config = tmp_path / 'config.yaml' actions = tmp_path / 'actions.yaml' if 'config' in optional: config.touch() if 'actions' in optional: actions.touch() builder = Builder({ 'from': tmp_path, 'entrypoint': entrypoint, 'requirement': [], }) builder.handle_code() built_config = build_dir / 'config.yaml' built_actions = build_dir / 'actions.yaml' if 'config' in optional: assert built_config.is_symlink() assert built_config.resolve() == config else: assert not built_config.exists() if 'actions' in optional: assert built_actions.is_symlink() assert built_actions.resolve() == actions else: assert not built_actions.exists()
def test_build_code_simple(tmp_path): """Check transferred metadata and simple entrypoint.""" build_dir = tmp_path / BUILD_DIRNAME build_dir.mkdir() metadata = tmp_path / CHARM_METADATA metadata.touch() entrypoint = tmp_path / 'crazycharm.py' entrypoint.touch() builder = Builder({ 'from': tmp_path, 'entrypoint': entrypoint, 'requirement': [], }) linked_entrypoint = builder.handle_code() built_metadata = build_dir / CHARM_METADATA assert built_metadata.is_symlink() assert built_metadata.resolve() == metadata built_entrypoint = build_dir / 'crazycharm.py' assert built_entrypoint.is_symlink() assert built_entrypoint.resolve() == entrypoint assert linked_entrypoint == built_entrypoint
def test_build_code_includes_templates(tmp_path): """If 'templates' exists, it is included in the build tree.""" build_dir = tmp_path / BUILD_DIRNAME build_dir.mkdir() source_dir = tmp_path / "templates" entrypoint = tmp_path / 'charm.py' source_dir.mkdir() builder = Builder({ 'from': tmp_path, 'entrypoint': entrypoint, 'requirement': [], }) builder.handle_code() built_dir = build_dir / 'templates' assert built_dir.is_symlink() assert built_dir.resolve() == source_dir
def test_build_code_tree(tmp_path): """The whole source code tree is built if entrypoint not at root.""" build_dir = tmp_path / BUILD_DIRNAME build_dir.mkdir() src_dir = tmp_path / 'code_source' entrypoint = src_dir / 'crazycharm.py' builder = Builder({ 'from': tmp_path, 'entrypoint': entrypoint, 'requirement': [], }) linked_entrypoint = builder.handle_code() built_src = build_dir / 'code_source' assert built_src.is_symlink() assert built_src.resolve() == src_dir assert linked_entrypoint == build_dir / 'code_source' / 'crazycharm.py'