Beispiel #1
0
    def test_to_dict_is_a_copy(self):
        metadata = ExtractedMetadata(summary="summary")
        metadata_dict = metadata.to_dict()
        metadata_dict["summary"] = "edited summary"

        # Ensure the metadata cannot be edited with its dict
        self.assertThat(metadata.get_summary(), Equals("summary"))
Beispiel #2
0
 def test_to_dict_complete(self):
     metadata = ExtractedMetadata(summary="summary",
                                  description="description")
     self.assertThat(
         metadata.to_dict(),
         Equals({
             "summary": "summary",
             "description": "description"
         }),
     )
Beispiel #3
0
 def test_getters(self, tmp_work_path, prop, value):
     metadata = ExtractedMetadata(**{prop: value})
     for p in self.properties:
         gotten = getattr(metadata, "get_{}".format(p))()
         if p == prop:
             assert gotten == value
         else:
             assert gotten is None
Beispiel #4
0
    def test_update_merge(self):
        metadata = ExtractedMetadata(summary="summary")
        metadata2 = ExtractedMetadata(description="description")
        metadata.update(metadata2)

        self.assertThat(metadata.get_summary(), Equals("summary"))
        self.assertThat(metadata.get_description(), Equals("description"))
Beispiel #5
0
def _adopt_keys(
    config_data: Dict[str, Any],
    extracted_metadata: _metadata.ExtractedMetadata,
    prime_dir: str,
) -> Set[str]:
    ignored_keys = set()
    metadata_dict = extracted_metadata.to_dict()

    # desktop_file_paths and common_ids are special cases that will be handled
    # after all the top level snapcraft.yaml keys.
    ignore = ("desktop_file_paths", "common_id")
    overrides = ((k, v) for k, v in metadata_dict.items() if k not in ignore)

    for key, value in overrides:
        if key in config_data:
            ignored_keys.add(key)
        else:
            if key == "icon":
                # Extracted appstream icon paths will be relative to prime.
                icon = pathlib.Path(prime_dir, str(value))
                if not icon.exists():
                    # Cannot find icon, ignore silently.
                    continue

                if _find_icon_file() is None:
                    # Already have icon file, do not overwrite.
                    continue

            config_data[key] = value

    if "desktop_file_paths" in metadata_dict and "common_id" in metadata_dict:
        app_name = _get_app_name_from_common_id(
            config_data, str(metadata_dict["common_id"]))
        if app_name and not _desktop_file_exists(app_name):
            for desktop_file_path in [
                    os.path.join(prime_dir, d)
                    for d in metadata_dict["desktop_file_paths"]
            ]:
                if os.path.exists(desktop_file_path):
                    config_data["apps"][app_name][
                        "desktop"] = desktop_file_path
                    break

    return ignored_keys
Beispiel #6
0
 def test_to_dict_partial(self):
     metadata = ExtractedMetadata(summary="summary")
     self.assertThat(metadata.to_dict(), Equals({"summary": "summary"}))
Beispiel #7
0
    def test_len(self):
        metadata = ExtractedMetadata(version="version")
        self.assertThat(len(metadata), Equals(1))

        metadata = ExtractedMetadata(summary="summary", version="version")
        self.assertThat(len(metadata), Equals(2))
Beispiel #8
0
 def test_not_eq(self):
     metadata1 = ExtractedMetadata(summary="summary")
     metadata2 = ExtractedMetadata(description="description")
     self.assertThat(metadata1, Not(Equals(metadata2)))
Beispiel #9
0
 def test_empty_eq(self):
     self.assertThat(ExtractedMetadata(), Equals(ExtractedMetadata()))
Beispiel #10
0
 def test_eq(self):
     metadata1 = ExtractedMetadata(summary="summary")
     metadata2 = ExtractedMetadata(summary="summary")
     self.assertThat(metadata1, Equals(metadata2))
Beispiel #11
0
    def test_overlap(self):
        metadata = ExtractedMetadata(summary="summary",
                                     description="description")
        metadata2 = ExtractedMetadata(description="new description")

        self.assertThat(metadata.overlap(metadata2), Equals({"description"}))
Beispiel #12
0
    def test_init(self):
        metadata = ExtractedMetadata(summary="summary")

        self.assertThat(metadata.get_summary(), Equals("summary"))
        self.assertThat(metadata.get_description(), Equals(None))