Skip to content

Commit dd444a3

Browse files
Draft: Notify on reward point granting when deleting evaluation
1 parent b1cabd9 commit dd444a3

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

evap/staff/tests/test_views.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,6 +2386,25 @@ def test_invalid_deletion(self):
23862386
self.app.post(self.url, user=self.manager, params=self.post_params, status=400)
23872387
self.assertTrue(Evaluation.objects.filter(pk=self.evaluation.pk).exists())
23882388

2389+
@patch.object(Evaluation, "can_be_deleted_by_manager", True)
2390+
def test_reward_point_granting_message(self):
2391+
already_evaluated = baker.make(Evaluation, course__semester=self.evaluation.course.semester)
2392+
SemesterActivation.objects.create(semester=self.evaluation.course.semester, is_active=True)
2393+
student = baker.make(UserProfile, evaluations_participating_in=[self.evaluation])
2394+
2395+
baker.make(
2396+
UserProfile,
2397+
email=iter(f"{name}@institution.example.com" for name in ["a", "b", "c", "d", "e"]),
2398+
evaluations_participating_in=[self.evaluation, already_evaluated],
2399+
evaluations_voted_for=[already_evaluated],
2400+
_quantity=5,
2401+
)
2402+
2403+
with patch("evap.staff.views.logger") as mock:
2404+
page = self.app.post(self.url, user=self.manager, params=self.post_params, status=200)
2405+
2406+
mock.info.assert_called_with(f"Deletion of evaluation {self.evaluation} has created 5 reward point grantings")
2407+
23892408

23902409
class TestSingleResultEditView(WebTestStaffModeWith200Check):
23912410
@classmethod

evap/staff/views.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import csv
22
import itertools
3+
import logging
34
from collections import OrderedDict, defaultdict, namedtuple
45
from collections.abc import Container
56
from dataclasses import dataclass
@@ -135,6 +136,8 @@
135136
from evap.student.views import render_vote_page
136137
from evap.tools import unordered_groupby
137138

139+
logger = logging.getLogger(__name__)
140+
138141

139142
@manager_required
140143
def index(request):
@@ -671,6 +674,8 @@ def semester_make_active(request):
671674
@require_POST
672675
@manager_required
673676
def semester_delete(request):
677+
# TODO(rebeling): Do we expect reward point granting here? Do we want to notify? I don't see why it couldn't happen
678+
674679
semester = get_object_from_dict_pk_entry_or_logged_40x(Semester, request.POST, "semester_id")
675680

676681
if not semester.can_be_deleted_by_manager:
@@ -1422,6 +1427,11 @@ def helper_single_result_edit(request, evaluation):
14221427
def evaluation_delete(request):
14231428
evaluation = get_object_from_dict_pk_entry_or_logged_40x(Evaluation, request.POST, "evaluation_id")
14241429

1430+
# See comment in helper_evaluation_edit
1431+
@receiver(RewardPointGranting.granted_by_evaluation_deletion, weak=True)
1432+
def notify_reward_points(grantings, **_kwargs):
1433+
logger.info(f"Deletion of evaluation {evaluation} has created {len(grantings)} reward point grantings")
1434+
14251435
if not evaluation.can_be_deleted_by_manager:
14261436
raise SuspiciousOperation("Deleting evaluation not allowed")
14271437
if evaluation.is_single_result:

0 commit comments

Comments
 (0)