Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: field/add permissions for ClaimsProvider model #2671

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
37 changes: 26 additions & 11 deletions benefits/core/admin/claims.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,38 @@
from django.conf import settings
from django.contrib import admin

from benefits.core import models


@admin.register(models.ClaimsProvider)
class ClaimsProviderAdmin(admin.ModelAdmin): # pragma: no cover
class ClaimsProviderAdmin(admin.ModelAdmin):
def get_exclude(self, request, obj=None):
fields = []

if not request.user.is_superuser:
return ["client_id_secret_name"]
else:
return super().get_exclude(request, obj)
fields.extend(["client_id_secret_name"])

return fields or super().get_exclude(request, obj)

def get_readonly_fields(self, request, obj=None):
fields = []

if not request.user.is_superuser:
return [
"sign_out_button_template",
"sign_out_link_template",
"authority",
"scheme",
]
fields.extend(
[
"sign_out_button_template",
"sign_out_link_template",
"authority",
"scheme",
]
)

return fields or super().get_readonly_fields(request, obj)

def has_add_permission(self, request):
if settings.RUNTIME_ENVIRONMENT() != settings.RUNTIME_ENVS.PROD:
return True
elif request.user and request.user.is_superuser:
return True
else:
return super().get_readonly_fields(request, obj)
return False
62 changes: 62 additions & 0 deletions tests/pytest/core/admin/test_claims.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import pytest

from django.conf import settings
from django.contrib import admin

from benefits.core import models
from benefits.core.admin.claims import ClaimsProviderAdmin


@pytest.fixture
def admin_model():
return ClaimsProviderAdmin(models.ClaimsProvider, admin.site)


@pytest.mark.django_db
@pytest.mark.parametrize(
"user_type,expected",
[("staff", ["client_id_secret_name"]), ("super", None)],
)
def test_get_exclude(admin_model, admin_user_request, user_type, expected):
request = admin_user_request(user_type)

exclude = admin_model.get_exclude(request)

if expected:
assert set(exclude) == set(expected)
else:
assert exclude is None


@pytest.mark.django_db
@pytest.mark.parametrize(
"user_type,expected",
[
("staff", ["sign_out_button_template", "sign_out_link_template", "authority", "scheme"]),
("super", ()),
],
)
def test_get_readonly_fields(admin_model, admin_user_request, user_type, expected):
request = admin_user_request(user_type)

readonly = admin_model.get_readonly_fields(request)

assert set(readonly) == set(expected)


@pytest.mark.django_db
@pytest.mark.parametrize(
"runtime_env,user_type,expected",
[
(settings.RUNTIME_ENVS.PROD, "staff", False),
(settings.RUNTIME_ENVS.PROD, "super", True),
(settings.RUNTIME_ENVS.DEV, "staff", True),
(settings.RUNTIME_ENVS.DEV, "super", True),
],
)
def test_has_add_permission(admin_model, admin_user_request, settings, runtime_env, user_type, expected):
settings.RUNTIME_ENVIRONMENT = lambda: runtime_env

request = admin_user_request(user_type)

assert admin_model.has_add_permission(request) == expected
Loading