Пример #1
0
    def setUpTestData(cls):
        cls.user_with_auth = MoodyUtil.create_user(username='******')
        cls.user_without_auth = MoodyUtil.create_user(
            username='******')
        cls.spotify_auth = MoodyUtil.create_spotify_auth(cls.user_with_auth)

        cls.factory = RequestFactory()
Пример #2
0
 def setUpTestData(cls):
     cls.user = MoodyUtil.create_user()
     cls.other_user = MoodyUtil.create_user(username='******')
     cls.url = reverse('spotify:spotify-auth-callback')
     cls.success_url = reverse('spotify:export')
     cls.failure_url = reverse('spotify:spotify-auth-failure')
     cls.state = 'state-key'
Пример #3
0
    def setUpTestData(cls):
        cls.emotion = Emotion.objects.get(name=Emotion.HAPPY)
        cls.test_playlist_name = 'test-playlist'
        cls.user = MoodyUtil.create_user()
        cls.user_with_no_auth = MoodyUtil.create_user(username='******')
        cls.url = reverse('spotify:export')

        cls.spotify_auth = MoodyUtil.create_spotify_auth(cls.user)
Пример #4
0
    def setUpTestData(cls):
        cls.user_with_profile = MoodyUtil.create_user()
        cls.user_without_profile = MoodyUtil.create_user(
            username='******')
        cls.url = reverse('accounts:user-profile')

        cls.user_profile = MoodyUtil.create_user_profile(
            cls.user_with_profile, has_rejected_spotify_auth=False)
Пример #5
0
    def test_happy_path(self, mock_update_top_artist_task):
        user_1 = MoodyUtil.create_user(username='******')
        user_2 = MoodyUtil.create_user(username='******')
        MoodyUtil.create_spotify_auth(user_1, spotify_user_id='test_user_1')
        MoodyUtil.create_spotify_auth(user_2, spotify_user_id='test_user_2')

        RefreshTopArtistsFromSpotifyTask().run()

        self.assertEqual(mock_update_top_artist_task.call_count, 2)
Пример #6
0
    def test_happy_path(self):
        user = MoodyUtil.create_user(email='*****@*****.**')
        uid = urlsafe_base64_encode(force_bytes(user.pk))
        token = PasswordResetTokenGenerator().make_token(user)

        url = reverse('accounts:password-reset-confirm',
                      kwargs={
                          'uidb64': uid,
                          'token': token
                      })

        initial_resp = self.client.get(url)
        reset_url = initial_resp['Location']

        expected_redirect = reverse('accounts:password-reset-complete')
        data = {'new_password1': 'password', 'new_password2': 'password'}

        resp = self.client.post(reset_url, data=data)

        self.assertRedirects(resp,
                             expected_redirect,
                             fetch_redirect_response=False)

        # Test password updated OK
        user.refresh_from_db()
        updated_user = authenticate(username=user.username,
                                    password=data['new_password1'])

        self.assertEqual(user.pk, updated_user.pk)
Пример #7
0
    def test_post_save_user_creates_all_user_emotion_records(self):
        user = MoodyUtil.create_user(username='******')

        existing_emotions = Emotion.objects.all()

        for emotion in existing_emotions:
            self.assertTrue(user.useremotion_set.filter(emotion__name=emotion.name).exists())
Пример #8
0
    def test_updating_user_with_existing_username_is_rejected(self):
        user = MoodyUtil.create_user()
        other_user = MoodyUtil.create_user(username='******')
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        request_data = {'username': other_user.username}

        resp = self.client.post(self.url, data=request_data)

        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.assertEqual(
            MoodyUser.objects.filter(username=user.username).count(), 1)
        self.assertEqual(
            MoodyUser.objects.filter(username=other_user.username).count(), 1)
        self.assertIn(
            b'This username is already taken. Please choose a different one',
            resp.content)
Пример #9
0
    def test_clean_username_for_taken_username_is_invalid(self):
        user = MoodyUtil.create_user()
        data = {
            'username': user.username,
            'password': '******',
            'confirm_password': '******'
        }

        form = BaseUserForm(data)
        self.assertFalse(form.is_valid())
