Ejemplo n.º 1
0
 def test_userspecifics_needing_review_are_flagged(self):
     self.review.needs_review = False
     self.review.last_studied = past_time(5)
     self.review.save()
     all_srs()
     review = UserSpecific.objects.get(pk=self.review.id)
     self.assertTrue(review.needs_review)
Ejemplo n.º 2
0
    def _update_calculated_fields(self, serializer):
        old_instance = serializer.instance

        user = old_instance.user

        if old_instance.on_vacation and not serializer.validated_data.get(
            "on_vacation"
        ):
            old_instance.return_from_vacation()
            all_srs(user)

        if not old_instance.on_vacation and serializer.validated_data.get(
            "on_vacation"
        ):
            old_instance.begin_vacation()

        if not old_instance.follow_me and serializer.validated_data.get(
            "follow_me"
        ):
            start_following_wanikani(user)

        # Since if we have gotten this far, we know that API key is valid, we set it here.
        api_validated = serializer.validated_data.get("api_key_v2", None)
        if api_validated:
            serializer.validated_data["api_valid"] = True

        return serializer
Ejemplo n.º 3
0
    def test_user_returns_from_vacation_correctly_increments_review_timestamps(
            self):
        now = timezone.now()
        two_hours_ago = now - timezone.timedelta(hours=2)
        two_hours_from_now = now + timezone.timedelta(hours=2)
        four_hours_from_now = now + timezone.timedelta(hours=4)

        self.user.profile.on_vacation = True

        # Create review that should be reviewed never again, but got reviewed 2 hours ago.
        review = create_review(create_vocab("wazoop"), self.user)
        review.burned = True
        review.next_review_date = None
        review.last_studied = two_hours_ago
        review.save()

        self.user.profile.vacation_date = two_hours_ago
        self.user.profile.save()
        self.review.last_studied = two_hours_ago
        self.review.next_review_date = two_hours_from_now

        self.review.save()
        previously_studied = self.review.last_studied

        self.user.profile.return_from_vacation()
        all_srs(self.user)

        self.review.refresh_from_db()
        self.assertNotEqual(self.review.last_studied, previously_studied)

        self.assertAlmostEqual(
            self.review.next_review_date,
            four_hours_from_now,
            delta=timezone.timedelta(minutes=15),
        )
        self.assertAlmostEqual(self.review.last_studied,
                               now,
                               delta=timezone.timedelta(minutes=15))
        self.assertAlmostEqual(
            review.last_studied,
            two_hours_ago,
            delta=timezone.timedelta(minutes=15),
        )
        self.assertAlmostEqual(review.next_review_date, None)
Ejemplo n.º 4
0
    def test_users_who_are_on_vacation_are_ignored_by_all_srs_algorithm(self):
        self.review.last_studied = past_time(10)
        self.review.streak = 1
        self.review.needs_review = False
        self.review.save()

        reviews_affected = all_srs()
        self.assertEqual(reviews_affected, 1)

        self.review.last_studied = past_time(10)
        self.review.streak = 1
        self.review.needs_review = False
        self.review.save()

        self.user.profile.on_vacation = True
        self.user.profile.save()

        reviews_affected = all_srs()
        self.assertEqual(reviews_affected, 0)
Ejemplo n.º 5
0
 def srs(self, request):
     all_srs(request.user)
     new_review_count = get_users_current_reviews(request.user).count()
     return Response({"review_count": new_review_count})