11import os
2+ from typing import Optional
3+ from unittest import TestCase
24
35import pytest
46from rdflib import URIRef
@@ -62,6 +64,35 @@ def test_external_package_references(temporary_file_path) -> None:
6264 assert second_ref .category in parsed_reference_categories
6365
6466
67+ # This test is really clunky since it's hard to isolate features of the rdf writer to test. Should be improved when
68+ # that part is refactored.
69+ def test_multiple_packages_in_one_document (temporary_file_path ) -> None :
70+ doc_node = URIRef ("http://www.spdx.org/tools#SPDXRef-DOCUMENT" )
71+ document = Document ()
72+ document .creation_info .set_created_now ()
73+ package = Package ()
74+ package .spdx_id = "SPDXRef-Package"
75+ package .version = "2.1"
76+ document .add_package (package )
77+ package2 = Package ()
78+ package2 .spdx_id = "SPDXRef-Another-Package"
79+ package2 .version = "2.3"
80+ document .add_package (package2 )
81+
82+ with open (temporary_file_path , "wb" ) as out :
83+ writer = Writer (document , out )
84+ writer .write (doc_node )
85+ parser = Parser (Builder (), StandardLogger ())
86+ with open (temporary_file_path , "r" ) as file :
87+ parsed_document : Document = parser .parse (file )[0 ]
88+
89+ assert len (parsed_document .packages ) == 2
90+ first_package = get_package_by_spdx_id ("SPDXRef-Package" , document )
91+ assert first_package .version == "2.1"
92+ second_package = get_package_by_spdx_id ("SPDXRef-Another-Package" , document )
93+ assert second_package .version == "2.3"
94+
95+
6596def minimal_document_with_package () -> Document :
6697 document = Document (data_license = License .from_identifier ('CC0-1.0' ))
6798 document .creation_info .set_created_now ()
@@ -72,7 +103,15 @@ def minimal_document_with_package() -> Document:
72103
73104def minimal_package () -> Package :
74105 package = Package ()
106+ package .spdx_id = "SPDXRef-Package"
75107 package .conc_lics = NoAssert ()
76108 package .license_declared = NoAssert ()
77109 package .add_lics_from_file (NoAssert ())
78110 return package
111+
112+
113+ def get_package_by_spdx_id (package_spdx_id : str , document : Document ) -> Optional [Package ]:
114+ for package in document .packages :
115+ if package .spdx_id == package_spdx_id :
116+ return package
117+ return None
0 commit comments