Skip to content

Commit d49a26e

Browse files
committed
resolve CR comments update unittests
1 parent 6655865 commit d49a26e

2 files changed

Lines changed: 82 additions & 18 deletions

File tree

api/base/middleware.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,6 @@ def __init__(self, get_response):
141141
self.get_response = get_response
142142

143143
def __call__(self, request):
144-
if request.path.endswith('/v2'):
145-
return self.get_response(request)
146144
if MaintenanceMode.is_under_maintenance():
147145
return JsonResponse(
148146
{

osf_tests/test_middleware.py

Lines changed: 82 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,94 @@
1-
import json
21
import pytest
32
from unittest import mock
3+
from tests.base import ApiTestCase
4+
from osf.utils import permissions
5+
from osf_tests.factories import (
6+
AuthUserFactory,
7+
CollectionProviderFactory,
8+
ProjectFactory,
9+
)
410

5-
class TestMaintenanceModeMiddlewareIntegration:
611

12+
@pytest.fixture()
13+
def provider():
14+
provider = CollectionProviderFactory()
15+
provider.update_group_permissions()
16+
return provider
17+
18+
19+
@pytest.fixture()
20+
def admin(provider):
21+
user = AuthUserFactory()
22+
provider.get_group(permissions.ADMIN).user_set.add(user)
23+
return user
24+
25+
26+
@pytest.fixture()
27+
def node(admin):
28+
return ProjectFactory(creator=admin)
29+
30+
31+
class TestMaintenanceModeMiddlewareIntegration(ApiTestCase):
732
MAINTENANCE_MOCK_PATH = 'api.base.middleware.MaintenanceMode.is_under_maintenance'
833

34+
def setUp(self):
35+
super().setUp()
36+
self.provider = CollectionProviderFactory()
37+
self.provider.update_group_permissions()
38+
self.admin = AuthUserFactory()
39+
self.provider.get_group(permissions.ADMIN).user_set.add(self.admin)
40+
self.node = ProjectFactory(creator=self.admin)
41+
42+
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=True)
43+
def test_middleware_blocks_post_when_maintenance_mode_on(self, mock_maintenance):
44+
url = f'/v2/nodes/{self.node._id}/'
45+
response = self.app.post_json(url, {}, expect_errors=True)
46+
assert response.status_code == 503
47+
assert response.json['meta']['maintenance_mode'] is True
48+
assert response.json['meta']['status_page'] == 'https://status.cos.io'
49+
950
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=True)
10-
def test_bypasses_v2_root_if_maintenance_mode_on(self, mock_maintenance, client):
11-
response = client.get('/v2')
12-
assert response.status_code != 503
13-
mock_maintenance.assert_not_called()
51+
def test_middleware_blocks_patch_when_maintenance_mode_on(self, mock_maintenance):
52+
url = f'/v2/nodes/{self.node._id}/'
53+
response = self.app.patch_json(url, {}, expect_errors=True)
54+
assert response.status_code == 503
55+
assert response.json['meta']['maintenance_mode'] is True
1456

15-
@pytest.mark.parametrize('method', ['post', 'patch', 'put', 'delete'])
1657
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=True)
17-
def test_middleware_blocks_different_requests_if_maintenance_mode_on(self, mock_maintenance, client, method):
18-
client_method = getattr(client, method)
19-
response = client_method('/v2/nodes/', data={}, content_type='application/json')
58+
def test_middleware_blocks_delete_when_maintenance_mode_on(self, mock_maintenance):
59+
url = f'/v2/nodes/{self.node._id}/'
60+
response = self.app.delete(url, expect_errors=True)
61+
2062
assert response.status_code == 503
21-
data = json.loads(response.content)
22-
assert data['meta']['maintenance_mode'] is True
23-
assert data['meta']['status_page'] == 'https://status.cos.io'
63+
assert response.json['meta']['maintenance_mode'] is True
64+
65+
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=False)
66+
def test_go_to_post_view_when_maintenance_mode_off(self, mock_maintenance):
67+
url = '/v2/nodes/'
68+
payload = {
69+
'data': {
70+
'type': 'nodes',
71+
'attributes': {'title': 'New Node', 'category': 'project'}
72+
}
73+
}
74+
response = self.app.post_json(url, payload, auth=self.admin.auth)
75+
assert response.status_code == 201
76+
77+
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=False)
78+
def test_go_to_post_view_if_maintenance_mode_off(self, mock_maintenance):
79+
url = f'/v2/nodes/{self.node._id}/'
80+
payload = {
81+
'data': {
82+
'id': self.node._id,
83+
'type': 'nodes',
84+
'attributes': {'title': 'Updated Title'}
85+
}
86+
}
87+
response = self.app.patch_json(url, payload, auth=self.admin.auth)
88+
assert response.status_code == 200
2489

2590
@mock.patch(MAINTENANCE_MOCK_PATH, return_value=False)
26-
def test_passes_through_when_maintenance_mode_off(self, mock_maintenance, client):
27-
response = client.get('/v2/nodes/')
28-
assert response.status_code != 503
91+
def test_go_to_delete_view_if_maintenance_mode_off(self, mock_maintenance):
92+
url = f'/v2/nodes/{self.node._id}/'
93+
response = self.app.delete(url, auth=self.admin.auth)
94+
assert response.status_code == 204

0 commit comments

Comments
 (0)