Skip to content

Commit aa0f591

Browse files
Akshat SinghAkshat Singh
authored andcommitted
Added Tests for Challenge App
1 parent 158473a commit aa0f591

7 files changed

Lines changed: 1525 additions & 24 deletions

File tree

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
from unittest.mock import MagicMock, patch
2+
3+
from challenges.admin import ChallengeAdmin
4+
from challenges.models import Challenge
5+
from django.contrib.admin.sites import AdminSite
6+
from django.contrib.messages.storage.fallback import FallbackStorage
7+
from django.test import RequestFactory, TestCase
8+
9+
10+
class TestChallengeAdminActions(TestCase):
11+
def setUp(self):
12+
self.factory = RequestFactory()
13+
self.site = AdminSite()
14+
self.admin = ChallengeAdmin(Challenge, self.site)
15+
self.request = self.factory.get("/")
16+
17+
self.request.session = self.client.session
18+
19+
self.request._messages = FallbackStorage(self.request)
20+
21+
self.queryset = MagicMock()
22+
self.queryset.count.return_value = 2
23+
24+
@patch("challenges.admin.start_workers")
25+
def test_start_selected_workers_all_success(self, mock_start_workers):
26+
mock_start_workers.return_value = {"count": 2, "failures": []}
27+
self.admin.start_selected_workers(self.request, self.queryset)
28+
29+
messages = list(self.request._messages)
30+
assert any("successfully started" in str(m) for m in messages)
31+
32+
@patch("challenges.admin.start_workers")
33+
def test_start_selected_workers_partial_failure(self, mock_start_workers):
34+
mock_start_workers.return_value = {
35+
"count": 1,
36+
"failures": [{"challenge_pk": 1, "message": "Failed to start"}],
37+
}
38+
self.admin.start_selected_workers(self.request, self.queryset)
39+
messages = list(self.request._messages)
40+
assert any("succesfully started" in str(m) for m in messages)
41+
assert any("Challenge 1: Failed to start" in str(m) for m in messages)
42+
43+
@patch("challenges.admin.stop_workers")
44+
def test_stop_selected_workers(self, mock_stop_workers):
45+
mock_stop_workers.return_value = {"count": 2, "failures": []}
46+
self.admin.stop_selected_workers(self.request, self.queryset)
47+
messages = list(self.request._messages)
48+
assert any("successfully stopped" in str(m) for m in messages)
49+
50+
@patch("challenges.admin.scale_workers")
51+
def test_scale_selected_workers_valid(self, mock_scale_workers):
52+
mock_scale_workers.return_value = {"count": 2, "failures": []}
53+
self.request.POST = {"num_of_tasks": "2"}
54+
self.admin.scale_selected_workers(self.request, self.queryset)
55+
messages = list(self.request._messages)
56+
assert any("successfully scaled" in str(m) for m in messages)
57+
58+
@patch("challenges.admin.scale_workers")
59+
def test_scale_selected_workers_invalid(self, mock_scale_workers):
60+
self.request.POST = {"num_of_tasks": "-1"}
61+
self.admin.scale_selected_workers(self.request, self.queryset)
62+
messages = list(self.request._messages)
63+
assert any(
64+
"Please enter a valid whole number" in str(m) for m in messages
65+
)
66+
67+
@patch("challenges.admin.restart_workers")
68+
def test_restart_selected_workers(self, mock_restart_workers):
69+
mock_restart_workers.return_value = {"count": 2, "failures": []}
70+
self.admin.restart_selected_workers(self.request, self.queryset)
71+
messages = list(self.request._messages)
72+
assert any("successfully restarted" in str(m) for m in messages)
73+
74+
@patch("challenges.admin.delete_workers")
75+
def test_delete_selected_workers(self, mock_delete_workers):
76+
mock_delete_workers.return_value = {"count": 2, "failures": []}
77+
self.admin.delete_selected_workers(self.request, self.queryset)
78+
messages = list(self.request._messages)
79+
assert any("successfully deleted" in str(m) for m in messages)
80+
81+
@patch("challenges.admin.stop_workers")
82+
def test_stop_selected_workers_partial_failure(self, mock_stop_workers):
83+
mock_stop_workers.return_value = {
84+
"count": 1,
85+
"failures": [{"challenge_pk": 42, "message": "Failed to stop"}],
86+
}
87+
self.admin.stop_selected_workers(self.request, self.queryset)
88+
messages = list(self.request._messages)
89+
90+
assert any("succesfully stopped" in str(m) for m in messages)
91+
92+
assert any("Challenge 42: Failed to stop" in str(m) for m in messages)
93+
94+
@patch("challenges.admin.scale_workers")
95+
def test_scale_selected_workers_partial_failure(self, mock_scale_workers):
96+
mock_scale_workers.return_value = {
97+
"count": 1,
98+
"failures": [{"challenge_pk": 99, "message": "Failed to scale"}],
99+
}
100+
self.request.POST = {"num_of_tasks": "2"}
101+
self.admin.scale_selected_workers(self.request, self.queryset)
102+
messages = list(self.request._messages)
103+
104+
assert any("succesfully scaled" in str(m) for m in messages)
105+
106+
assert any("Challenge 99: Failed to scale" in str(m) for m in messages)
107+
108+
@patch("challenges.admin.restart_workers")
109+
def test_restart_selected_workers_partial_failure(
110+
self, mock_restart_workers
111+
):
112+
mock_restart_workers.return_value = {
113+
"count": 1,
114+
"failures": [{"challenge_pk": 77, "message": "Failed to restart"}],
115+
}
116+
self.admin.restart_selected_workers(self.request, self.queryset)
117+
messages = list(self.request._messages)
118+
119+
assert any("succesfully restarted" in str(m) for m in messages)
120+
121+
assert any(
122+
"Challenge 77: Failed to restart" in str(m) for m in messages
123+
)
124+
125+
@patch("challenges.admin.delete_workers")
126+
def test_delete_selected_workers_partial_failure(
127+
self, mock_delete_workers
128+
):
129+
mock_delete_workers.return_value = {
130+
"count": 1,
131+
"failures": [{"challenge_pk": 55, "message": "Failed to delete"}],
132+
}
133+
self.admin.delete_selected_workers(self.request, self.queryset)
134+
messages = list(self.request._messages)
135+
136+
assert any("succesfully deleted" in str(m) for m in messages)
137+
138+
assert any(
139+
"Challenge 55: Failed to delete" in str(m) for m in messages
140+
)

0 commit comments

Comments
 (0)