Skip to content

Commit 56ba98e

Browse files
committed
Add tests and score diff calculating for mp and pa
1 parent 8a82ece commit 56ba98e

File tree

4 files changed

+54
-11
lines changed

4 files changed

+54
-11
lines changed

Diff for: oioioi/contests/tests/tests.py

+11-11
Original file line numberDiff line numberDiff line change
@@ -1778,7 +1778,7 @@ def factory(self, user, timestamp=None):
17781778
request = factory.request()
17791779
request.contest = self.contest
17801780
request.user = user
1781-
request.timestamp = timestamp or self.during
1781+
request.timestamp = timestamp or self.during
17821782
return request
17831783

17841784
def setUp(self):
@@ -3825,7 +3825,7 @@ class TestRulesVisibility(TestCase):
38253825
'oioioi.oi.controllers.BOIOnlineContestController',
38263826
'oioioi.pa.controllers.PAContestController',
38273827
'oioioi.pa.controllers.PAFinalsContestController',
3828-
'oioioi.programs.controllers.ProgrammingContestController'
3828+
'oioioi.programs.controllers.ProgrammingContestController'
38293829
]
38303830

38313831
# left to fill in when added, in order of the controllers above
@@ -3905,7 +3905,7 @@ class TestRulesVisibility(TestCase):
39053905
None
39063906
],
39073907
[
3908-
datetime(2012, 8, 15, 20, 27, 58, tzinfo=timezone.utc),
3908+
datetime(2012, 8, 15, 20, 27, 58, tzinfo=timezone.utc),
39093909
datetime(2013, 4, 20, 21, 37, 13, tzinfo=timezone.utc)
39103910
],
39113911
[
@@ -3919,12 +3919,12 @@ def _set_problem_limits(self, url, limits_list):
39193919
problem = ProblemInstance.objects.get(pk=i+1)
39203920
problem.submissions_limit = limits_list[i]
39213921
problem.save()
3922-
3922+
39233923
response = self.client.get(url, follow=True)
39243924
self.assertEqual(response.status_code, 200)
39253925

39263926
return response
3927-
3927+
39283928
def _set_results_dates(self, url, dates):
39293929
round = Round.objects.get()
39303930
round.results_date = dates[0]
@@ -3947,7 +3947,7 @@ def _change_controller(self, public_results=False):
39473947
'oioioi.programs.controllers.ProgrammingContestController'
39483948
)
39493949
contest.save()
3950-
3950+
39513951
def test_dashboard_view(self):
39523952
for c in self.controller_names:
39533953
contest = Contest.objects.get()
@@ -3958,7 +3958,7 @@ def test_dashboard_view(self):
39583958
response = self.client.get(url, follow=True)
39593959
self.assertEqual(response.status_code, 200)
39603960
self.assertContains(response, "Rules")
3961-
3961+
39623962
def test_contest_type(self):
39633963
for c, d in zip(self.controller_names, self.scoring_descriptions):
39643964
contest = Contest.objects.get()
@@ -4015,7 +4015,7 @@ def test_contest_dates(self):
40154015
contest = Contest.objects.get()
40164016
contest.controller_name = c
40174017
contest.save()
4018-
4018+
40194019
round = Round.objects.get()
40204020
round.end_date = None
40214021
round.save()
@@ -4042,7 +4042,7 @@ def test_ranking_visibility(self):
40424042
response = self._set_results_dates(url, self.visibility_dates[0])
40434043
self.assertContains(response, "In round Round 1, your results as well as " \
40444044
"public ranking will be visible after 2012-08-15 20:27:58.")
4045-
4045+
40464046
self._change_controller(public_results=True)
40474047
response = self._set_results_dates(url, self.visibility_dates[1])
40484048
self.assertContains(response, "In round Round 1, your results will be visible after 2012-08-15 20:27:58" \
@@ -4054,7 +4054,7 @@ def test_ranking_visibility(self):
40544054
with fake_time(datetime(2012, 12, 24, 11, 23, 56, tzinfo=timezone.utc)):
40554055
response = self._set_results_dates(url, self.visibility_dates[0])
40564056
self.assertContains(response, "In round Round 1, your results as well as public ranking will be visible immediately.")
4057-
4057+
40584058
self._change_controller(public_results=True)
40594059
response = self._set_results_dates(url, self.visibility_dates[1])
40604060
self.assertContains(response, "In round Round 1, your results will be visible immediately" \
@@ -4066,7 +4066,7 @@ def test_ranking_visibility(self):
40664066
with fake_time(datetime(2014, 8, 26, 11, 23, 56, tzinfo=timezone.utc)):
40674067
response = self._set_results_dates(url, self.visibility_dates[0])
40684068
self.assertContains(response, "In round Round 1, your results as well as public ranking will be visible immediately.")
4069-
4069+
40704070
self._change_controller(public_results=True)
40714071
response = self._set_results_dates(url, self.visibility_dates[1])
40724072
self.assertContains(response, "In round Round 1, your results as well as public ranking will be visible immediately.")

Diff for: oioioi/mp/tests.py

+15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from oioioi.base.tests import TestCase, fake_time
77
from oioioi.contests.models import Contest, UserResultForProblem
8+
from oioioi.contests.tests.tests import TestScoreDiff
89
from oioioi.mp.score import FloatScore
910

1011

@@ -96,3 +97,17 @@ def test_results_scores(self):
9697
for urfp in UserResultForProblem.objects.all():
9798
res = self._create_result(urfp.user, urfp.problem_instance)
9899
self.assertEqual(res.score, urfp.score)
100+
101+
102+
class TestScoreDiffMPContest(TestScoreDiff):
103+
submission_cls = FloatScore
104+
diff_cls = FloatScore
105+
106+
def test_mp_contest(self):
107+
self._set_contest_controller('oioioi.mp.controllers.MPContestController')
108+
UserResultForProblem.objects.all().delete()
109+
110+
self._test_diff(50., 50.)
111+
self._test_diff(55.5, 5.5)
112+
self._test_diff(0.5, 0)
113+
self._test_diff(100., 44.5)

Diff for: oioioi/pa/controllers.py

+17
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from oioioi.acm.controllers import ACMContestController
1111
from oioioi.base.utils.query_helpers import Q_always_true
1212
from oioioi.base.utils.redirect import safe_redirect
13+
from oioioi.contests.scores import IntegerScore
1314
from oioioi.contests.utils import (
1415
all_non_trial_public_results_visible,
1516
is_contest_admin,
@@ -201,6 +202,22 @@ def get_default_safe_exec_mode(self):
201202
def get_allowed_languages(self):
202203
return ['C', 'C++', 'Pascal', 'Java']
203204

205+
def calculate_score_change(self, before, after):
206+
if before is None:
207+
if after is None:
208+
return None
209+
return IntegerScore(after.points.value)
210+
return IntegerScore(after.points.value - before.points.value)
211+
212+
def render_score_change(self, diff):
213+
if diff is None:
214+
return '<span class="text-secondary">-</span>'
215+
if diff.value == 0:
216+
return '<span class="text-secondary">0</span>'
217+
if diff.value > 0:
218+
return f'<span class="text-success">+{diff.value}</span>'
219+
return f'<span class="text-danger">{diff.value}</span>'
220+
204221

205222
A_PLUS_B_RANKING_KEY = 'ab'
206223
B_RANKING_KEY = 'b'

Diff for: oioioi/pa/tests.py

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
UserResultForProblem,
1818
)
1919
from oioioi.contests.scores import IntegerScore
20+
from oioioi.contests.tests.tests import TestScoreDiff
2021
from oioioi.pa import utils
2122
from oioioi.pa.controllers import A_PLUS_B_RANKING_KEY, B_RANKING_KEY
2223
from oioioi.pa.models import PAProblemInstanceData, PARegistration
@@ -480,3 +481,13 @@ def test_terms_accepted_phrase_inline_edit_restrictions(self):
480481

481482
# Checks if the field is not editable.
482483
self.assertNotContains(response, 'id_terms_accepted_phrase-0-text')
484+
485+
486+
class TestScoreDiffPAContest(TestScoreDiff):
487+
def test_pa_contest(self):
488+
self._set_contest_controller('oioioi.pa.controllers.PAContestController')
489+
UserResultForProblem.objects.all().delete()
490+
491+
self._test_diff(5, 5)
492+
self._test_diff(10, 5)
493+
self._test_diff(0, -10)

0 commit comments

Comments
 (0)