File: test_package_bump.py

package info (click to toggle)
python-spdx-tools 0.8.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,024 kB
  • sloc: python: 18,708; xml: 12,553; sh: 46; makefile: 6
file content (131 lines) | stat: -rw-r--r-- 5,511 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# SPDX-FileCopyrightText: 2023 spdx contributors
#
# SPDX-License-Identifier: Apache-2.0
from unittest import TestCase

import pytest

from spdx_tools.spdx3.bump_from_spdx2.package import bump_package
from spdx_tools.spdx3.model import ExternalIdentifier, ExternalIdentifierType, ExternalReference, ExternalReferenceType
from spdx_tools.spdx3.model.software import Package
from spdx_tools.spdx3.payload import Payload
from spdx_tools.spdx.model import SpdxNoAssertion
from spdx_tools.spdx.model.package import ExternalPackageRef, ExternalPackageRefCategory
from spdx_tools.spdx.model.package import Package as Spdx2_Package
from tests.spdx.fixtures import actor_fixture, package_fixture


@pytest.mark.parametrize(
    "originator, expected_originator, supplier, expected_supplier",
    [
        (
            actor_fixture(name="originatorName"),
            ["https://doc.namespace#SPDXRef-Actor-originatorName-some@mail.com"],
            actor_fixture(name="supplierName"),
            ["https://doc.namespace#SPDXRef-Actor-supplierName-some@mail.com"],
        ),
        (None, [], None, []),
        (SpdxNoAssertion(), [], SpdxNoAssertion(), []),
    ],
)
def test_bump_package(originator, expected_originator, supplier, expected_supplier):
    payload = Payload()
    document_namespace = "https://doc.namespace"
    spdx2_package: Spdx2_Package = package_fixture(
        originator=originator,
        supplier=supplier,
        external_references=[
            ExternalPackageRef(
                ExternalPackageRefCategory.SECURITY, "advisory", "advisory_locator", "advisory_comment"
            ),
            ExternalPackageRef(ExternalPackageRefCategory.PERSISTENT_ID, "swh", "swh_locator", "swh_comment"),
        ],
    )
    expected_new_package_id = f"{document_namespace}#{spdx2_package.spdx_id}"

    bump_package(spdx2_package, payload, document_namespace, [], [])
    package = payload.get_element(expected_new_package_id)

    assert isinstance(package, Package)
    assert package.spdx_id == expected_new_package_id
    assert package.package_version == spdx2_package.version
    assert package.external_reference == [
        ExternalReference(ExternalReferenceType.SECURITY_ADVISORY, ["advisory_locator"], None, "advisory_comment")
    ]
    assert package.external_identifier == [
        ExternalIdentifier(ExternalIdentifierType.SWHID, "swh_locator", "swh_comment")
    ]
    assert package.download_location == spdx2_package.download_location
    assert package.package_version == spdx2_package.version
    assert package.originated_by == expected_originator
    assert package.supplied_by == expected_supplier
    assert package.homepage == spdx2_package.homepage
    assert package.source_info == spdx2_package.source_info
    assert package.built_time == spdx2_package.built_date
    assert package.release_time == spdx2_package.release_date
    assert package.valid_until_time == spdx2_package.valid_until_date
    assert package.copyright_text == spdx2_package.copyright_text
    assert package.attribution_text == spdx2_package.attribution_texts[0]


def test_bump_of_single_purl_without_comment():
    payload = Payload()
    document_namespace = "https://doc.namespace"
    spdx2_package: Spdx2_Package = package_fixture(
        external_references=[
            ExternalPackageRef(ExternalPackageRefCategory.PACKAGE_MANAGER, "purl", "purl_locator", None),
        ]
    )
    expected_new_package_id = f"{document_namespace}#{spdx2_package.spdx_id}"

    bump_package(spdx2_package, payload, document_namespace, [], [])
    package = payload.get_element(expected_new_package_id)

    assert package.package_url == "purl_locator"
    assert package.external_reference == []
    assert package.external_identifier == []


def test_bump_of_single_purl_with_comment():
    payload = Payload()
    document_namespace = "https://doc.namespace"
    spdx2_package: Spdx2_Package = package_fixture(
        external_references=[
            ExternalPackageRef(ExternalPackageRefCategory.PACKAGE_MANAGER, "purl", "purl_locator", "purl_comment"),
        ]
    )
    expected_new_package_id = f"{document_namespace}#{spdx2_package.spdx_id}"

    bump_package(spdx2_package, payload, document_namespace, [], [])
    package = payload.get_element(expected_new_package_id)

    assert package.package_url is None
    assert package.external_reference == []
    assert package.external_identifier == [
        ExternalIdentifier(ExternalIdentifierType.PURL, "purl_locator", "purl_comment")
    ]


def test_bump_of_multiple_purls():
    payload = Payload()
    document_namespace = "https://doc.namespace"
    spdx2_package: Spdx2_Package = package_fixture(
        external_references=[
            ExternalPackageRef(ExternalPackageRefCategory.PACKAGE_MANAGER, "purl", "purl_locator", "comment"),
            ExternalPackageRef(ExternalPackageRefCategory.PACKAGE_MANAGER, "purl", "purl_locator2", None),
        ]
    )
    expected_new_package_id = f"{document_namespace}#{spdx2_package.spdx_id}"

    bump_package(spdx2_package, payload, document_namespace, [], [])
    package = payload.get_element(expected_new_package_id)

    assert package.package_url is None
    assert package.external_reference == []
    TestCase().assertCountEqual(
        package.external_identifier,
        [
            ExternalIdentifier(ExternalIdentifierType.PURL, "purl_locator", "comment"),
            ExternalIdentifier(ExternalIdentifierType.PURL, "purl_locator2", None),
        ],
    )