def test_syncing_vocabulary_pulls_srs_level_successfully(self): mock_user_response_v2() mock_assignments_with_one_assignment() mock_study_materials() Syncer.factory(self.user.profile).sync_with_wk() newly_synced_review = UserSpecific.objects.get( user=self.user, vocabulary__meaning=self.v.meaning) self.assertEqual(newly_synced_review.wanikani_srs_numeric, 4)
def test_thing(self): self.client.force_login(self.user) # Now patch it to a valid key, which should set it to true. mock_user_response_v2() response = self.client.patch( reverse("api:profile-detail", args=(self.user.profile.id, )), data={"api_key_v2": "ANYTHING"}, ) self.assertTrue(response.data["api_valid"])
def test_synonyms_are_ported_in_v2(self): mock_user_response_v2() mock_assignments_with_one_assignment() mock_study_materials() syncer = WanikaniUserSyncerV2(self.user.profile) syncer.sync_with_wk(full_sync=False) review = UserSpecific.objects.filter(user=self.user)[0] assert review.meaning_note is not None assert review.meaning_synonyms.count() == 3 assert "young lady" in review.synonyms_list()
def test_registration(self): mock_subjects_v2() mock_assignments_with_one_assignment() mock_user_response_v2() mock_study_materials() response = self.client.post( reverse("api:auth:user-create"), data={ "username": "******", "password": "******", "api_key_v2": constants.API_KEY_V2, "email": "*****@*****.**", }, ) assert response.status_code == 201
def test_full_sync_of_user_on_v2(self): # Setup mocks for user response and full sync (with a single assignment) mock_user_response_v2() mock_assignments_with_one_assignment() mock_study_materials() mock_subjects_v2() self.user.profile.api_key_v2 = "whatever" self.user.profile.save() syncer = WanikaniUserSyncerV2(self.user.profile) syncer.sync_with_wk(full_sync=True) reviews = get_users_current_reviews(self.user) assert reviews.count() == 1
def test_creating_new_synonyms_for_users_who_arent_being_followed(self): # Mock synonyms response for V2. mock_user_response_v2() mock_subjects_v2() mock_assignments_with_one_assignment() mock_study_materials() # sync_unlocked_vocab_with_wk(self.user) self.user.profile.follow_me = False self.user.profile.save() sync_with_wk(self.user.id) synonyms_list = self.review.synonyms_list() self.assertIn("young girl", synonyms_list) self.assertIn("young lady", synonyms_list) self.assertIn("young miss", synonyms_list)
def test_adding_a_level_to_reset_command_only_resets_levels_above_or_equal_togiven( self ): self.client.force_login(user=self.user) v = create_vocab("test") create_reading(v, "test", "test", 3) create_review(v, self.user) mock_user_response_v2() self.user.profile.unlocked_levels.get_or_create(level=2) response = self.client.get((reverse("api:review-current"))) self.assertEqual(response.data["count"], 2) self.assertListEqual(self.user.profile.unlocked_levels_list(), [5, 2]) self.client.post(reverse("api:user-reset"), data={"level": 3}) response = self.client.get((reverse("api:review-current"))) self.assertEqual(response.data["count"], 0) self.assertListEqual(self.user.profile.unlocked_levels_list(), [2])
def test_users_not_following_wanikani_still_get_vocab_unlocked_when_they_unlock_a_level( self): mock_user_response_v2() mock_assignments_with_one_assignment() mock_study_materials() mock_subjects_v2() self.user.profile.follow_me = False self.user.profile.api_key_v2 = "whatever" # Clear out all reviews so a level unlock works. UserSpecific.objects.filter(user=self.user).delete() syncer = WanikaniUserSyncerV2(self.user.profile) reviews = get_users_current_reviews(self.user) assert reviews.count() == 0 new_review_count, unlocked_count, locked_count = syncer.unlock_vocab( levels=[1]) assert new_review_count == 1 reviews = get_users_lessons(self.user) assert reviews.count() == 1
def test_sending_put_to_profile_correctly_updates_information(self): self.client.force_login(self.user) mock_user_response_v2() response = self.client.get(reverse("api:profile-list")) data = response.data id = data["results"][0]["id"] request = data["results"][0] request["on_vacation"] = True response = self.client.put( reverse("api:profile-detail", args=(id, )), data=request, format="json", ) assert response.status_code == 200 self.user.refresh_from_db() self.user.profile.refresh_from_db() assert self.user.profile.vacation_date is not None data = response.data assert data is not None
def test_user_that_is_created_who_has_no_vocab_at_current_level_also_gets_previous_level_unlocked( self): # Create a user who is at level 2 on Wanikani, but has no level 2 vocab unlocked, only level 1 vocab. fake_username = "******" fake_api_key = "fake_api_key" mock_user_response_v2() mock_assignments_with_no_assignments() mock_assignments_with_one_assignment() mock_study_materials() self.client.post( reverse("api:auth:user-create"), data={ "username": fake_username, "password": "******", "api_key_v2": fake_api_key, "email": "*****@*****.**", }, ) user_profile = Profile.objects.get(user__username=fake_username) assert len(user_profile.unlocked_levels_list()) == 2
def test_enable_follow_me_syncs_user_immediately(self): # Given mock_user_response_v2() mock_assignments_with_no_assignments() self.client.force_login(self.user) self.user.profile.follow_me = False self.user.profile.save() response = self.client.get(reverse("api:profile-list")) data = response.data id = data["results"][0]["id"] # When self.client.patch( reverse("api:profile-detail", args=(id, )), data={"follow_me": True}, format="json", ) # Then self.user.refresh_from_db() self.user.profile.refresh_from_db() assert self.user.profile.follow_me is True
def test_reset_command_only_resets_levels_above_requested_level(self): self.client.force_login(user=self.user) v = create_vocab("test") create_reading(v, "test", "test", 2) create_review(v, self.user) # User has unlocked levels 2 and 5 mock_user_response_v2() self.user.profile.unlocked_levels.get_or_create(level=2) response = self.client.get((reverse("api:review-current"))) self.assertEqual(response.data["count"], 2) self.assertListEqual(self.user.profile.unlocked_levels_list(), [5, 2]) # Reset to level 3, should re-lock level 5 self.client.post(reverse("api:user-reset"), data={"level": 3}) response = self.client.get((reverse("api:review-current"))) self.assertEqual(response.data["count"], 1) self.assertListEqual(self.user.profile.unlocked_levels_list(), [2]) # Ensure reset to level 2 keeps reviews at that level self.client.post(reverse("api:user-reset"), data={"level": 2}) response = self.client.get((reverse("api:review-current"))) self.assertEqual(response.data["count"], 1) self.assertListEqual(self.user.profile.unlocked_levels_list(), [2])