Skip to content

Commit d7c4e8e

Browse files
committed
Update testing
1 parent af0f600 commit d7c4e8e

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

tests/unit/public_api/v2/views/test_base.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import pytest
2+
from unittest import mock
23

34
from public_api.version_02.views.base import BaseNestedAPITimeSeriesViewV2
45

6+
class TestNestedTimeSeriesView(BaseNestedAPITimeSeriesViewV2):
7+
"""
8+
Minimal concrete implementation so BaseNestedAPITimeSeriesView can be instantiated
9+
during unit tests.
10+
"""
11+
12+
lookup_field = "mock"
13+
14+
serializer_class = mock.MagicMock
515

616
class TestBaseNestedAPITimeSeriesViewV2:
717
def test_raises_error_for_lookup_field_property(self):
@@ -31,3 +41,95 @@ def test_raises_error_for_serializer_class_property(self):
3141
# When / Then
3242
with pytest.raises(NotImplementedError):
3343
base_view.serializer_class
44+
45+
class TestGetAddsPrivateHeaderForNonPublicRequests:
46+
"""
47+
Tests for the newly added private Cache-Control header behaviour in the `get()` method.
48+
"""
49+
50+
@mock.patch("public_api.version_02.views.base.backend.JSONWebTokenAuthentication.authenticate")
51+
@mock.patch("public_api.version_02.views.base.Response")
52+
@mock.patch("public_api.version_02.views.base.APITimeSeriesRequestSerializerv2")
53+
def test_private_header_added_when_valid_jwt(
54+
self,
55+
mock_request_serializer_class: mock.MagicMock,
56+
mock_response_class: mock.MagicMock,
57+
mock_backend_auth_authenticate: mock.MagicMock
58+
):
59+
"""
60+
Given `backend.JSONWebTokenAuthentication.authenticate()` returns True
61+
When `get()` is called
62+
Then the response contains Cache-Control: private, no-cache
63+
"""
64+
# Given
65+
mock_backend_auth_authenticate.return_value = True
66+
67+
mocked_request = mock.MagicMock()
68+
69+
mocked_slice = [mock.MagicMock()]
70+
mock_request_serializer = mock.MagicMock()
71+
mock_request_serializer.build_timeseries_dto_slice.return_value = mocked_slice
72+
mock_request_serializer_class.return_value = mock_request_serializer
73+
74+
mock_data_serializer = mock.MagicMock()
75+
mock_data_serializer.data = {"foo": "bar"}
76+
77+
base_view = TestNestedTimeSeriesView()
78+
base_view.get_serializer = mock.MagicMock(return_value=mock_data_serializer)
79+
80+
mocked_response = mock.MagicMock()
81+
mock_response_class.return_value = mocked_response
82+
83+
# When
84+
response = base_view.get(mocked_request)
85+
86+
# Then
87+
mock_backend_auth_authenticate.assert_called_once_with(mocked_request)
88+
mocked_response.__setitem__.assert_called_once_with(
89+
"Cache-Control", "private, no-cache"
90+
)
91+
assert response == mocked_response
92+
93+
@mock.patch("public_api.version_02.views.base.backend.JSONWebTokenAuthentication.authenticate")
94+
@mock.patch("public_api.version_02.views.base.Response")
95+
@mock.patch("public_api.version_02.views.base.APITimeSeriesRequestSerializerv2")
96+
def test_private_header_not_added_when_is_valid_non_public_request_is_false(
97+
self,
98+
mock_request_serializer_class: mock.MagicMock,
99+
mock_response_class: mock.MagicMock,
100+
mock_backend_auth_authenticate: mock.MagicMock,
101+
):
102+
"""
103+
Given `_is_valid_non_public_request()` returns False
104+
When `get()` is called
105+
Then the response does NOT contain a private Cache-Control header
106+
"""
107+
# Given
108+
mock_backend_auth_authenticate.return_value = False
109+
110+
mocked_request = mock.MagicMock()
111+
112+
# Mock DTO slice creation
113+
mocked_slice = [mock.MagicMock()]
114+
mock_request_serializer = mock.MagicMock()
115+
mock_request_serializer.build_timeseries_dto_slice.return_value = mocked_slice
116+
mock_request_serializer_class.return_value = mock_request_serializer
117+
118+
# Mock the final serializer
119+
mock_data_serializer = mock.MagicMock()
120+
mock_data_serializer.data = {"foo": "bar"}
121+
122+
base_view = TestNestedTimeSeriesView()
123+
base_view.get_serializer = mock.MagicMock(return_value=mock_data_serializer)
124+
125+
# Mock Response
126+
mocked_response = mock.MagicMock()
127+
mock_response_class.return_value = mocked_response
128+
129+
# When
130+
response = base_view.get(mocked_request)
131+
132+
# Then
133+
mock_backend_auth_authenticate.assert_called_once_with(mocked_request)
134+
mocked_response.__setitem__.assert_not_called()
135+
assert response == mocked_response

0 commit comments

Comments
 (0)