From 39590ce3c6945ae90bde8da4cd109c1d2082e158 Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Sun, 18 Feb 2024 18:55:21 +0500 Subject: [PATCH 1/2] only migrate submissions which are on the leaderboard --- src/apps/competitions/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/apps/competitions/models.py b/src/apps/competitions/models.py index 1f96cc84e..6abf5ef2a 100644 --- a/src/apps/competitions/models.py +++ b/src/apps/competitions/models.py @@ -117,10 +117,12 @@ def apply_phase_migration(self, current_phase, next_phase, force_migration=False self.is_migrating = True self.save() + # Get submissions of current phase with finished status and which are on leaderboard submissions = Submission.objects.filter( phase=current_phase, is_migrated=False, parent__isnull=True, + leaderboard__isnull=False, status=Submission.FINISHED ) From 90248d14a5d5064ec3d8a41982be8ebf214f26f3 Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Tue, 20 Feb 2024 15:03:51 +0500 Subject: [PATCH 2/2] tests fixed --- src/apps/api/tests/test_competitions.py | 4 ++-- src/apps/chahub/tests/test_chahub_mixin.py | 1 + .../competitions/tests/test_phase_migration.py | 4 +++- src/factories.py | 17 +++++++++-------- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/apps/api/tests/test_competitions.py b/src/apps/api/tests/test_competitions.py index 989f668f4..59ebc216c 100644 --- a/src/apps/api/tests/test_competitions.py +++ b/src/apps/api/tests/test_competitions.py @@ -111,7 +111,7 @@ def test_manual_migration_makes_submissions_from_one_phase_in_another(self): # make 5 submissions in phase 1 for _ in range(5): - SubmissionFactory(owner=self.creator, phase=self.phase_1, status=Submission.FINISHED) + SubmissionFactory(owner=self.creator, phase=self.phase_1, status=Submission.FINISHED, leaderboard=self.leaderboard) assert self.phase_1.submissions.count() == 5 assert self.phase_2.submissions.count() == 0 @@ -130,7 +130,7 @@ def test_manual_migration_makes_submissions_out_of_only_parents_not_children(sel self.client.login(username='creator', password='creator') # make 1 submission with 4 children - parent = SubmissionFactory(owner=self.creator, phase=self.phase_1, has_children=True, status=Submission.FINISHED) + parent = SubmissionFactory(owner=self.creator, phase=self.phase_1, has_children=True, status=Submission.FINISHED, leaderboard=self.leaderboard) for _ in range(4): # Make a submission _and_ new Task for phase 2 self.phase_2.tasks.add(TaskFactory()) diff --git a/src/apps/chahub/tests/test_chahub_mixin.py b/src/apps/chahub/tests/test_chahub_mixin.py index 75565c196..77aa3532a 100644 --- a/src/apps/chahub/tests/test_chahub_mixin.py +++ b/src/apps/chahub/tests/test_chahub_mixin.py @@ -21,6 +21,7 @@ def setUp(self): participant=self.participant, status='Finished', is_public=True, + leaderboard=None ) def test_submission_save_sends_to_chahub(self): diff --git a/src/apps/competitions/tests/test_phase_migration.py b/src/apps/competitions/tests/test_phase_migration.py index 404c0fee5..f1b6e77a8 100644 --- a/src/apps/competitions/tests/test_phase_migration.py +++ b/src/apps/competitions/tests/test_phase_migration.py @@ -7,7 +7,7 @@ from competitions.models import Submission, Competition, Phase from competitions.tasks import do_phase_migrations from factories import UserFactory, CompetitionFactory, PhaseFactory, SubmissionFactory, CompetitionParticipantFactory, \ - TaskFactory + TaskFactory, LeaderboardFactory twenty_minutes_ago = now() - timedelta(hours=0, minutes=20) twenty_five_minutes_ago = now() - timedelta(hours=0, minutes=25) @@ -22,6 +22,7 @@ def setUp(self): self.competition = CompetitionFactory(created_by=self.owner, title="Competition One") self.competition_participant = CompetitionParticipantFactory(user=self.normal_user, competition=self.competition) + self.leaderboard = LeaderboardFactory() self.phase1 = PhaseFactory( competition=self.competition, auto_migrate_to_this_phase=False, @@ -59,6 +60,7 @@ def make_submission(self, **kwargs): kwargs.setdefault('participant', self.competition_participant) kwargs.setdefault('phase', self.phase1) kwargs.setdefault('status', Submission.FINISHED) + kwargs.setdefault('leaderboard', self.leaderboard) sub = SubmissionFactory(**kwargs) return sub diff --git a/src/factories.py b/src/factories.py index d0c47716c..c76384f5c 100644 --- a/src/factories.py +++ b/src/factories.py @@ -154,6 +154,14 @@ class Meta: task = factory.SubFactory(TaskFactory) +class LeaderboardFactory(DjangoModelFactory): + class Meta: + model = Leaderboard + + title = factory.Faker('word') + key = factory.Faker('word') + + class SubmissionFactory(DjangoModelFactory): class Meta: model = Submission @@ -161,6 +169,7 @@ class Meta: owner = factory.SubFactory(UserFactory) phase = factory.SubFactory(PhaseFactory) name = factory.Sequence(lambda n: f'Submission {n}') + leaderboard = factory.SubFactory(LeaderboardFactory) created_when = factory.Faker('date_time_between', start_date='-5y', end_date='now', tzinfo=UTC) data = factory.SubFactory( @@ -182,14 +191,6 @@ class Meta: status = factory.LazyAttribute(lambda n: random.choice(['unknown', 'denied', 'approved', 'pending'])) -class LeaderboardFactory(DjangoModelFactory): - class Meta: - model = Leaderboard - - title = factory.Faker('word') - key = factory.Faker('word') - - class ColumnFactory(DjangoModelFactory): class Meta: model = Column