Skip to content

Commit d72c2fa

Browse files
committed
fix(sw360_objects): correct component ids in embedded releases
We can only set component_id if releases are embedded in components, but not for releases in projects. As this was a somehow tricky bug, let's add first testcases for it.
1 parent b5b9292 commit d72c2fa

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

sw360/sw360_objects.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,12 @@ def _parse_link(self, key, links_key, links_value):
7272
links_value,
7373
resources=[self])
7474
elif links_key == "sw360:releases":
75+
component_id = None
76+
if isinstance(self, Component):
77+
component_id = self.id
7578
self.releases = self._parse_release_list(
7679
links_value,
77-
component_id=self.id)
80+
component_id=component_id)
7881
elif links_key == "self":
7982
self.id = links_value["href"].split("/")[-1]
8083
else:

tests/test_sw360obj_base.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import unittest
2+
import responses
3+
from sw360 import SW360
4+
5+
6+
SW360_BASE_URL = "https://sw360.siemens.com/resource/api/"
7+
8+
9+
class Sw360ObjTestBase(unittest.TestCase):
10+
@responses.activate
11+
def setUp(self):
12+
responses.add(
13+
responses.GET,
14+
SW360_BASE_URL,
15+
json={"status": "ok"})
16+
self.lib = SW360("https://sw360.siemens.com", "mytoken")
17+
self.lib.login_api()

tests/test_sw360obj_component.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import responses
2+
import unittest
3+
from tests.test_sw360obj_base import Sw360ObjTestBase, SW360_BASE_URL
4+
from sw360 import Component
5+
6+
7+
class Sw360ObjTestComponent(Sw360ObjTestBase):
8+
@responses.activate
9+
def test_get_component(self):
10+
responses.add(
11+
responses.GET,
12+
SW360_BASE_URL + "components/123",
13+
json={
14+
'name': 'acl',
15+
'somekey': 'value',
16+
'_embedded': {
17+
'sw360:releases': [{
18+
'name': 'acl',
19+
'version': '2.2',
20+
'_links': {'self': {
21+
'href': SW360_BASE_URL + 'releases/7c4'}}}]}})
22+
comp = Component().get(self.lib, "123")
23+
self.assertEqual(comp.name, "acl")
24+
self.assertEqual(comp.details["somekey"], "value")
25+
self.assertEqual(len(comp.releases), 1)
26+
self.assertEqual(comp.releases["7c4"].component_id, "123")
27+
28+
29+
if __name__ == "__main__":
30+
unittest.main()

tests/test_sw360obj_project.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import responses
2+
import unittest
3+
from tests.test_sw360obj_base import Sw360ObjTestBase, SW360_BASE_URL
4+
from sw360 import Project
5+
6+
7+
class Sw360ObjTestProject(Sw360ObjTestBase):
8+
@responses.activate
9+
def test_get_project(self):
10+
responses.add(
11+
responses.GET,
12+
SW360_BASE_URL + "projects/123",
13+
json={
14+
'name': 'MyProj',
15+
'version': '11.0',
16+
'_embedded': {
17+
'sw360:releases': [{
18+
'name': 'acl',
19+
'version': '2.2',
20+
'_links': {'self': {
21+
'href': SW360_BASE_URL + 'releases/7c4'}}}]}})
22+
proj = Project().get(self.lib, "123")
23+
self.assertEqual(proj.name, "MyProj")
24+
self.assertEqual(proj.version, "11.0")
25+
self.assertEqual(len(proj.releases), 1)
26+
self.assertIsNone(proj.releases["7c4"].component_id)
27+
28+
29+
if __name__ == "__main__":
30+
unittest.main()

0 commit comments

Comments
 (0)