Пример #1
0
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
Пример #2
0
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
Пример #3
0
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"]
Пример #4
0
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"
Пример #5
0
    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
Пример #6
0
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"
Пример #7
0
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
Пример #8
0
 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