def test_judge_cannot_select_now_reason_none_no_iotds(self, now): now.return_value = datetime.now() judge = Generators.user(groups=['iotd_judges']) self.assertIsNone(IotdService().judge_cannot_select_now_reason(judge)) self.assertEquals( IotdService().get_next_available_selection_time_for_judge(judge), DateTimeService.now())
def test_judge_cannot_select_now_reason_none_no_scheduled_iotds(self, now): now.return_value = datetime.now() iotd = self._create_iotd(date=date.today() - timedelta(1)) self.assertIsNone(IotdService().judge_cannot_select_now_reason( iotd.judge)) self.assertEquals( IotdService().get_next_available_selection_time_for_judge( iotd.judge), DateTimeService.now())
def test_judge_cannot_select_now_reason_already_selected_today(self, now): now.return_value = datetime.now() iotd = self._create_iotd(date=date.today()) reason = IotdService().judge_cannot_select_now_reason(iotd.judge) self.assertIsNotNone(reason) self.assertTrue('you already selected 1 IOTD today' in reason) self.assertEquals( IotdService().get_next_available_selection_time_for_judge( iotd.judge), DateTimeService.next_midnight())
def test_submission_model(self): Generators.premium_subscription(self.user, "AstroBin Ultimate 2020+") submission = IotdSubmission.objects.create( submitter=self.submitter_1, image=self.image) self.assertEqual(submission.submitter, self.submitter_1) self.assertEqual(submission.image, self.image) self.image.published = datetime.now() - timedelta(settings.IOTD_SUBMISSION_WINDOW_DAYS) - timedelta(hours=1) self.image.save() IotdService().update_top_pick_nomination_archive() # Badge is not present with just one submission response = self.client.get(reverse_lazy('image_detail', args=(self.image.get_id(),))) self.assertNotContains(response, 'top-pick-nomination-badge') # Image is not in Top Picks Nominations page with just one vote response = self.client.get(reverse_lazy('top_pick_nominations')) self.assertNotContains(response, self.image.title) cache.clear() self.image.published = datetime.now() self.image.save() IotdSubmission.objects.create( submitter=self.submitter_2, image=self.image) self.image.published = datetime.now() - timedelta(settings.IOTD_SUBMISSION_WINDOW_DAYS) - timedelta(hours=1) self.image.save() IotdService().update_top_pick_nomination_archive() # Badge is present response = self.client.get(reverse_lazy('image_detail', args=(self.image.get_id(),))) self.assertContains(response, 'top-pick-nomination-badge') # Image is in Top Picks Nominations page response = self.client.get(reverse_lazy('top_pick_nominations')) self.assertContains(response, self.image.title) cache.clear() # Image cannot be submitted again with self.assertRaisesRegex(ValidationError, "already exists"): IotdSubmission.objects.create( submitter=self.submitter_1, image=self.image) # Test max daily with self.assertRaisesRegex(ValidationError, "already submitted.*today"): image2 = Image.objects.create(user=self.user) with self.settings(IOTD_SUBMISSION_MAX_PER_DAY=1): IotdSubmission.objects.create( submitter=self.submitter_1, image=image2)
def test_get_top_pick_nominations_has_no_submission(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdService().update_top_pick_nomination_archive() nominations = IotdService().get_top_pick_nominations() self.assertEquals(0, nominations.count())
def test_is_top_pick_false_only_one_vote_after_cutoff(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdService().update_top_pick_archive() self.assertFalse(IotdService().is_top_pick(image))
def test_judge_cannot_select_now_reason_already_2_scheduled(self, now): now.return_value = datetime.now() iotd = self._create_iotd(date=date.today() + timedelta(1)) self._create_iotd(judge=iotd.judge, date=date.today() + timedelta(2)) reason = IotdService().judge_cannot_select_now_reason(iotd.judge) self.assertIsNotNone(reason) self.assertTrue('there are already 2 scheduled IOTDs' in reason) self.assertEquals( IotdService().get_next_available_selection_time_for_judge( iotd.judge), DateTimeService.next_midnight())
def test_is_top_pick_nomination_false(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') image.published = datetime.now() - timedelta( days=settings.IOTD_SUBMISSION_WINDOW_DAYS) image.save() IotdService().update_top_pick_nomination_archive() self.assertFalse(IotdService().is_top_pick_nomination(image))
def test_is_top_pick_nomination_true_only_one_submission_before_cutoff( self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) image.published = settings.IOTD_MULTIPLE_PROMOTIONS_REQUIREMENT_START - timedelta( minutes=1) image.save() IotdService().update_top_pick_nomination_archive() self.assertTrue(IotdService().is_top_pick_nomination(image))
def test_is_top_picks_false_already_iotd(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image) image.published = datetime.now() - timedelta( days=settings.IOTD_REVIEW_WINDOW_DAYS) image.save() IotdService().update_top_pick_archive() self.assertFalse(IotdService().is_top_pick(image))
def test_get_top_picks_is_current_iotd(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image) IotdService().update_top_pick_archive() top_picks = IotdService().get_top_picks() self.assertEquals(0, top_picks.count())
def test_get_judgement_queue_current_iotd(self): uploader = Generators.user() submitter = Generators.user(groups=['iotd_submitters']) submitter2 = Generators.user(groups=['iotd_submitters']) reviewer = Generators.user(groups=['iotd_reviewers']) reviewer2 = Generators.user(groups=['iotd_reviewers']) judge = Generators.user(groups=['iotd_judges']) Generators.premium_subscription(uploader, "AstroBin Ultimate 2020+") image = Generators.image(user=uploader) image.designated_iotd_submitters.add(submitter, submitter2) image.designated_iotd_reviewers.add(reviewer, reviewer2) IotdSubmission.objects.create(submitter=submitter, image=image) IotdSubmission.objects.create(submitter=submitter2, image=image) IotdVote.objects.create(reviewer=reviewer, image=image) IotdVote.objects.create(reviewer=reviewer2, image=image) Iotd.objects.create(judge=judge, image=image, date=date.today()) self.assertEquals(0, len(IotdService().get_judgement_queue()))
def test_get_judgement_queue_too_long_ago(self): uploader = Generators.user() submitter = Generators.user(groups=['iotd_submitters']) submitter2 = Generators.user(groups=['iotd_submitters']) reviewer = Generators.user(groups=['iotd_reviewers']) reviewer2 = Generators.user(groups=['iotd_reviewers']) Generators.premium_subscription(uploader, "AstroBin Ultimate 2020+") image = Generators.image(user=uploader) image.designated_iotd_submitters.add(submitter, submitter2) image.designated_iotd_reviewers.add(reviewer, reviewer2) IotdSubmission.objects.create(submitter=submitter, image=image) IotdSubmission.objects.create(submitter=submitter2, image=image) vote = IotdVote.objects.create(reviewer=reviewer, image=image) vote2 = IotdVote.objects.create(reviewer=reviewer2, image=image) vote.date = datetime.now() - timedelta( days=settings.IOTD_JUDGEMENT_WINDOW_DAYS + 1) vote.save() vote2.date = datetime.now() - timedelta( days=settings.IOTD_JUDGEMENT_WINDOW_DAYS + 1) vote2.save() self.assertEquals(0, len(IotdService().get_judgement_queue()))
def test_top_picks_acquisition_type_filter(self): IotdSubmission.objects.create(submitter=self.submitter, image=self.image) IotdSubmission.objects.create(submitter=self.submitter2, image=self.image) IotdVote.objects.create(reviewer=self.reviewer, image=self.image) IotdVote.objects.create(reviewer=self.reviewer2, image=self.image) self.image.published = datetime.now() - timedelta( settings.IOTD_REVIEW_WINDOW_DAYS) - timedelta(hours=1) self.image.save() IotdService().update_top_pick_archive() response = self.client.get(reverse_lazy('top_picks')) self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=regular') self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=eaa') self.assertNotContains(response, self.image.title) self.image.acquisition_type = 'EAA' self.image.save(keep_deleted=True) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=eaa') self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=regular') self.assertNotContains(response, self.image.title) self.image.acquisition_type = 'LUCKY' self.image.save(keep_deleted=True) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=lucky') self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=regular') self.assertNotContains(response, self.image.title) self.image.acquisition_type = 'DRAWING' self.image.save(keep_deleted=True) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=drawing') self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=regular') self.assertNotContains(response, self.image.title) self.image.acquisition_type = 'OTHER' self.image.save(keep_deleted=True) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=other') self.assertContains(response, self.image.title) response = self.client.get( reverse_lazy('top_picks') + '?acquisition_type=regular') self.assertNotContains(response, self.image.title)
def test_get_review_queue_submitted_two_days_ago(self): uploader = Generators.user() submitter = Generators.user(groups=['iotd_submitters']) submitter2 = Generators.user(groups=['iotd_submitters']) reviewer = Generators.user(groups=['iotd_reviewers']) Generators.premium_subscription(uploader, "AstroBin Ultimate 2020+") image = Generators.image(user=uploader) image.designated_iotd_submitters.add(submitter, submitter2) image.designated_iotd_reviewers.add(reviewer) submission = IotdSubmission.objects.create( submitter=submitter, image=image, ) IotdSubmission.objects.create( submitter=submitter2, image=image, ) submission.date = datetime.now() - timedelta(days=2) submission.save() self.assertEquals(1, len(IotdService().get_review_queue(reviewer)))
def test_get_review_queue_future_iotd(self): uploader = Generators.user() submitter = Generators.user(groups=['iotd_submitters']) submitter2 = Generators.user(groups=['iotd_submitters']) reviewer1 = Generators.user(groups=['iotd_reviewers']) reviewer2 = Generators.user(groups=['iotd_reviewers']) reviewer3 = Generators.user(groups=['iotd_reviewers']) judge = Generators.user(groups=['iotd_judges']) Generators.premium_subscription(uploader, "AstroBin Ultimate 2020+") image = Generators.image(user=uploader) image.designated_iotd_submitters.add(submitter, submitter2) image.designated_iotd_reviewers.add(reviewer3) IotdSubmission.objects.create(submitter=submitter, image=image) IotdSubmission.objects.create(submitter=submitter2, image=image) IotdVote.objects.create(reviewer=reviewer1, image=image) IotdVote.objects.create(reviewer=reviewer2, image=image) Iotd.objects.create(date=date.today() + timedelta(days=1), judge=judge, image=image) self.assertEquals(1, len(IotdService().get_review_queue(reviewer3)))
def test_get_top_pick_nominations_only_one_submission_before_cutoff(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) image.published = settings.IOTD_MULTIPLE_PROMOTIONS_REQUIREMENT_START - timedelta( hours=1) image.save() IotdService().update_top_pick_nomination_archive() nominations = IotdService().get_top_pick_nominations() self.assertEquals(1, nominations.count())
def test_get_top_pick_nominations_only_one_submission_after_cutoff(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) image.published = datetime.now() - timedelta( settings.IOTD_SUBMISSION_WINDOW_DAYS) - timedelta(hours=1) image.save() IotdService().update_top_pick_nomination_archive() nominations = IotdService().get_top_pick_nominations() self.assertEquals(0, nominations.count())
def test_get_top_picks_not_enough_votes_before_cutoff(self): top_pick_image = Generators.image() Generators.image() Generators.premium_subscription(top_pick_image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=top_pick_image) IotdGenerators.submission(image=top_pick_image) IotdGenerators.vote(image=top_pick_image) top_pick_image.published = settings.IOTD_MULTIPLE_PROMOTIONS_REQUIREMENT_START - timedelta( hours=1) top_pick_image.save() IotdService().update_top_pick_archive() self.assertEquals(1, IotdService().get_top_picks().count())
def test_is_iotd_false(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) self.assertFalse(IotdService().is_iotd(image))
def test_get_top_picks_still_in_queue(self): top_pick_image = Generators.image() Generators.image() Generators.premium_subscription(top_pick_image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=top_pick_image) IotdGenerators.vote(image=top_pick_image) top_pick_image.published = datetime.now() - timedelta( settings.IOTD_REVIEW_WINDOW_DAYS) + timedelta(hours=1) top_pick_image.save() IotdService().update_top_pick_archive() top_picks = IotdService().get_top_picks() self.assertEquals(0, top_picks.count())
def test_is_iotd_false_future(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image, date=date.today() + timedelta(days=1)) self.assertFalse(IotdService().is_iotd(image))
def test_get_submission_queue_spam(self): user = Generators.user() Generators.premium_subscription(user, "AstroBin Ultimate 2020+") submitter = Generators.user(groups=['iotd_submitters']) image = Generators.image(user=user) image.designated_iotd_submitters.add(submitter) self.assertEquals(1, len(IotdService().get_submission_queue(submitter)))
def test_get_top_pick_nominations_corrupted(self): image = Generators.image(corrupted=True) Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) nominations = IotdService().get_top_pick_nominations() self.assertEquals(0, nominations.count())
def test_get_top_picks_is_future_iotd(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image, date=date.today() + timedelta(days=1)) image.published = datetime.now() - timedelta( settings.IOTD_REVIEW_WINDOW_DAYS) - timedelta(hours=1) image.save() IotdService().update_top_pick_archive() top_picks = IotdService().get_top_picks() self.assertEquals(1, top_picks.count()) self.assertEquals(image, top_picks.first().image)
def test_get_top_picks_is_past_iotd(self): image = Generators.image() Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image, date=date.today() - timedelta(days=1)) top_picks = IotdService().get_top_picks() self.assertEquals(0, top_picks.count())
def test_get_top_picks_corrupted(self): top_pick_image = Generators.image(corrupted=True) Generators.image() Generators.premium_subscription(top_pick_image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=top_pick_image) IotdGenerators.vote(image=top_pick_image) top_picks = IotdService().get_top_picks() self.assertEquals(0, top_picks.count())
def test_is_iotd_false_excluded(self): image = Generators.image() Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+') IotdGenerators.submission(image=image) IotdGenerators.submission(image=image) IotdGenerators.vote(image=image) IotdGenerators.iotd(image=image) image.user.userprofile.exclude_from_competitions = True image.user.userprofile.save() self.assertFalse(IotdService().is_iotd(image))
def test_get_submission_queue_gear_type(self): user = Generators.user() Generators.premium_subscription(user, "AstroBin Ultimate 2020+") submitter = Generators.user(groups=['iotd_submitters']) image = Generators.image(user=user) image.designated_iotd_submitters.add(submitter) image.subject_type = SubjectType.GEAR image.save() self.assertEquals(0, len(IotdService().get_submission_queue(submitter)))
def test_get_submission_queue_dismissed(self): user = Generators.user() Generators.premium_subscription(user, "AstroBin Ultimate 2020+") submitter = Generators.user(groups=['iotd_submitters']) image = Generators.image(user=user) image.designated_iotd_submitters.add(submitter) IotdDismissedImage.objects.create(user=submitter, image=image) self.assertEquals(0, len(IotdService().get_submission_queue(submitter)))