Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ __pycache__
.DS_Store
.envrc
.state/
venv*/
14 changes: 13 additions & 1 deletion templates/includes/authenticated.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,19 @@
<li class="tier-2 element-1" role="treeitem"><a href="{% url 'users:user_profile_edit' %}">Edit your user profile</a></li>
<li class="tier-2 element-2" role="treeitem"><a href="{% url 'account_change_password' %}">Change your password</a></li>
{% if request.user.has_membership %}
<li class="tier-2 element-3" role="treeitem"><a href="{% url 'users:user_membership_edit' %}">Edit your PSF Basic membership</a></li>
<li class="tier-2 element-3" role="treeitem">
{% if user.is_authenticated %}
{% if user.has_membership %}
<a href="{% url 'users:user_membership_edit' %}">Edit your PSF Basic membership</a>
{% else %}
<a href="{% url 'users:user_membership_create' %}">Join the PSF</a>
{% endif %}
{% else %}
<a href="{% url 'account_login' %}?next=https://psfmember.org/membership/">
Log in to manage membership
</a>
{% endif %}
</li>
{% else %}
<li class="tier-2 element-3" role="treeitem"><a href="{% url 'users:user_membership_create' %}">Become a PSF Basic member</a></li>
{% endif %}
Expand Down
36 changes: 36 additions & 0 deletions users/tests/test_membership_links.py
Original file line number Diff line number Diff line change
@@ -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)