예제 #1
0
 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())
예제 #2
0
 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())
예제 #3
0
 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())
예제 #4
0
    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)
예제 #5
0
    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())
예제 #6
0
    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))
예제 #7
0
 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())
예제 #8
0
    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))
예제 #9
0
    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))
예제 #10
0
    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))
예제 #11
0
    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())
예제 #12
0
    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()))
예제 #13
0
    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()))
예제 #14
0
    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)
예제 #15
0
    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)))
예제 #16
0
    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)))
예제 #17
0
    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())
예제 #18
0
    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())
예제 #19
0
    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())
예제 #20
0
    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))
예제 #21
0
    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())
예제 #22
0
    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))
예제 #23
0
    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)))
예제 #24
0
    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())
예제 #25
0
    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)
예제 #26
0
    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())
예제 #27
0
    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())
예제 #28
0
    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))
예제 #29
0
    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)))
예제 #30
0
    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)))