Skip to content

Commit 27739c8

Browse files
committed
tests: Add tests for linking series feature
Closes #506 Signed-off-by: andrepapoti <[email protected]>
1 parent a46a465 commit 27739c8

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

patchwork/tests/api/test_series.py

+47
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Copyright (C) 2018 Stephen Finucane <[email protected]>
33
#
44
# SPDX-License-Identifier: GPL-2.0-or-later
5+
import json
56

67
from django.test import override_settings
78
from django.urls import NoReverseMatch
@@ -203,3 +204,49 @@ def test_create_update_delete(self):
203204

204205
resp = self.client.delete(self.api_url(series.id))
205206
self.assertEqual(status.HTTP_405_METHOD_NOT_ALLOWED, resp.status_code)
207+
208+
def test_series_linking(self):
209+
series_a = self._create_series()
210+
series_b = create_series(
211+
project=series_a.project, submitter=series_a.submitter
212+
)
213+
series_c = create_series(
214+
project=series_a.project, submitter=series_a.submitter
215+
)
216+
series_d = create_series(submitter=series_a.submitter)
217+
218+
self.client.authenticate(user=series_a.submitter.user)
219+
220+
url = reverse(
221+
'api-series-link',
222+
kwargs={'pk': series_a.id, 'related_series_id': series_b.id},
223+
)
224+
resp = self.client.patch(url)
225+
related_series = json.loads(resp.content).get('related_series')
226+
self.assertEqual(len(related_series), 1)
227+
self.assertEqual(
228+
related_series[0]['web_url'],
229+
f'http://example.com/project/myproject/list/?series={series_b.id}',
230+
)
231+
232+
url = reverse(
233+
'api-series-link',
234+
kwargs={'pk': series_a.id, 'related_series_id': series_c.id},
235+
)
236+
resp = self.client.patch(url)
237+
related_series = json.loads(resp.content).get('related_series')
238+
self.assertEqual(len(related_series), 2)
239+
self.assertEqual(
240+
related_series[1]['web_url'],
241+
f'http://example.com/project/myproject/list/?series={series_c.id}',
242+
)
243+
244+
url = reverse(
245+
'api-series-link',
246+
kwargs={'pk': series_a.id, 'related_series_id': series_d.id},
247+
)
248+
resp = self.client.patch(url)
249+
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
250+
self.assertEqual(len(related_series), 2)
251+
252+
print(series_a.related_series.all())

patchwork/tests/test_series.py

+48
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import unittest
99

1010
from django.test import TestCase
11+
from rest_framework.request import HttpRequest
1112

1213
from patchwork import models
1314
from patchwork import parser
1415
from patchwork.tests import utils
1516
from patchwork.views.utils import patch_to_mbox
17+
from patchwork.api.series import SeriesSerializer
1618

1719

1820
TEST_SERIES_DIR = os.path.join(os.path.dirname(__file__), 'series')
@@ -804,3 +806,49 @@ def test_custom_name(self):
804806
self.assertEqual(series.name, series_name)
805807

806808
mbox.close()
809+
810+
811+
class SeriesSerializerTestCase(TestCase):
812+
def _mock_request(self):
813+
mock_request = HttpRequest()
814+
mock_request.version = '1.4'
815+
mock_request.META['SERVER_NAME'] = 'example.com'
816+
mock_request.META['SERVER_PORT'] = '8000'
817+
818+
return mock_request
819+
820+
def _create_serializer(self, series, related_series, mock_request):
821+
related_ids = list(
822+
series.related_series.all().values_list('id', flat=True)
823+
) + [related_series.pk]
824+
825+
return SeriesSerializer(
826+
series,
827+
context={'request': mock_request},
828+
data={'related_series': related_ids},
829+
partial=True,
830+
)
831+
832+
def test_related_series_validation_equal_project_id(self):
833+
series_a = utils.create_series()
834+
series_b = utils.create_series(project=series_a.project)
835+
836+
mock_request = self._mock_request()
837+
serializer = self._create_serializer(series_a, series_b, mock_request)
838+
serializer.is_valid()
839+
serializer.save()
840+
841+
related_series_urls = serializer.data['related_series']
842+
self.assertEqual(len(related_series_urls), 1)
843+
self.assertEqual(
844+
f'series={series_b.id}' in related_series_urls[0]['web_url'], True
845+
)
846+
847+
def test_related_series_validation_different_project_id(self):
848+
series_a = utils.create_series()
849+
series_b = utils.create_series()
850+
851+
mock_request = self._mock_request()
852+
serializer = self._create_serializer(series_a, series_b, mock_request)
853+
is_valid = serializer.is_valid()
854+
self.assertFalse(is_valid)

0 commit comments

Comments
 (0)