예제 #1
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.iotd(image=image, date=date.today() + timedelta(days=1))

        top_picks = IotdService().get_top_picks()

        self.assertEquals(1, top_picks.count())
        self.assertEquals(image, top_picks.first())
예제 #2
0
    def test_get_iotds_corrupted(self):
        iotd_image = Generators.image(corrupted=True)
        Generators.image()
        Generators.premium_subscription(iotd_image.user,
                                        'AstroBin Ultimate 2020+')

        IotdGenerators.submission(image=iotd_image)
        IotdGenerators.vote(image=iotd_image)
        IotdGenerators.iotd(image=iotd_image)

        iotds = IotdService().get_iotds()

        self.assertEquals(0, iotds.count())
예제 #3
0
    def test_get_top_pick_nominations_has_vote(self):
        image = Generators.image()
        Generators.image()
        Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+')

        IotdGenerators.submission(image=image)
        IotdGenerators.vote(image=image)

        IotdService().update_top_pick_nomination_archive()

        nominations = IotdService().get_top_pick_nominations()

        self.assertEquals(0, nominations.count())
예제 #4
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))
예제 #5
0
    def test_get_submission_queue_published_too_long_ago(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.published = datetime.now() - timedelta(
            settings.IOTD_SUBMISSION_WINDOW_DAYS) - timedelta(hours=1)
        image.save()

        self.assertEquals(0,
                          len(IotdService().get_submission_queue(submitter)))
    def setUp(self):
        self.image = Generators.image()
        Generators.premium_subscription(self.image.user, "AstroBin Lite")

        self.image.user.userprofile.allow_retailer_integration = False
        self.image.user.userprofile.save()

        telescope = Generators.telescope()
        equipment_brand_listing = EquipmentGenerators.equipment_brand_listing()
        telescope.equipment_brand_listings.add(equipment_brand_listing)

        self.image.user.userprofile.telescopes.add(telescope)
        self.image.imaging_telescopes.add(telescope)
예제 #7
0
    def test_get_top_picks(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_picks = IotdService().get_top_picks()

        self.assertEquals(1, top_picks.count())
        self.assertEquals(top_pick_image, top_picks.first())
예제 #8
0
    def test_is_top_pick_nomination_true_future_top_pick(self):
        image = Generators.image()
        Generators.premium_subscription(image.user, 'AstroBin Ultimate 2020+')
        IotdGenerators.submission(image=image)
        IotdGenerators.submission(image=image)

        image.published = datetime.now() - timedelta(
            days=settings.IOTD_SUBMISSION_WINDOW_DAYS)
        image.save()

        IotdService().update_top_pick_nomination_archive()

        self.assertTrue(IotdService().is_top_pick_nomination(image))
예제 #9
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())
예제 #10
0
    def test_get_iotds_future_date(self):
        iotd_image = Generators.image()
        Generators.image()
        Generators.premium_subscription(iotd_image.user,
                                        'AstroBin Ultimate 2020+')

        IotdGenerators.submission(image=iotd_image)
        IotdGenerators.vote(image=iotd_image)
        IotdGenerators.iotd(image=iotd_image,
                            date=date.today() + timedelta(days=1))

        iotds = IotdService().get_iotds()

        self.assertEquals(0, iotds.count())
예제 #11
0
    def test_get_review_queue_not_designated(self):
        uploader = Generators.user()
        submitter = 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)
        image.designated_iotd_reviewers.remove(reviewer)

        IotdSubmission.objects.create(submitter=submitter, image=image)

        self.assertEquals(0, len(IotdService().get_review_queue(reviewer)))
예제 #12
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))
예제 #13
0
    def test_vote_model_submission_must_be_within_window(self):
        Generators.premium_subscription(self.image.user, "AstroBin Ultimate 2020+")
        submission_1 = IotdSubmission.objects.create(
            submitter=self.submitter_1,
            image=self.image)

        IotdSubmission.objects.filter(pk=submission_1.pk).update(
            date= \
                datetime.now() - \
                timedelta(settings.IOTD_REVIEW_WINDOW_DAYS + 1))

        with self.assertRaisesRegex(ValidationError, "in the submission queue for more than"):
            IotdVote.objects.create(
                reviewer=self.reviewer_1,
                image=submission_1.image)