Пример #10
0
    def setUpTestData(cls):
        cls.user = MoodyUtil.create_user()
        cls.auth = MoodyUtil.create_spotify_auth(cls.user)

        cls.playlist_name = 'new_playlist'
        cls.playlist_id = 'spotify:playlist:id'

        cls.songs = []

        for i in range(30):
            cls.songs.append(MoodyUtil.create_song().code)
Пример #11
0
    def test_happy_path(self, mock_generate_password):
        user = MoodyUtil.create_user()
        password = '******'
        mock_generate_password.return_value = password

        call_command('accounts_recover_user_account', user.username)

        user.refresh_from_db()
        updated_user = authenticate(username=user.username, password=password)

        self.assertEqual(user.pk, updated_user.pk)
Пример #12
0
    def test_authenticated_request_redirects_to_profile_page(self):
        user = MoodyUtil.create_user()
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        expected_redirect = reverse('accounts:profile')
        resp = self.client.get(self.url)

        self.assertRedirects(resp, expected_redirect)

        messages = get_messages_from_response(resp)
        self.assertIn('Your password has been updated!', messages)
Пример #13
0
    def test_updating_user_with_empty_email_deletes_email_value_from_record(
            self):
        user = MoodyUtil.create_user(email='*****@*****.**')
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        request_data = {'username': user.username, 'email': ''}

        resp = self.client.post(self.url, data=request_data, follow=True)
        self.assertEqual(resp.status_code, status.HTTP_200_OK)

        user.refresh_from_db()
        self.assertEqual(user.email, '')
Пример #14
0
    def test_get_request_populates_form_with_initial_user_data(self):
        user = MoodyUtil.create_user(email='*****@*****.**')
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        resp = self.client.get(self.url)

        self.assertEqual(resp.status_code, status.HTTP_200_OK)

        # Ensure that the form's initial data is set to the current data for the user
        self.assertEqual(resp.context['form'].initial['username'],
                         user.username)
        self.assertEqual(resp.context['form'].initial['email'], user.email)
Пример #15
0
    def test_send_email_to_user_raises_exception(self, mock_mail, mock_logger):
        user = MoodyUtil.create_user()
        user.email = '*****@*****.**'
        user.save()

        exc = SMTPException()
        mock_mail.side_effect = exc

        call_command('accounts_recover_user_account', user.username)

        mock_logger.assert_called_with(
            'Unable to send password reset email to user {}'.format(
                user.username),
            output_stream='stderr',
            log_level=logging.ERROR,
            extra={'exc': exc})
Пример #16
0
    def test_creating_user_with_existing_username_is_rejected(self):
        user = MoodyUtil.create_user()
        request_data = {
            'username': user.username,
            'password': '******',
            'confirm_password': '******'
        }

        resp = self.client.post(self.url, data=request_data)

        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.assertEqual(
            MoodyUser.objects.filter(username=user.username).count(), 1)
        self.assertIn(
            b'This username is already taken. Please choose a different one',
            resp.content)
Пример #17
0
    def test_happy_path(self):
        user = MoodyUtil.create_user()
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        update_data = {
            'username': '******',
            'email': '*****@*****.**',
        }

        resp = self.client.post(self.url, data=update_data, follow=True)

        self.assertEqual(resp.status_code, status.HTTP_200_OK)

        user.refresh_from_db()
        self.assertEqual(user.username, update_data['username'])
        self.assertEqual(user.email, update_data['email'])
Пример #18
0
    def test_task_is_only_called_on_create(self, mock_on_commit):
        user = MoodyUtil.create_user()
        data = {
            'user': user,
            'spotify_user_id': 'spotify_user',
            'access_token': 'access_token',
            'refresh_token': 'refresh_token'
        }

        auth = SpotifyAuth.objects.create(**data)

        # Because we wrap the task call in the `on_commit` method using a lambda,
        # we lose the reference to the task call itself because it is being called
        # through an anonymous function. Mocking the `on_commit` call to ensure it
        # has the proper number of calls works just as well for our purposes
        mock_on_commit.assert_called_once()

        auth.save()
        self.assertEqual(mock_on_commit.call_count, 1)
