def test_list_summary_sets_preferred_address(self): # Test that preferred address is set. mm_user = get_mailman_user(self.user) self.assertIsNone(mm_user.preferred_address) self.client.login(username='******', password='******') self.client.get(reverse('list_summary', args=('*****@*****.**', ))) self.assertEqual(mm_user.preferred_address.email, self.user.email)
def user_profile(request): try: profile = Profile.objects.get(user=request.user) except Profile.DoesNotExist: # Create the profile if it does not exist. There's a signal receiver # that creates it for new users, but this app may be added to an # existing Django project with existing users. profile = Profile.objects.create(user=request.user) mm_user = get_mailman_user(request.user) initial_data = { "username": request.user.username, "first_name": request.user.first_name, "last_name": request.user.last_name, "timezone": get_current_timezone().zone, } if request.method == 'POST': form = UserProfileForm(request.POST, initial=initial_data) if form.is_valid(): if form.has_changed(): request.user.username = form.cleaned_data["username"] request.user.first_name = form.cleaned_data["first_name"] request.user.last_name = form.cleaned_data["last_name"] profile.timezone = form.cleaned_data["timezone"] request.user.save() profile.save() # Now update the display name in Mailman if mm_user is not None: mm_user.display_name = "%s %s" % ( request.user.first_name, request.user.last_name) mm_user.save() messages.success( request, "The profile was successfully updated.") else: messages.success(request, "No change detected.") return redirect(reverse('mm_user_profile')) else: form = UserProfileForm(initial=initial_data) # Emails other_addresses = EmailAddress.objects.filter( user=request.user).exclude( email=request.user.email).order_by("email").values_list( 'email', flat=True) # Extract the gravatar_url used by django_gravatar2. The site # administrator could alternatively set this to http://cdn.libravatar.org/ gravatar_url = getattr(settings, 'GRAVATAR_URL', 'http://www.gravatar.com') gravatar_shortname = '.'.join(gravatar_url.split('.')[-2:]).strip('/') context = { 'user_profile': profile, 'form': form, 'other_addresses': other_addresses, 'gravatar_url': gravatar_url, 'gravatar_shortname': gravatar_shortname, } return render(request, "django_mailman3/profile/profile.html", context)
def test_create_user(self): self.mailman_client.get_user.side_effect = \ HTTPError(None, 404, None, None, None) new_mm_user = Mock() self.mailman_client.create_user.side_effect = lambda e, n: new_mm_user mm_user = mailman.get_mailman_user(self.user) self.assertEqual(self.mailman_client.create_user.call_args_list, [call(self.user.email, self.user.get_full_name())]) self.assertIs(mm_user, new_mm_user)
def test_connection_failed(self): self.mailman_client.get_user.side_effect = \ HTTPError(None, 500, None, None, None) with patch('django_mailman3.lib.mailman.logger') as mock_logging: mm_user = mailman.get_mailman_user(self.user) # Make sure that the returned user is None. self.assertIsNone(mm_user) # Make sure the failure is logged. mock_logging.warning.assert_called()
def delete_account(request): if request.method == 'POST': mm_user = get_mailman_user(request.user) if mm_user: mm_user.delete() request.user.delete() messages.success(request, _("Successfully deleted account")) return HttpResponseRedirect('/') return render(request, 'django_mailman3/profile/delete_profile.html', {'delete_page': True})
def test_list_summary_not_verified_does_not_set_preferred(self): # Test that the preferred address is *not* set if the primary_email is # not verified. primary_email = EmailAddress.objects.create( user=self.user, email='*****@*****.**', verified=False) primary_email.set_as_primary() mm_user = get_mailman_user(self.user) self.assertIsNone(mm_user.preferred_address) self.client.get(reverse('list_summary', args=('*****@*****.**', ))) self.assertIsNone(mm_user.preferred_address)
def test_list_options_sets_preferred_address(self): # Test that preferred address is set. mm_user = get_mailman_user(self.user) self.assertIsNone(mm_user.preferred_address) self.foo_list.subscribe( self.user.email, pre_verified=True, pre_confirmed=True, pre_approved=True) self.client.login(username='******', password='******') self.client.get(reverse('user_list_options', args=[self.foo_list.list_id])) self.assertEqual(mm_user.preferred_address.email, self.user.email)
def on_email_removed(sender, **kwargs): # Sent when an email address has been removed. # Remove it from Mailman. user = kwargs["user"] email_address = kwargs["email_address"] mm_user = get_mailman_user(user) if mm_user is None: return # Could not get the user from Mailman. try: mm_user.addresses.remove(email_address.email) except ValueError: pass # not in Mailman's addresses
def test_list_summary_already_subscribed_user(self): mm_user = get_mailman_user(self.user) mm_user.addresses[0].verify() mm_user.preferred_address = self.user.email self.foo_list.subscribe(str(mm_user.user_id), pre_verified=True, pre_confirmed=True, pre_approved=True) self.client.login(username='******', password='******') response = self.client.get( reverse('list_summary', args=('*****@*****.**', ))) # Assert two parts separately due to sometimes being newlines and stuff # in the response HTML. self.assertContains( response, 'You are subscribed to this list with the ' 'following address:') self.assertContains(response, ' <em>Primary Address ([email protected])</em>')
def get_context_data(self, **kwargs): data = super(UserListOptionsView, self).get_context_data(**kwargs) data['mlist'] = self.mlist user_emails = EmailAddress.objects.filter( user=self.request.user, verified=True).order_by("email").values_list("email", flat=True) mm_user = get_mailman_user(self.request.user) primary_email = None if mm_user.preferred_address is None: primary_email = set_preferred(self.request.user, mm_user) else: primary_email = mm_user.preferred_address.email data['change_subscription_form'] = ChangeSubscriptionForm( user_emails, mm_user.user_id, primary_email, initial={'subscriber': self.subscriber}) return data
def test_connection_failed(self): self.mailman_client.get_user.side_effect = \ HTTPError(None, 500, None, None, None) mm_user = mailman.get_mailman_user(self.user) self.assertIsNone(mm_user)
def test_get_user(self): mm_user = mailman.get_mailman_user(self.user) self.assertIs(mm_user, self.mm_user)
def test_get_nonexistent_user(self, mock_method): # Test create user fails and get_mailman_user returns None. mm_user = mailman.get_mailman_user(self.mm_user) self.assertIsNone(mm_user) mock_method.assert_called_with(self.mm_user)