Skip to content

Commit 652484d

Browse files
czc0407hugovkJacobCoffee
authored
Fix PSF membership link (#2787) with dynamic logic (#2799)
Co-authored-by: Hugo van Kemenade <[email protected]> Co-authored-by: Jacob Coffee <[email protected]>
1 parent 901285e commit 652484d

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

templates/includes/authenticated.html

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,19 @@
77
<li class="tier-2 element-1" role="treeitem"><a href="{% url 'users:user_profile_edit' %}">Edit your user profile</a></li>
88
<li class="tier-2 element-2" role="treeitem"><a href="{% url 'account_change_password' %}">Change your password</a></li>
99
{% if request.user.has_membership %}
10-
<li class="tier-2 element-3" role="treeitem"><a href="{% url 'users:user_membership_edit' %}">Edit your PSF Basic membership</a></li>
10+
<li class="tier-2 element-3" role="treeitem">
11+
{% if user.is_authenticated %}
12+
{% if user.has_membership %}
13+
<a href="{% url 'users:user_membership_edit' %}">Edit your PSF Basic membership</a>
14+
{% else %}
15+
<a href="{% url 'users:user_membership_create' %}">Join the PSF</a>
16+
{% endif %}
17+
{% else %}
18+
<a href="{% url 'account_login' %}?next=https://psfmember.org/membership/">
19+
Log in to manage membership
20+
</a>
21+
{% endif %}
22+
</li>
1123
{% else %}
1224
<li class="tier-2 element-3" role="treeitem"><a href="{% url 'users:user_membership_create' %}">Become a PSF Basic member</a></li>
1325
{% endif %}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from django.test import TestCase, RequestFactory
2+
from django.template import Context, Template
3+
from django.contrib.auth import get_user_model
4+
from django.contrib.auth.models import AnonymousUser
5+
from users.models import Membership
6+
7+
User = get_user_model()
8+
9+
class MembershipLinkTests(TestCase):
10+
11+
def setUp(self):
12+
self.factory = RequestFactory()
13+
self.user = User.objects.create_user(username='testuser', password='123')
14+
self.template = Template("""
15+
{% include 'includes/authenticated.html' %}
16+
""")
17+
18+
def render_template(self, user):
19+
request = self.factory.get('/')
20+
request.user = user
21+
return self.template.render(Context({'user': user, 'request': request}))
22+
23+
def test_anonymous_user(self):
24+
html = self.render_template(AnonymousUser())
25+
# Anonymous users should see "Sign In"
26+
self.assertIn('Sign In', html)
27+
28+
def test_logged_in_non_member(self):
29+
html = self.render_template(self.user)
30+
# Logged-in but not a member -> should see the membership join link
31+
self.assertIn('Become a PSF Basic member', html)
32+
33+
def test_logged_in_member(self):
34+
Membership.objects.create(creator=self.user)
35+
html = self.render_template(self.user)
36+
self.assertIn('Edit your PSF Basic membership', html)

0 commit comments

Comments
 (0)