Skip to content

Commit 32d60c8

Browse files
Test and template fine-tuning
1 parent c6df6ea commit 32d60c8

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

templates/organization/modals/roles_card.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,13 @@ <h5 class="modal-title" id="editRoleModalLabel{{ role.id }}">Edit Role: {{ role.
137137
<div class="mb-3">
138138
<label class="form-label">Permissions</label>
139139
<div class="row">
140+
{% set role_permission_names = role.permissions | map(attribute='name') | list %}
140141
{% for permission in ValidPermissions %}
141142
<div class="col-md-6 mb-2">
142143
<div class="form-check">
143144
<input class="form-check-input" type="checkbox" name="permissions" value="{{ permission.value }}"
144145
id="perm_{{ role.id }}_{{ permission.value | replace(' ', '_') }}"
145-
{% if permission in role.permissions %}checked{% endif %}>
146+
{% if permission in role_permission_names %}checked{% endif %}>
146147
<label class="form-check-label" for="perm_{{ role.id }}_{{ permission.value | replace(' ', '_') }}">
147148
{{ permission.value }}
148149
</label>

tests/routers/test_role.py

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -589,8 +589,8 @@ def test_create_role_form_modal(auth_client_owner, test_organization):
589589

590590
# Check for modal elements
591591
assert 'id="createRoleModal"' in response.text
592-
assert 'action="/roles/create"' in response.text
593-
assert 'method="post"' in response.text
592+
assert 'action="http://testserver/roles/create"' in response.text
593+
assert 'method="POST"' in response.text or 'method="post"' in response.text
594594
assert 'name="name"' in response.text
595595
assert 'name="organization_id"' in response.text
596596
assert f'value="{test_organization.id}"' in response.text
@@ -607,47 +607,58 @@ def test_edit_role_form_modal(auth_client_owner, session, test_organization):
607607
name="Test Edit Role",
608608
organization_id=test_organization.id
609609
)
610-
610+
611611
# Add some permissions
612612
edit_permission = session.exec(
613613
select(Permission).where(Permission.name == ValidPermissions.EDIT_ROLE)
614614
).first()
615615
invite_permission = session.exec(
616616
select(Permission).where(Permission.name == ValidPermissions.INVITE_USER)
617617
).first()
618-
618+
619619
test_role.permissions.append(edit_permission)
620620
test_role.permissions.append(invite_permission)
621-
621+
622622
session.add(test_role)
623623
session.commit()
624624
session.refresh(test_role)
625-
625+
626+
# Verify DELETE_ROLE permission is NOT in the role's permissions before making request
627+
role_permission_names = [p.name for p in test_role.permissions]
628+
assert ValidPermissions.DELETE_ROLE not in role_permission_names, "DELETE_ROLE should not be in permissions before test"
629+
626630
response = auth_client_owner.get(
627631
f"/organizations/{test_organization.id}",
628632
follow_redirects=False
629633
)
630-
631634
assert response.status_code == 200
632-
635+
633636
# Check for modal elements
634637
assert f'id="editRoleModal{test_role.id}"' in response.text
635-
assert 'action="/roles/update"' in response.text
636-
assert 'method="post"' in response.text
638+
assert 'action="http://testserver/roles/update"' in response.text
639+
assert 'method="POST"' in response.text or 'method="post"' in response.text
637640
assert 'name="name"' in response.text
638641
assert f'value="{test_role.name}"' in response.text
639642
assert 'name="id"' in response.text
640643
assert f'value="{test_role.id}"' in response.text
641644
assert 'name="organization_id"' in response.text
642645
assert f'value="{test_organization.id}"' in response.text
643-
646+
644647
# Check for permission checkboxes with correct checked state
645648
for permission in ValidPermissions:
646-
assert permission.value in response.text
647-
648-
# These should be checked
649-
assert f'value="{ValidPermissions.EDIT_ROLE.value}" checked' in response.text
650-
assert f'value="{ValidPermissions.INVITE_USER.value}" checked' in response.text
649+
assert f'value="{permission.value}"' in response.text
650+
651+
# These should be checked - use regex for robustness
652+
edit_role_pattern = f'<input(?=[^>]*\\svalue="{re.escape(ValidPermissions.EDIT_ROLE.value)}")(?=[^>]*\\sid="perm_{test_role.id}_{re.escape(ValidPermissions.EDIT_ROLE.value.replace(" ", "_"))}")[^>]*\\s+checked[^>]*>'
653+
assert re.search(edit_role_pattern, response.text) is not None, f"Checkbox for {ValidPermissions.EDIT_ROLE.value} should be checked"
654+
invite_user_pattern = f'<input(?=[^>]*\\svalue="{re.escape(ValidPermissions.INVITE_USER.value)}")(?=[^>]*\\sid="perm_{test_role.id}_{re.escape(ValidPermissions.INVITE_USER.value.replace(" ", "_"))}")[^>]*\\s+checked[^>]*>'
655+
assert re.search(invite_user_pattern, response.text) is not None, f"Checkbox for {ValidPermissions.INVITE_USER.value} should be checked"
656+
657+
# Check for one that should NOT be checked
658+
delete_role_pattern = f'<input(?=[^>]*\\svalue="{re.escape(ValidPermissions.DELETE_ROLE.value)}")(?=[^>]*\\sid="perm_{test_role.id}_{re.escape(ValidPermissions.DELETE_ROLE.value.replace(" ", "_"))}")[^>]*\\s+checked[^>]*>'
659+
delete_match = re.search(delete_role_pattern, response.text)
660+
661+
assert delete_match is None, f"Checkbox for {ValidPermissions.DELETE_ROLE.value} should NOT be checked"
651662

652663

653664
def test_delete_role_form(auth_client_owner, session, test_organization):
@@ -669,8 +680,8 @@ def test_delete_role_form(auth_client_owner, session, test_organization):
669680
assert response.status_code == 200
670681

671682
# Check for delete form elements
672-
assert 'action="/roles/delete"' in response.text
673-
assert 'method="post"' in response.text
683+
assert 'action="http://testserver/roles/delete"' in response.text
684+
assert 'method="POST"' in response.text or 'method="post"' in response.text
674685
assert 'name="id"' in response.text
675686
assert f'value="{test_role.id}"' in response.text
676687
assert 'name="organization_id"' in response.text

0 commit comments

Comments
 (0)