예제 #14
0
    def test_submission_model_can_submit_image_by_judge(self):
        self.image.user = self.judge_1
        self.image.save(keep_deleted=True)

        Generators.premium_subscription(self.judge_1, "AstroBin Ultimate 2020+")

        try:
            submission = IotdSubmission.objects.create(
                submitter=self.submitter_1,
                image=self.image)
        except ValidationError as e:
            self.fail(e)

        self.assertEqual(submission.submitter, self.submitter_1)
        self.assertEqual(submission.image, self.image)
예제 #15
0
    def test_vote_model_cannot_vote_own_image(self):
        Generators.premium_subscription(self.image.user, "AstroBin Ultimate 2020+")

        submission_1 = IotdSubmission.objects.create(
            submitter=self.submitter_1,
            image=self.image)

        self.image.user = self.reviewer_1
        self.image.save(keep_deleted=True)
        with self.assertRaisesRegex(ValidationError, "your own image"):
            IotdVote.objects.create(
                reviewer=self.reviewer_1,
                image=submission_1.image)
        self.image.user = self.user
        self.image.save(keep_deleted=True)
예제 #16
0
    def test_lite_autorenew(self, retrieve_primary_thumbnails):
        user = Generators.user()
        self.client.login(username=user.username, password="******")
        Generators.premium_subscription(user, "AstroBin Lite (autorenew)")

        response = self.client.get(reverse('image_detail', kwargs={'id': self.image.get_id()}))
        self.assertNotContains(response, "dropdown retailer-affiliate-products-lite")
        self.assertContains(response, "retailer-affiliate-cart-link")

        user.userprofile.allow_retailer_integration = False
        user.userprofile.save()

        response = self.client.get(reverse('image_detail', kwargs={'id': self.image.get_id()}))
        self.assertNotContains(response, "dropdown retailer-affiliate-products-lite")
        self.assertNotContains(response, "retailer-affiliate-cart-link")
예제 #17
0
    def test_get_submission_queue_already_submitted_yesterday(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)

        IotdSubmission.objects.create(submitter=submitter, image=image)

        image.published = datetime.now() - timedelta(hours=24)
        image.save()

        self.assertEquals(0,
                          len(IotdService().get_submission_queue(submitter)))
예제 #18
0
    def test_vote_model_image_must_be_public(self):
        Generators.premium_subscription(self.image.user, "AstroBin Ultimate 2020+")

        submission_1 = IotdSubmission.objects.create(
            submitter=self.submitter_1,
            image=self.image)

        self.image.is_wip = True
        self.image.save(keep_deleted=True)
        with self.assertRaisesRegex(ValidationError, "staging area"):
            IotdVote.objects.create(
                reviewer=self.reviewer_1,
                image=submission_1.image)
        self.image.is_wip = False
        self.image.save(keep_deleted=True)
예제 #19
0
    def test_submit_6_mo_ultimate(self):
        user = User.objects.create_user('test', '*****@*****.**', 'password')
        premium = Generators.premium_subscription(user, 'AstroBin Premium')
        premium.expires = datetime(2020, 2, 16)
        premium.save()

        self.client.login(username='******', password='******')

        response = self.client.post(
            reverse('astrobin_apps_premium.data_loss_compensation_request'),
            {
                'requested_compensation': '6_MO_ULTIMATE'
            })

        self.assertRedirects(
            response,
            reverse('astrobin_apps_premium.data_loss_compensation_request_success'),
            status_code=302,
            target_status_code=200)

        compensation_request = DataLossCompensationRequest.objects.get(user=user)
        self.assertEquals(compensation_request.requested_compensation, '6_MO_ULTIMATE')

        ultimate = get_object_or_None(UserSubscription, user=user, subscription__name='AstroBin Ultimate 2020+')

        self.assertIsNotNone(ultimate)
        self.assertTrue(ultimate.active)
        self.assertTrue(ultimate.cancelled)
        self.assertTrue(ultimate.expires > date.today() + timedelta(days=179))
        self.assertTrue(ultimate.expires < date.today() + timedelta(days=181))

        self.assertTrue(is_ultimate_2020(user))
