File: test_snippet_validator.py

package info (click to toggle)
python-spdx-tools 0.8.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,084 kB
  • sloc: python: 18,675; xml: 12,553; sh: 46; makefile: 7
file content (74 lines) | stat: -rw-r--r-- 2,596 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
# SPDX-FileCopyrightText: 2022 spdx contributors
#
# SPDX-License-Identifier: Apache-2.0

from typing import List
from unittest import TestCase

import pytest

from spdx_tools.spdx.validation.snippet_validator import validate_snippet, validate_snippet_within_document
from spdx_tools.spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage
from tests.spdx.fixtures import document_fixture, snippet_fixture


def test_valid_snippet():
    snippet = snippet_fixture()
    validation_messages: List[ValidationMessage] = validate_snippet_within_document(
        snippet, "SPDX-2.3", document_fixture()
    )

    assert validation_messages == []


@pytest.mark.parametrize(
    "snippet_input, expected_message",
    [
        (
            snippet_fixture(byte_range=(-12, 45)),
            "byte_range values must be greater than or equal to 1, but is: (-12, 45)",
        ),
        (
            snippet_fixture(byte_range=(45, 23)),
            "the first value of byte_range must be less than or equal to the second, but is: (45, 23)",
        ),
        (
            snippet_fixture(line_range=(-12, 45)),
            "line_range values must be greater than or equal to 1, but is: (-12, 45)",
        ),
        (
            snippet_fixture(line_range=(45, 23)),
            "the first value of line_range must be less than or equal to the second, but is: (45, 23)",
        ),
    ],
)
def test_invalid_ranges(snippet_input, expected_message):
    validation_messages: List[ValidationMessage] = validate_snippet_within_document(
        snippet_input, "SPDX-2.3", document_fixture()
    )

    expected = ValidationMessage(
        expected_message,
        ValidationContext(
            spdx_id=snippet_input.spdx_id,
            parent_id=document_fixture().creation_info.spdx_id,
            element_type=SpdxElementType.SNIPPET,
            full_element=snippet_input,
        ),
    )

    assert validation_messages == [expected]


def test_v2_2mandatory_fields():
    snippet = snippet_fixture(license_concluded=None, copyright_text=None)

    assert validate_snippet(snippet, "SPDX-2.3") == []

    validation_messages: List[ValidationMessage] = validate_snippet(snippet, "SPDX-2.2")

    context = ValidationContext(spdx_id=snippet.spdx_id, element_type=SpdxElementType.SNIPPET, full_element=snippet)
    mandatory_fields = ["license_concluded", "copyright_text"]
    expected = [ValidationMessage(f"{field} is mandatory in SPDX-2.2", context) for field in mandatory_fields]

    TestCase().assertCountEqual(validation_messages, expected)