diff --git a/templates/includes/authenticated.html b/templates/includes/authenticated.html index 82d5b38f6..662872a27 100644 --- a/templates/includes/authenticated.html +++ b/templates/includes/authenticated.html @@ -7,7 +7,19 @@
  • Edit your user profile
  • Change your password
  • {% if request.user.has_membership %} -
  • Edit your PSF Basic membership
  • +
  • + {% if user.is_authenticated %} + {% if user.has_membership %} + Edit your PSF Basic membership + {% else %} + Join the PSF + {% endif %} + {% else %} + + Log in to manage membership + + {% endif %} +
  • {% else %}
  • Become a PSF Basic member
  • {% endif %} diff --git a/users/tests/test_membership_links.py b/users/tests/test_membership_links.py new file mode 100644 index 000000000..234832c65 --- /dev/null +++ b/users/tests/test_membership_links.py @@ -0,0 +1,36 @@ +from django.test import TestCase, RequestFactory +from django.template import Context, Template +from django.contrib.auth import get_user_model +from django.contrib.auth.models import AnonymousUser +from users.models import Membership + +User = get_user_model() + +class MembershipLinkTests(TestCase): + + def setUp(self): + self.factory = RequestFactory() + self.user = User.objects.create_user(username='testuser', password='123') + self.template = Template(""" + {% include 'includes/authenticated.html' %} + """) + + def render_template(self, user): + request = self.factory.get('/') + request.user = user + return self.template.render(Context({'user': user, 'request': request})) + + def test_anonymous_user(self): + html = self.render_template(AnonymousUser()) + # Anonymous users should see "Sign In" + self.assertIn('Sign In', html) + + def test_logged_in_non_member(self): + html = self.render_template(self.user) + # Logged-in but not a member -> should see the membership join link + self.assertIn('Become a PSF Basic member', html) + + def test_logged_in_member(self): + Membership.objects.create(creator=self.user) + html = self.render_template(self.user) + self.assertIn('Edit your PSF Basic membership', html)