Skip to content

Commit 728cfff

Browse files
Vlad0n20cslzchen
authored andcommitted
Fix existing tests and add new for configured link addon null value
1 parent ccac917 commit 728cfff

File tree

2 files changed

+534
-0
lines changed

2 files changed

+534
-0
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
import json
2+
from http import HTTPStatus
3+
from unittest.mock import patch
4+
5+
from django.test import TestCase
6+
from django.urls import reverse
7+
from rest_framework.test import APITestCase
8+
9+
from addon_service import models as db
10+
from addon_service.configured_addon.link.serializers import (
11+
ConfiguredLinkAddonSerializer,
12+
)
13+
from addon_service.tests import _factories
14+
from addon_service.tests._helpers import MockOSF
15+
from addon_toolkit import AddonCapabilities
16+
from addon_toolkit.interfaces.link import SupportedResourceTypes
17+
18+
19+
def mock_target_url(self):
20+
return f"https://example.com/dataset/{self.target_id}" if self.target_id else None
21+
22+
23+
class TestConfiguredLinkAddonNullValues(TestCase):
24+
@classmethod
25+
def setUpTestData(cls):
26+
cls._addon = _factories.ConfiguredLinkAddonFactory()
27+
28+
def setUp(self):
29+
self._mock_osf = MockOSF()
30+
self.enterContext(self._mock_osf.mocking())
31+
32+
self.target_url_patcher = patch(
33+
"addon_service.configured_addon.link.models.ConfiguredLinkAddon.target_url",
34+
mock_target_url,
35+
)
36+
self.target_url_patcher.start()
37+
self.addCleanup(self.target_url_patcher.stop)
38+
39+
def test_resource_type_setter_with_none(self):
40+
addon = _factories.ConfiguredLinkAddonFactory()
41+
42+
addon.resource_type = SupportedResourceTypes.Other
43+
addon.save()
44+
refreshed = db.ConfiguredLinkAddon.objects.get(id=addon.id)
45+
self.assertEqual(refreshed.resource_type, SupportedResourceTypes.Other)
46+
47+
addon.resource_type = None
48+
addon.save()
49+
50+
refreshed = db.ConfiguredLinkAddon.objects.get(id=addon.id)
51+
self.assertEqual(
52+
refreshed.int_resource_type, SupportedResourceTypes.Other.value
53+
)
54+
55+
56+
class TestConfiguredLinkAddonSerializerNullValues(APITestCase):
57+
@classmethod
58+
def setUpTestData(cls):
59+
cls._user = _factories.UserReferenceFactory()
60+
cls._resource = _factories.ResourceReferenceFactory()
61+
cls._authorized_account = _factories.AuthorizedLinkAccountFactory(
62+
account_owner=cls._user
63+
)
64+
cls._addon = _factories.ConfiguredLinkAddonFactory(
65+
authorized_resource=cls._resource,
66+
base_account=cls._authorized_account,
67+
)
68+
69+
def setUp(self):
70+
super().setUp()
71+
self.client.cookies["osf"] = self._user.user_uri
72+
self._mock_osf = MockOSF()
73+
self._mock_osf.configure_user_role(
74+
self._user.user_uri, self._resource.resource_uri, "admin"
75+
)
76+
self._mock_osf.configure_assumed_caller(self._user.user_uri)
77+
self.enterContext(self._mock_osf.mocking())
78+
79+
self.target_url_patcher = patch(
80+
"addon_service.configured_addon.link.models.ConfiguredLinkAddon.target_url",
81+
mock_target_url,
82+
)
83+
self.target_url_patcher.start()
84+
self.addCleanup(self.target_url_patcher.stop)
85+
86+
@property
87+
def _detail_path(self):
88+
return reverse("configured-link-addons-detail", kwargs={"pk": self._addon.pk})
89+
90+
@property
91+
def _list_path(self):
92+
return reverse("configured-link-addons-list")
93+
94+
def test_serializer_with_null_target_id(self):
95+
serializer = ConfiguredLinkAddonSerializer(
96+
data={
97+
"target_id": None,
98+
"connected_capabilities": [AddonCapabilities.ACCESS.name],
99+
"base_account": {
100+
"id": self._authorized_account.id,
101+
"type": "authorized-link-accounts",
102+
},
103+
"authorized_resource": self._resource.resource_uri,
104+
},
105+
context={"request": None},
106+
)
107+
108+
self.assertTrue(
109+
serializer.is_valid(), f"Serializer errors: {serializer.errors}"
110+
)
111+
112+
def test_serializer_with_null_resource_type(self):
113+
serializer = ConfiguredLinkAddonSerializer(
114+
data={
115+
"resource_type": None,
116+
"connected_capabilities": [AddonCapabilities.ACCESS.name],
117+
"base_account": {
118+
"id": self._authorized_account.id,
119+
"type": "authorized-link-accounts",
120+
},
121+
"authorized_resource": self._resource.resource_uri,
122+
},
123+
context={"request": None},
124+
)
125+
126+
self.assertTrue(
127+
serializer.is_valid(), f"Serializer errors: {serializer.errors}"
128+
)
129+
130+
def test_api_update_with_null_values(self):
131+
self._addon.target_id = "test-dataset-id"
132+
self._addon.resource_type = SupportedResourceTypes.Other
133+
self._addon.save()
134+
135+
request_data = {
136+
"data": {
137+
"id": str(self._addon.id),
138+
"type": "configured-link-addons",
139+
"attributes": {"target_id": None, "resource_type": None},
140+
}
141+
}
142+
143+
response = self.client.patch(
144+
self._detail_path,
145+
data=json.dumps(request_data),
146+
content_type="application/vnd.api+json",
147+
)
148+
149+
self.assertEqual(
150+
response.status_code, HTTPStatus.OK, f"Response content: {response.content}"
151+
)
152+
153+
self._addon.refresh_from_db()
154+
self.assertIsNone(self._addon.target_id)
155+
self.assertEqual(
156+
self._addon.int_resource_type, SupportedResourceTypes.Other.value
157+
)
158+
159+
def test_create_with_null_values(self):
160+
addon = _factories.ConfiguredLinkAddonFactory(
161+
authorized_resource=self._resource,
162+
base_account=self._authorized_account,
163+
target_id=None,
164+
int_resource_type=None,
165+
)
166+
167+
addon.int_resource_type = None
168+
addon.save(full_clean=False)
169+
170+
addon.refresh_from_db()
171+
self.assertIsNone(addon.target_id)
172+
173+
self.assertIsNone(addon.int_resource_type)
174+
self.assertIsNone(addon.resource_type)

0 commit comments

Comments
 (0)