Skip to content

Commit aa3189e

Browse files
authored
tests: compoennt versions optional (#350)
* chore: exclude `venv*` from QA; add typing to QA Signed-off-by: Jan Kowalleck <[email protected]> * tests: component versions are optional Signed-off-by: Jan Kowalleck <[email protected]> --------- Signed-off-by: Jan Kowalleck <[email protected]>
1 parent 4d0d920 commit aa3189e

File tree

6 files changed

+38
-47
lines changed

6 files changed

+38
-47
lines changed

.isort.cfg

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ skip_gitignore = false
66
skip_glob =
77
build/*,dist/*,__pycache__,.eggs,*.egg-info*,
88
*_cache,*.cache,
9-
.git/*,.tox/*,.venv/*,venv/*
9+
.git/*,.tox/*,.venv/*,venv/*,.venv*/*,venv*/*,
1010
_OLD/*,_TEST/*,
1111
docs/*
1212
combine_as_imports = true
@@ -18,3 +18,4 @@ multi_line_output = 3
1818
src_paths =
1919
cyclonedx
2020
tests
21+
typings

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Get it all applied via:
2323

2424
```shell
2525
poetry run isort .
26-
poetry run flake8 cyclonedx/ tests/
26+
poetry run flake8 cyclonedx/ tests/ typings/
2727
```
2828

2929
## Documentation

tests/test_model_component.py

+20-36
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@ class TestModelComponent(TestCase):
109109

110110
@patch('cyclonedx.model.component.uuid4', return_value=MOCK_UUID_7)
111111
def test_empty_basic_component(self, mock_uuid: Mock) -> None:
112-
c = Component(
113-
name='test-component', version='1.2.3'
114-
)
112+
c = Component(name='test-component')
115113
mock_uuid.assert_called()
116114
self.assertEqual(c.name, 'test-component')
117115
self.assertEqual(c.type, ComponentType.LIBRARY)
@@ -121,7 +119,7 @@ def test_empty_basic_component(self, mock_uuid: Mock) -> None:
121119
self.assertIsNone(c.author)
122120
self.assertIsNone(c.publisher)
123121
self.assertIsNone(c.group)
124-
self.assertEqual(c.version, '1.2.3')
122+
self.assertIsNone(c.version)
125123
self.assertIsNone(c.description)
126124
self.assertIsNone(c.scope)
127125
self.assertSetEqual(c.hashes, set())
@@ -136,20 +134,16 @@ def test_empty_basic_component(self, mock_uuid: Mock) -> None:
136134

137135
@patch('cyclonedx.model.component.uuid4', return_value=MOCK_UUID_7)
138136
def test_multiple_basic_components(self, mock_uuid: Mock) -> None:
139-
c1 = Component(
140-
name='test-component', version='1.2.3'
141-
)
137+
c1 = Component(name='test-component')
142138
self.assertEqual(c1.name, 'test-component')
143-
self.assertEqual(c1.version, '1.2.3')
139+
self.assertIsNone(c1.version)
144140
self.assertEqual(c1.type, ComponentType.LIBRARY)
145141
self.assertEqual(len(c1.external_references), 0)
146142
self.assertEqual(len(c1.hashes), 0)
147143

148-
c2 = Component(
149-
name='test2-component', version='3.2.1'
150-
)
144+
c2 = Component(name='test2-component')
151145
self.assertEqual(c2.name, 'test2-component')
152-
self.assertEqual(c2.version, '3.2.1')
146+
self.assertIsNone(c2.version)
153147
self.assertEqual(c2.type, ComponentType.LIBRARY)
154148
self.assertEqual(len(c2.external_references), 0)
155149
self.assertEqual(len(c2.hashes), 0)
@@ -159,52 +153,42 @@ def test_multiple_basic_components(self, mock_uuid: Mock) -> None:
159153
mock_uuid.assert_called()
160154

161155
def test_external_references(self) -> None:
162-
c = Component(
163-
name='test-component', version='1.2.3'
164-
)
156+
c = Component(name='test-component')
165157
c.external_references.add(ExternalReference(
166158
type=ExternalReferenceType.OTHER,
167159
url=XsUri('https://cyclonedx.org'),
168160
comment='No comment'
169161
))
170162
self.assertEqual(c.name, 'test-component')
171-
self.assertEqual(c.version, '1.2.3')
163+
self.assertIsNone(c.version)
172164
self.assertEqual(c.type, ComponentType.LIBRARY)
173165
self.assertEqual(len(c.external_references), 1)
174166
self.assertEqual(len(c.hashes), 0)
175167

176-
c2 = Component(
177-
name='test2-component', version='3.2.1'
178-
)
168+
c2 = Component(name='test2-component')
179169
self.assertEqual(c2.name, 'test2-component')
180-
self.assertEqual(c2.version, '3.2.1')
170+
self.assertIsNone(c2.version)
181171
self.assertEqual(c2.type, ComponentType.LIBRARY)
182172
self.assertEqual(len(c2.external_references), 0)
183173
self.assertEqual(len(c2.hashes), 0)
184174

185-
def test_empty_basic_component_no_version(self) -> None:
186-
c = Component(
187-
name='test-component'
188-
)
175+
def test_empty_component_with_version(self) -> None:
176+
c = Component(name='test-component', version='1.2.3')
189177
self.assertEqual(c.name, 'test-component')
190-
self.assertIsNone(c.version, None)
178+
self.assertEqual(c.version, '1.2.3')
191179
self.assertEqual(c.type, ComponentType.LIBRARY)
192180
self.assertEqual(len(c.external_references), 0)
193181
self.assertEqual(len(c.hashes), 0)
194182

195183
def test_component_equal_1(self) -> None:
196-
c = Component(
197-
name='test-component', version='1.2.3'
198-
)
184+
c = Component(name='test-component')
199185
c.external_references.add(ExternalReference(
200186
type=ExternalReferenceType.OTHER,
201187
url=XsUri('https://cyclonedx.org'),
202188
comment='No comment'
203189
))
204190

205-
c2 = Component(
206-
name='test-component', version='1.2.3'
207-
)
191+
c2 = Component(name='test-component')
208192
c2.external_references.add(ExternalReference(
209193
type=ExternalReferenceType.OTHER,
210194
url=XsUri('https://cyclonedx.org'),
@@ -289,18 +273,18 @@ def test_sort(self) -> None:
289273
self.assertListEqual(sorted_components, expected_components)
290274

291275
def test_nested_components_1(self) -> None:
292-
comp_b = Component(name="comp_b", version="1.0.0")
293-
comp_c = Component(name="comp_c", version="1.0.0")
276+
comp_b = Component(name="comp_b")
277+
comp_c = Component(name="comp_c")
294278
comp_b.components.add(comp_c)
295279

296280
self.assertEqual(1, len(comp_b.components))
297281
self.assertEqual(2, len(comp_b.get_all_nested_components(include_self=True)))
298282
self.assertEqual(1, len(comp_b.get_all_nested_components(include_self=False)))
299283

300284
def test_nested_components_2(self) -> None:
301-
comp_a = Component(name="comp_a", version="1.2.3")
302-
comp_b = Component(name="comp_b", version="1.0.0")
303-
comp_c = Component(name="comp_c", version="1.0.0")
285+
comp_a = Component(name="comp_a")
286+
comp_b = Component(name="comp_b")
287+
comp_c = Component(name="comp_c")
304288
comp_b.components.add(comp_c)
305289
comp_b.components.add(comp_a)
306290

tests/test_output_json.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -384,17 +384,20 @@ def test_bom_v1_2_issue_275_components(self) -> None:
384384
fixture='bom_issue_275_components.json'
385385
)
386386

387-
# Helper methods
387+
# region Helper methods
388+
388389
def _validate_json_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
389390
outputter = get_instance(bom=bom, output_format=OutputFormat.JSON, schema_version=schema_version)
390391
self.assertEqual(outputter.schema_version, schema_version)
391392
with open(
392393
join(dirname(__file__), f'fixtures/json/{schema_version.to_version()}/{fixture}')) as expected_json:
393-
self.assertValidAgainstSchema(bom_json=outputter.output_as_string(), schema_version=schema_version)
394-
self.assertEqualJsonBom(expected_json.read(), outputter.output_as_string())
395-
expected_json.close()
394+
output_as_string = outputter.output_as_string()
395+
self.assertValidAgainstSchema(bom_json=output_as_string, schema_version=schema_version)
396+
self.assertEqualJsonBom(expected_json.read(), output_as_string)
396397

397398
def _validate_json_bom_not_supported(self, bom: Bom, schema_version: SchemaVersion) -> None:
398399
with self.assertRaises(FormatNotSupportedException):
399400
outputter = get_instance(bom=bom, output_format=OutputFormat.JSON, schema_version=schema_version)
400401
outputter.output_as_string()
402+
403+
# endregion Helper methods

tests/test_output_xml.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -522,14 +522,17 @@ def test_bom_v1_0_issue_275_components(self) -> None:
522522
fixture='bom_issue_275_components.xml'
523523
)
524524

525-
# Helper methods
525+
# region Helper methods
526+
526527
def _validate_xml_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
527528
outputter = get_instance(bom=bom, schema_version=schema_version)
528529
self.assertEqual(outputter.schema_version, schema_version)
529530
with open(
530531
join(dirname(__file__), f'fixtures/xml/{schema_version.to_version()}/{fixture}')) as expected_xml:
531-
self.assertValidAgainstSchema(bom_xml=outputter.output_as_string(), schema_version=schema_version)
532+
output_as_string = outputter.output_as_string()
533+
self.assertValidAgainstSchema(bom_xml=output_as_string, schema_version=schema_version)
532534
self.assertEqualXmlBom(
533-
expected_xml.read(), outputter.output_as_string(), namespace=outputter.get_target_namespace()
535+
expected_xml.read(), output_as_string, namespace=outputter.get_target_namespace()
534536
)
535-
expected_xml.close()
537+
538+
# endregion Helper methods

tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ commands =
4444
exclude =
4545
build,dist,__pycache__,.eggs,*.egg-info*,
4646
*_cache,*.cache,
47-
.git,.tox,.venv,venv
47+
.git,.tox,.venv,venv,.venv*,venv*,
4848
_OLD,_TEST,
4949
docs
5050
max-line-length = 120

0 commit comments

Comments
 (0)