|
7 | 7 | from unittest import mock
|
8 | 8 | from rest_framework import serializers
|
9 | 9 |
|
10 |
| -from pacsfiles.serializers import PACSSeriesSerializer |
| 10 | +from core.models import ChrisFolder |
| 11 | +from core.utils import json_zip2str |
| 12 | +from pacsfiles.models import PACS, PACSQuery |
| 13 | +from pacsfiles.serializers import PACSQuerySerializer, PACSSeriesSerializer |
11 | 14 |
|
12 | 15 |
|
13 | 16 | CHRIS_SUPERUSER_PASSWORD = settings.CHRIS_SUPERUSER_PASSWORD
|
14 | 17 |
|
15 | 18 |
|
16 |
| -class PACSSeriesSerializerTests(TestCase): |
17 |
| - |
| 19 | +class SerializerTests(TestCase): |
18 | 20 | def setUp(self):
|
19 | 21 | # avoid cluttered console output (for instance logging all the http requests)
|
20 | 22 | logging.disable(logging.WARNING)
|
21 | 23 |
|
22 |
| - # create superuser chris (owner of root folders) |
| 24 | + # superuser chris (owner of root folders) |
23 | 25 | self.chris_username = 'chris'
|
24 |
| - self.chris_password = CHRIS_SUPERUSER_PASSWORD |
| 26 | + chris_user = User.objects.get(username=self.chris_username) |
| 27 | + |
| 28 | + # create normal user |
| 29 | + self.username = 'foo' |
| 30 | + self.password = 'bar' |
| 31 | + User.objects.create_user(username=self.username, password=self.password) |
| 32 | + |
| 33 | + # create a PACS |
| 34 | + self.pacs_name = 'myPACS' |
| 35 | + folder_path = f'SERVICES/PACS/{self.pacs_name}' |
| 36 | + (pacs_folder, tf) = ChrisFolder.objects.get_or_create(path=folder_path, |
| 37 | + owner=chris_user) |
| 38 | + PACS.objects.get_or_create(folder=pacs_folder, identifier=self.pacs_name) |
25 | 39 |
|
26 | 40 | def tearDown(self):
|
27 | 41 | # re-enable logging
|
28 | 42 | logging.disable(logging.NOTSET)
|
29 | 43 |
|
30 | 44 |
|
| 45 | +class PACSQuerySerializerTests(SerializerTests): |
| 46 | + |
| 47 | + def test_create_success(self): |
| 48 | + """ |
| 49 | + Test whether overriden 'create' method successfully creates a new PACS query. |
| 50 | + """ |
| 51 | + user = User.objects.get(username=self.username) |
| 52 | + pacs = PACS.objects.get(identifier=self.pacs_name) |
| 53 | + query = {'SeriesInstanceUID': '2.3.15.2.1057'} |
| 54 | + data = {'title': 'query1', 'query': query, 'owner': user, 'pacs': pacs} |
| 55 | + |
| 56 | + with mock.patch('pacsfiles.serializers.PfdcmClient.query') as pfdcm_query_mock: |
| 57 | + result = {'mock': 'mock'} |
| 58 | + pfdcm_query_mock.return_value = result |
| 59 | + pacs_query_serializer = PACSQuerySerializer(data=data) |
| 60 | + pacs_query = pacs_query_serializer.create(data) |
| 61 | + pfdcm_query_mock.assert_called_with(self.pacs_name, query) |
| 62 | + self.assertEqual(pacs_query.result, json_zip2str(result)) |
| 63 | + |
| 64 | + |
| 65 | + def test_create_failure_pacs_user_title_combination_already_exists(self): |
| 66 | + """ |
| 67 | + Test whether overriden 'create' method raises a ValidationError when a user has |
| 68 | + already registered a PACS query with the same title and pacs. |
| 69 | + """ |
| 70 | + user = User.objects.get(username=self.username) |
| 71 | + pacs = PACS.objects.get(identifier=self.pacs_name) |
| 72 | + query = {'SeriesInstanceUID': '1.3.12.2.1107'} |
| 73 | + |
| 74 | + PACSQuery.objects.get_or_create(title='query2', query=query, owner=user, pacs=pacs) |
| 75 | + |
| 76 | + data = {'title': 'query2', 'query': query, 'owner': user, 'pacs': pacs} |
| 77 | + pacs_query_serializer = PACSQuerySerializer(data=data) |
| 78 | + with self.assertRaises(serializers.ValidationError): |
| 79 | + pacs_query_serializer.create(data) |
| 80 | + |
| 81 | + def test_update_success(self): |
| 82 | + """ |
| 83 | + Test whether overriden 'update' method successfully updates an existing PACS query. |
| 84 | + """ |
| 85 | + user = User.objects.get(username=self.username) |
| 86 | + pacs = PACS.objects.get(identifier=self.pacs_name) |
| 87 | + query = {'SeriesInstanceUID': '2.3.15.2.1057'} |
| 88 | + |
| 89 | + pacs_query, _ = PACSQuery.objects.get_or_create(title='query2', query=query, |
| 90 | + owner=user, pacs=pacs) |
| 91 | + |
| 92 | + data = {'title': 'query4'} |
| 93 | + pacs_query_serializer = PACSQuerySerializer(pacs_query, data) |
| 94 | + pacs_query = pacs_query_serializer.update(pacs_query, data) |
| 95 | + self.assertEqual(pacs_query.title, 'query4') |
| 96 | + |
| 97 | + def test_update_failure_pacs_user_title_combination_already_exists(self): |
| 98 | + """ |
| 99 | + Test whether overriden 'update' method raises a ValidationError when a user has |
| 100 | + already registered a PACS query with the same title and pacs. |
| 101 | + """ |
| 102 | + user = User.objects.get(username=self.username) |
| 103 | + pacs = PACS.objects.get(identifier=self.pacs_name) |
| 104 | + query = {'SeriesInstanceUID': '1.3.12.2.1107'} |
| 105 | + |
| 106 | + pacs_query, _ = PACSQuery.objects.get_or_create(title='query2', query=query, |
| 107 | + owner=user, pacs=pacs) |
| 108 | + PACSQuery.objects.get_or_create(title='query3', query=query, owner=user, pacs=pacs) |
| 109 | + |
| 110 | + data = {'title': 'query3'} |
| 111 | + pacs_query_serializer = PACSQuerySerializer(pacs_query, data) |
| 112 | + with self.assertRaises(serializers.ValidationError): |
| 113 | + pacs_query_serializer.update(pacs_query, data) |
| 114 | + |
| 115 | + |
| 116 | +class PACSSeriesSerializerTests(SerializerTests): |
| 117 | + |
31 | 118 | def test_validate_ndicom_failure_not_positive(self):
|
32 | 119 | """
|
33 | 120 | Test whether overriden validate_ndicom method validates submitted ndicom must
|
|
0 commit comments