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.'] }
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
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
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_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'*****@*****.**'})