def test_only_show_notifications_user_has_permission_to(self):
        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': []
            }

            form = UserEditForm({}, instance=self.user)

        request_call.assert_called_with(
            'get',
            'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        # It needs a developer account to subscribe to a newsletter
        # So the `announcements` notification is not among the valid choices
        # This isn't really user visible since the user doesn't have
        # the ability to choose newsletters he doesn't have permissions
        # to see.
        assert len(form.fields['notifications'].choices) == 2
        assert form.fields['notifications'].choices[0][0] == 3
        assert form.fields['notifications'].choices[1][0] == 4

        addon_factory(users=[self.user])

        # Clear cache
        del self.user.cached_developer_status

        form = UserEditForm({}, instance=self.user)
        assert len(form.fields['notifications'].choices) == 10
        assert [x[0] for x in form.fields['notifications'].choices
                ] == [3, 4, 5, 6, 7, 9, 10, 11, 12, 8]
 def test_cannot_change_email(self):
     self.user.update(fxa_id='1a2b3c', email='*****@*****.**')
     form = UserEditForm(
         {'email': '*****@*****.**'}, instance=self.user)
     assert form.is_valid()
     form.save()
     assert self.user.reload().email == '*****@*****.**'
    def test_basket_unsubscribe_newsletter(self):
        create_switch('activate-basket-sync')

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok', 'token': '123',
                'newsletters': ['announcements']}

            form = UserEditForm(
                {}, instance=self.user,
                request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get', 'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok', 'token': '123',
                'newsletters': []}
            assert form.is_valid()
            form.save()

        request_call.assert_called_with(
            'post', 'unsubscribe',
            data={
                'newsletters': 'about-addons',
                'email': u'*****@*****.**'},
            token='123')
    def test_basket_unsubscribe_newsletter(self):
        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': ['announcements']
            }

            form = UserEditForm({},
                                instance=self.user,
                                request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get',
            'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': []
            }
            assert form.is_valid()
            form.save()

        request_call.assert_called_with('post',
                                        'unsubscribe',
                                        data={
                                            'newsletters': 'about-addons',
                                            'email': u'*****@*****.**'
                                        },
                                        token='123')
    def test_photo_too_big(self, mock_is_image_check, mock_is_animated_check):
        # Mock the ImageCheck object to pass checks on the uploaded image
        mock_is_image_check.return_value = True
        mock_is_image_check.return_value = False
        mock_is_animated_check.returned_value = False

        request = Mock()
        request.user = self.user
        data = {'username': self.user_profile.username,
                'email': self.user_profile.email}
        files = {'photo': get_uploaded_file('transparent.png')}
        form = UserEditForm(data, files=files, instance=self.user_profile,
                            request=request)

        # Creating the mock object instead of the uploaded file,
        # with a specific size over the limit
        upload_mock = MagicMock(spec=SimpleUploadedFile)
        upload_mock._name = 'transparent.png'
        upload_mock.size = 4 * 1024 * 1024 + 1
        upload_mock.content_type = 'image/png'

        # Injecting the mock object
        form.files['photo'] = upload_mock

        assert not form.is_valid()
        mock_is_image_check.assert_called()
        mock_is_animated_check.assert_called()
        assert form.errors == {
            'photo': [u'Please use images smaller than 4MB.']
        }
    def test_photo_too_big(self, mock_is_image_check, mock_is_animated_check):
        # Mock the ImageCheck object to pass checks on the uploaded image
        mock_is_image_check.return_value = True
        mock_is_image_check.return_value = False
        mock_is_animated_check.returned_value = False

        request = Mock()
        request.user = self.user
        data = {
            'username': self.user_profile.username,
            'email': self.user_profile.email
        }
        files = {'photo': get_uploaded_file('transparent.png')}
        form = UserEditForm(data,
                            files=files,
                            instance=self.user_profile,
                            request=request)

        # Creating the mock object instead of the uploaded file,
        # with a specific size over the limit
        upload_mock = MagicMock(spec=SimpleUploadedFile)
        upload_mock._name = 'transparent.png'
        upload_mock.size = 4 * 1024 * 1024 + 1
        upload_mock.content_type = 'image/png'

        # Injecting the mock object
        form.files['photo'] = upload_mock

        assert not form.is_valid()
        mock_is_image_check.assert_called()
        mock_is_animated_check.assert_called()
        assert form.errors == {
            'photo': [u'Please use images smaller than 4MB.']
        }
Example #7
0
 def test_cannot_change_email(self):
     self.user.update(fxa_id='1a2b3c', email='*****@*****.**')
     form = UserEditForm({
         'email': '*****@*****.**',
         'lang': 'de'
     },
                         instance=self.user)
     assert form.is_valid()
     form.save()
     assert self.user.reload().email == '*****@*****.**'
    def test_photo_invalid_animated(self):
        request = Mock()
        request.user = self.user
        data = {'username': self.user_profile.username,
                'email': self.user_profile.email}
        files = {'photo': get_uploaded_file('animated.png')}
        form = UserEditForm(data, files=files, instance=self.user_profile,
                            request=request)

        assert not form.is_valid()
        assert form.errors == {'photo': [u'Images cannot be animated.']}
    def test_photo_invalid_though_content_type_is_correct(self):
        request = Mock()
        request.user = self.user
        data = {'username': self.user_profile.username,
                'email': self.user_profile.email}
        files = {'photo': get_uploaded_file('non-image.png')}
        form = UserEditForm(data, files=files, instance=self.user_profile,
                            request=request)

        assert not form.is_valid()
        assert form.errors == {'photo': [u'Images must be either PNG or JPG.']}
 def test_photo_modified(self, update_mock):
     request = Mock()
     request.user = self.user
     data = {'username': self.user_profile.username,
             'email': self.user_profile.email}
     files = {'photo': get_uploaded_file('transparent.png')}
     form = UserEditForm(data, files=files, instance=self.user_profile,
                         request=request)
     assert form.is_valid()
     form.save()
     assert update_mock.called
