|
8 | 8 | from django.core.exceptions import PermissionDenied |
9 | 9 |
|
10 | 10 | import website.maintenance as maintenance |
11 | | -from osf.models import MaintenanceState |
| 11 | +from osf.models import MaintenanceState, MaintenanceMode |
12 | 12 | from osf_tests.factories import AuthUserFactory |
13 | 13 |
|
14 | 14 | from admin_tests.utilities import setup_view |
@@ -105,3 +105,59 @@ def test_correct_view_permissions(self, req, user, plain_view): |
105 | 105 |
|
106 | 106 | res = plain_view.as_view()(req) |
107 | 107 | assert res.status_code == 200 |
| 108 | + |
| 109 | + |
| 110 | +@pytest.mark.urls('admin.base.urls') |
| 111 | +class TestMaintenanceMode: |
| 112 | + |
| 113 | + @pytest.fixture() |
| 114 | + def user(self): |
| 115 | + user = AuthUserFactory() |
| 116 | + view_permission = Permission.objects.get(codename='change_maintenancestate') |
| 117 | + user.user_permissions.add(view_permission) |
| 118 | + user.save() |
| 119 | + return user |
| 120 | + |
| 121 | + @pytest.fixture() |
| 122 | + def plain_view(self): |
| 123 | + return views.MaintenanceDisplay |
| 124 | + |
| 125 | + @pytest.fixture() |
| 126 | + def view(self, user, plain_view): |
| 127 | + req = RequestFactory().get('/fake_path') |
| 128 | + req.user = user |
| 129 | + view = plain_view() |
| 130 | + setup_view(view, req) |
| 131 | + return view |
| 132 | + |
| 133 | + def test_get_context_data_includes_maintenance_mode(self, view): |
| 134 | + MaintenanceMode(maintenance_mode=True).save() |
| 135 | + context = view.get_context_data() |
| 136 | + assert context['maintenance_mode'] is True |
| 137 | + MaintenanceMode(maintenance_mode=False).save() |
| 138 | + context = view.get_context_data() |
| 139 | + assert context['maintenance_mode'] is False |
| 140 | + |
| 141 | + def test_post_toggles_maintenance_mode_on(self, user, plain_view): |
| 142 | + MaintenanceMode(maintenance_mode=False).save() |
| 143 | + req = RequestFactory().post('/fake_path', data={'maintenance_mode': 'False'}) |
| 144 | + req.user = user |
| 145 | + view = plain_view() |
| 146 | + setup_view(view, req) |
| 147 | + response = view.post(req) |
| 148 | + # It should redirect back to the display page |
| 149 | + assert response.status_code == 302 |
| 150 | + # The database state should now be True |
| 151 | + assert MaintenanceMode.is_under_maintenance() is True |
| 152 | + |
| 153 | + def test_post_toggles_maintenance_mode_off(self, user, plain_view): |
| 154 | + MaintenanceMode(maintenance_mode=True).save() |
| 155 | + req = RequestFactory().post('/fake_path', data={'maintenance_mode': 'True'}) |
| 156 | + req.user = user |
| 157 | + view = plain_view() |
| 158 | + setup_view(view, req) |
| 159 | + response = view.post(req) |
| 160 | + # It should redirect back to the display page |
| 161 | + assert response.status_code == 302 |
| 162 | + # The database state should now be False |
| 163 | + assert MaintenanceMode.is_under_maintenance() is False |
0 commit comments