예제 #20
0
 def test_user_preferences_allow_astronomy_ads_ultimate_2020(self):
     self.client.login(username='******', password='******')
     us = Generators.premium_subscription(self.user,
                                          "AstroBin Ultimate 2020+")
     self.assertNotContains(
         self.client.get(reverse('profile_edit_preferences')),
         'name="allow_astronomy_ads" disabled')
예제 #21
0
    def test_user_page_subscription_lite_2020(self):
        image = Generators.image()
        image.user = self.user
        image.save()

        us = Generators.premium_subscription(self.user, "AstroBin Lite 2020+")

        self.client.login(username='******', password='******')

        response = self.client.get(reverse('user_page', args=('user', )))

        self.assertContains(response, "<h4>Subscription</h4>", html=True)
        self.assertContains(
            response,
            "<strong data-test='subscription-type'>AstroBin Lite</strong>",
            html=True)
        self.assertContains(
            response,
            "<strong data-test='expiration-date'>" +
            "<abbr class='timestamp' data-epoch='%s000'>...</abbr>" %
            us.expires.strftime('%s') + "</strong>",
            html=True)
        self.assertContains(response,
                            "<strong data-test='images-used'>0 / 123</strong>",
                            html=True)
예제 #22
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())
예제 #23
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())
예제 #24
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())
예제 #25
0
    def test_get_review_queue_not_enough_submissions_after_cutoff(self):
        uploader = Generators.user()
        submitter = 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)
        image.designated_iotd_reviewers.add(reviewer)

        IotdSubmission.objects.create(submitter=submitter, image=image)

        image.published = settings.IOTD_MULTIPLE_PROMOTIONS_REQUIREMENT_START + timedelta(
            hours=1)

        self.assertEquals(0, len(IotdService().get_review_queue(reviewer)))
예제 #26
0
    def test_do_not_mark_as_pending_due_to_membership(self, get_scores):
        # Index:             NOT OK
        # Membership:            OK
        # Approved comments: NOT OK
        get_scores.return_value = {'user_scores_index': 0}

        image = Generators.image()
        author = Generators.user()
        Generators.premium_subscription(author, "AstroBin Premium 2020+")

        comment = NestedCommentsGenerators.comment(
            author=author,
            content_type=ContentType.objects.get_for_model(Image),
            oject_id=image.id,
        )

        self.assertIsNone(comment.pending_moderation)
예제 #27
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())
예제 #28
0
    def test_eligible(self):
        user = User.objects.create_user('test', '*****@*****.**', 'password')
        premium = Generators.premium_subscription(user, 'AstroBin Premium')
        premium.expires = datetime(2020, 2, 16)
        premium.save()

        self.client.login(username='******', password='******')
        response = self.client.get(reverse('astrobin_apps_premium.data_loss_compensation_request'))
        self.assertEquals(response.status_code, 200)
예제 #29
0
    def test_vote_model_can_vote_image_by_judge(self):
        Generators.premium_subscription(self.image.user, "AstroBin Ultimate 2020+")

        IotdSubmission.objects.create(
            submitter=self.submitter_1,
            image=self.image)

        self.image.user = self.judge_1
        self.image.save(keep_deleted=True)
        Generators.premium_subscription(self.image.user, "AstroBin Ultimate 2020+")

        try:
            IotdVote.objects.create(
                reviewer=self.reviewer_1,
                image=self.image)
        except ValidationError as e:
            self.fail(e)
        self.image.user = self.user
        self.image.save(keep_deleted=True)
예제 #30
0
    def test_do_not_mark_as_pending_due_to_membership(self, get_scores):
        # Index:             NOT OK
        # Membership:            OK
        # Approved comments: NOT OK
        # Content owner:     NOT OK
        # Auto approve:      NOT OK

        get_scores.return_value = {'user_scores_index': 0}

        image = Generators.image()
        author = Generators.user()
        Generators.premium_subscription(author, "AstroBin Premium 2020+")

        comment = NestedCommentsGenerators.comment(
            author=author,
            target=image,
        )

        self.assertIsNone(comment.pending_moderation)