Example #11
0
    def test_photo_modified(self, update_mock):
        dummy = Mock()
        dummy.user = self.user

        data = {'username': self.user_profile.username,
                'email': self.user_profile.email,
                'lang': 'en-US'}
        files = {'photo': get_uploaded_file('transparent.png')}
        form = UserEditForm(data, files=files, instance=self.user_profile,
                            request=dummy)
        assert form.is_valid()
        form.save()
        assert update_mock.called
    def test_photo_invalid_though_content_type_is_correct(self):
        request = Mock()
        request.user = self.user
        data = {
            'username': self.user_profile.username,
            'email': self.user_profile.email
        }
        files = {'photo': get_uploaded_file('non-image.png')}
        form = UserEditForm(data,
                            files=files,
                            instance=self.user_profile,
                            request=request)

        assert not form.is_valid()
        assert form.errors == {'photo': [u'Images must be either PNG or JPG.']}
    def test_photo_invalid_animated(self):
        request = Mock()
        request.user = self.user
        data = {
            'username': self.user_profile.username,
            'email': self.user_profile.email
        }
        files = {'photo': get_uploaded_file('animated.png')}
        form = UserEditForm(data,
                            files=files,
                            instance=self.user_profile,
                            request=request)

        assert not form.is_valid()
        assert form.errors == {'photo': [u'Images cannot be animated.']}
    def test_basket_data_is_used_for_initial_checkbox_state(self):
        # When using basket, what's in the database is ignored for the
        # notification
        notification_id = REMOTE_NOTIFICATIONS_BY_BASKET_ID['about-addons'].id

        # Add some old obsolete data in the database for a notification that
        # is handled by basket: it should be ignored.
        UserNotification.objects.create(user=self.user,
                                        notification_id=notification_id,
                                        enabled=True)

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': []
            }

            form = UserEditForm({},
                                instance=self.user,
                                request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get',
            'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        assert notification_id not in form.fields['notifications'].initial
Example #15
0
    def test_basket_subscribe_newsletter(self):
        create_switch('activate-basket-sync')

        addon_factory(users=[self.user])

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': []
            }

            # 8 is the `announcements` notification, or about-addons newsletter
            form = UserEditForm({'notifications': [3, 4, 8]},
                                instance=self.user,
                                request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get',
            'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': ['about-addons']
            }

            assert form.is_valid()
            form.save()

        request_call.assert_called_with('post',
                                        'subscribe',
                                        headers={'x-api-key': 'testkey'},
                                        data={
                                            'newsletters': 'about-addons',
                                            'sync': 'Y',
                                            'optin': 'Y',
                                            'source_url':
                                            'http://testserver/users/edit/',
                                            'email': u'*****@*****.**'
                                        })
Example #16
0
    def test_basket_sync_behind_flag(self):

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok',
                'token': '123',
                'newsletters': ['announcements']
            }

            UserEditForm({}, instance=self.user)

        assert request_call.call_count == 0
    def test_basket_subscribe_newsletter(self):
        create_switch('activate-basket-sync')

        addon_factory(users=[self.user])

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok', 'token': '123',
                'newsletters': []}

            # 8 is the `announcements` notification, or about-addons newsletter
            form = UserEditForm(
                {'notifications': [3, 4, 8]},
                instance=self.user,
                request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get', 'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})

        with patch('basket.base.request', autospec=True) as request_call:
            request_call.return_value = {
                'status': 'ok', 'token': '123',
                'newsletters': ['about-addons']}

            assert form.is_valid()
            form.save()

        request_call.assert_called_with(
            'post', 'subscribe',
            headers={'x-api-key': 'testkey'},
            data={
                'newsletters': 'about-addons', 'sync': 'Y',
                'optin': 'Y', 'source_url': 'http://testserver/users/edit/',
                'email': u'*****@*****.**'})
    def test_basket_unsubscribe_newsletter_no_basket_user(self):
        """
        Test that unsubscribing from a newsletter if user didn't exist yet
        """
        with patch('basket.base.request', autospec=True) as request_call:
            request_call.side_effect = basket.base.BasketException(
                'description',
                status_code=401,
                code=basket.errors.BASKET_UNKNOWN_EMAIL)

            UserEditForm({},
                         instance=self.user,
                         request=RequestFactory().get('/users/edit/'))

        request_call.assert_called_with(
            'get',
            'lookup-user',
            headers={'x-api-key': 'testkey'},
            params={'email': u'*****@*****.**'})