コード例 #1
0
 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)
コード例 #2
0
ファイル: profile.py プロジェクト: aisworld/django-mailman3
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)
コード例 #3
0
 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)
コード例 #4
0
 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()
コード例 #5
0
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})
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
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
コード例 #9
0
 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>')
コード例 #10
0
 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
コード例 #11
0
 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)
コード例 #12
0
 def test_get_user(self):
     mm_user = mailman.get_mailman_user(self.user)
     self.assertIs(mm_user, self.mm_user)
コード例 #13
0
 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)