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)