def test_update_project_metadata_desktop_no_apps(project_yaml_data, new_dir): yaml_data = project_yaml_data( { "version": "1.0", "adopt-info": "part", "parts": {}, } ) project = Project(**yaml_data) metadata = ExtractedMetadata( common_id="test.id", desktop_file_paths=["metadata/foo.desktop", "metadata/bar.desktop"], ) # create desktop file Path("metadata").mkdir() Path("metadata/foo.desktop").touch() Path("metadata/bar.desktop").touch() prj_vars = {"version": "", "grade": "stable"} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata], assets_dir=new_dir / "assets", prime_dir=new_dir, ) assert project.apps is None
def test_update_project_metadata_icon( project_yaml_data, project_entries, icon_exists, asset_exists, expected_icon, new_dir, ): yaml_data = project_yaml_data( {"version": "1.0", "adopt-info": "part", "parts": {}, **project_entries} ) project = Project(**yaml_data) metadata = ExtractedMetadata(icon="metadata_icon.png") # create icon file if icon_exists: Path("metadata_icon.png").touch() # create icon file in assets dir if asset_exists: Path("assets/gui").mkdir(parents=True) Path("assets/gui/icon.svg").touch() prj_vars = {"version": "", "grade": "stable"} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata], assets_dir=new_dir / "assets", prime_dir=new_dir, ) assert project.icon == expected_icon
def test_update_project_metadata_fields( appstream_file, project_entries, expected, new_dir ): yaml_data = { "name": "my-project", "base": "core22", "confinement": "strict", "adopt-info": "part", "parts": {}, **project_entries, } project = Project(**yaml_data) metadata = ExtractedMetadata( version="4.5.6", summary="metadata summary", description="metadata description", title="metadata title", grade="devel", ) prj_vars = {"version": "", "grade": ""} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata], assets_dir=new_dir, prime_dir=new_dir, ) assert project.version == expected["version"] assert project.summary == expected["summary"] assert project.description == expected["description"] assert project.title == expected["title"] assert project.grade == expected["grade"]
def test_update_project_metadata_multiple_apps(project_yaml_data, new_dir): yaml_data = project_yaml_data( { "version": "1.0", "adopt-info": "part", "parts": {}, "apps": { "foo": { "command": "foo", "common-id": "foo.id", }, "bar": { "command": "bar", "common-id": "bar.id", }, }, } ) project = Project(**yaml_data) metadata1 = ExtractedMetadata( common_id="foo.id", desktop_file_paths=["metadata/foo.desktop"], ) metadata2 = ExtractedMetadata( common_id="bar.id", desktop_file_paths=["metadata/bar.desktop"], ) # create desktop files Path("metadata").mkdir() Path("metadata/foo.desktop").touch() Path("metadata/bar.desktop").touch() prj_vars = {"version": "", "grade": "stable"} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata1, metadata2], assets_dir=new_dir / "assets", prime_dir=new_dir, ) assert project.apps is not None assert project.apps["foo"].desktop == "metadata/foo.desktop" assert project.apps["bar"].desktop == "metadata/bar.desktop"
def test_entries(self, file_extension, key, attributes, param_name, value, expect): file_name = f"foo.{file_extension}" attrs = " ".join(f'{attr}="{attributes[attr]}"' for attr in attributes) Path(file_name).write_text( textwrap.dedent(f"""\ <?xml version="1.0" encoding="UTF-8"?> <component> <{key} {attrs}>{value}</{key}> </component>""")) Path("icon.png").touch() kwargs = {param_name: expect} expected = ExtractedMetadata(**kwargs) assert appstream.extract(file_name, workdir=".") == expected
def test_update_project_metadata(project_yaml_data, appstream_file, new_dir): project = Project.unmarshal(project_yaml_data({"adopt-info": "part"})) metadata = ExtractedMetadata( common_id="common.id", title="title", summary="summary", description="description", version="1.2.3", icon="assets/icon.png", desktop_file_paths=["assets/file.desktop"], ) assets_dir = Path("assets") prime_dir = Path("prime") # set up project apps project.apps = { "app1": _project_app({"command": "bin/app1"}), "app2": _project_app({"command": "bin/app2", "common_id": "other.id"}), "app3": _project_app({"command": "bin/app3", "common_id": "common.id"}), } prime_dir.mkdir() (prime_dir / "assets").mkdir() (prime_dir / "assets/icon.png").touch() (prime_dir / "assets/file.desktop").touch() prj_vars = {"version": "0.1", "grade": "stable"} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata], assets_dir=assets_dir, prime_dir=prime_dir, ) assert project.title == "title" assert project.summary == "summary" # already set in project assert project.description == "description" # already set in project assert project.version == "0.1" # already set in project assert project.icon == "assets/icon.png" assert project.apps["app3"].desktop == "assets/file.desktop"
def test_update_project_metadata_desktop( project_yaml_data, project_entries, desktop_exists, asset_exists, expected_desktop, new_dir, ): yaml_data = project_yaml_data( {"version": "1.0", "adopt-info": "part", "parts": {}, **project_entries} ) project = Project(**yaml_data) metadata = ExtractedMetadata( common_id="test.id", desktop_file_paths=["metadata/foo.desktop"] ) # create desktop file if desktop_exists: Path("metadata").mkdir() Path("metadata/foo.desktop").touch() # create desktop file in assets dir if asset_exists: Path("assets/gui").mkdir(parents=True) Path("assets/gui/foo.desktop").touch() prj_vars = {"version": "", "grade": "stable"} update_project_metadata( project, project_vars=prj_vars, metadata_list=[metadata], assets_dir=new_dir / "assets", prime_dir=new_dir, ) assert project.apps is not None assert project.apps["foo"].desktop == expected_desktop
def _expect_icon(self, icon): expected = ExtractedMetadata(icon=icon) actual = appstream.extract("foo.appdata.xml", workdir=".") assert actual is not None assert actual.icon == expected.icon