Пример #19
0
    def test_send_email_to_user_happy_path(self, mock_mail,
                                           mock_generate_password):
        user = MoodyUtil.create_user()
        user.email = '*****@*****.**'
        user.save()

        password = '******'
        mock_generate_password.return_value = password

        call_command('accounts_recover_user_account', user.username)

        expected_body = RecoverCommand.email_body.format(
            password=password,
            site='{}{}'.format(settings.SITE_HOSTNAME,
                               reverse('accounts:login')))

        mock_mail.assert_called_once_with(RecoverCommand.email_subject,
                                          expected_body,
                                          settings.SYSTEM_EMAIL_ADDRESS,
                                          [user.email])
Пример #20
0
    def test_non_matching_passwords_are_rejected(self):
        user = MoodyUtil.create_user(email='*****@*****.**')
        uid = urlsafe_base64_encode(force_bytes(user.pk))
        token = PasswordResetTokenGenerator().make_token(user)

        url = reverse('accounts:password-reset-confirm',
                      kwargs={
                          'uidb64': uid,
                          'token': token
                      })

        initial_resp = self.client.get(url)
        reset_url = initial_resp['Location']

        data = {'new_password1': 'foo', 'new_password2': 'bar'}

        resp = self.client.post(reset_url, data=data)

        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.assertIn(SetPasswordForm.error_messages['password_mismatch'],
                      resp.context['form'].errors['new_password2'])
Пример #21
0
    def test_updating_user_with_invalid_username_is_rejected(self):
        user = MoodyUtil.create_user()
        self.client.login(username=user.username,
                          password=MoodyUtil.DEFAULT_USER_PASSWORD)

        request_data = {
            'username': '******',
        }

        old_username = user.username

        resp = self.client.post(self.url, data=request_data)

        user.refresh_from_db()
        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.assertEqual(
            user.username,
            old_username)  # Ensure user username was not updated to bad value
        self.assertIn(
            b'Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters.',
            resp.content)
Пример #22
0
 def setUpTestData(cls):
     cls.user = MoodyUtil.create_user()
     cls.song = MoodyUtil.create_song()
     cls.emotion = Emotion.objects.get(name=Emotion.HAPPY)
Пример #23
0
 def setUp(self):
     self.mixin = ValidateRequestDataMixin()
     self.factory = APIRequestFactory()
     self.user = MoodyUtil.create_user()
Пример #24
0
 def setUpTestData(cls):
     cls.url = reverse('tunes:playlist')
     cls.user = MoodyUtil.create_user()
     cls.song = MoodyUtil.create_song()
     cls.emotion = Emotion.objects.get(name=Emotion.HAPPY)
Пример #25
0
 def test_post_save_admin_does_not_create_user_emotion_records(self):
     user = MoodyUtil.create_user(username='******', is_superuser=True)
     self.assertFalse(user.useremotion_set.all())
Пример #26
0
 def setUpTestData(cls):
     cls.user_without_auth = MoodyUtil.create_user(username='******')
     cls.user_with_auth = MoodyUtil.create_user(username='******')
     cls.url = reverse('spotify:spotify-auth-revoke')
     cls.redirect_url = reverse('accounts:profile')
Пример #27
0
 def setUpTestData(cls):
     cls.url = reverse('accounts:reset-password')
     cls.user = MoodyUtil.create_user(email='*****@*****.**')
Пример #28
0
 def setUpTestData(cls):
     cls.user = MoodyUtil.create_user()
     cls.url = reverse('spotify:suggest')
Пример #29
0
 def setUpTestData(cls):
     cls.user = MoodyUtil.create_user()
     cls.app_url = 'https://moodytuns.vm/accounts/logout/'
     cls.admin_url = 'https://admin.moodytunes.vm/logout/'
Пример #30
0
 def setUpTestData(cls):
     cls.url = reverse('accounts:login')
     cls.user = MoodyUtil.create_user(create_user_profile=True)