+{% if authentication.logged_in %}
+ {% url "oauth:logout" as signout_url %}
+
{% endif %}
diff --git a/benefits/core/viewmodels.py b/benefits/core/viewmodels.py
index e07bb0987..422f85e3e 100644
--- a/benefits/core/viewmodels.py
+++ b/benefits/core/viewmodels.py
@@ -2,7 +2,6 @@
The core application: view model definitions for the root of the webapp.
"""
from django.utils.translation import pgettext, gettext_lazy as _
-from django.urls import reverse
from benefits.core import models
@@ -51,12 +50,6 @@ def outline_primary(**kwargs):
classes.insert(0, "btn-outline-primary")
return Button(classes=classes, **kwargs)
- @staticmethod
- def logout(**kwargs):
- """Create a button that logs user out, with a login.gov button, with a login.gov logo and fallback text"""
- btn = Button.primary(fallback_text="Login.gov", id="login", url=reverse("oauth:logout"), text="", **kwargs)
- return btn
-
@staticmethod
def previous_page(url):
return Button(text=_("core.buttons.previous_page"), url=url)
diff --git a/benefits/eligibility/templates/eligibility/unverified.html b/benefits/eligibility/templates/eligibility/unverified.html
index 0a3470749..1dacddbec 100644
--- a/benefits/eligibility/templates/eligibility/unverified.html
+++ b/benefits/eligibility/templates/eligibility/unverified.html
@@ -1,7 +1,9 @@
{% extends "core/base.html" %}
{% block main-content %}
- {% include "core/includes/sign-out-link.html" %}
+ {% if authentication and authentication.sign_out_link_template %}
+ {% include authentication.sign_out_link_template %}
+ {% endif %}
{% include "core/includes/icon-title.html" with title=page.headline icon=page.icon %}
diff --git a/benefits/enrollment/templates/enrollment/index.html b/benefits/enrollment/templates/enrollment/index.html
index 3ac34b96e..9ed56ecc1 100644
--- a/benefits/enrollment/templates/enrollment/index.html
+++ b/benefits/enrollment/templates/enrollment/index.html
@@ -6,7 +6,9 @@
{% endblock page-title %}
{% block nav-buttons %}
- {% include "core/includes/sign-out-link.html" %}
+ {% if authentication and authentication.sign_out_link_template %}
+ {% include authentication.sign_out_link_template %}
+ {% endif %}
{% endblock nav-buttons %}
{% block headline %}
diff --git a/benefits/enrollment/templates/enrollment/retry.html b/benefits/enrollment/templates/enrollment/retry.html
index 5916f138a..5c3fb0375 100644
--- a/benefits/enrollment/templates/enrollment/retry.html
+++ b/benefits/enrollment/templates/enrollment/retry.html
@@ -1,7 +1,9 @@
{% extends "core/base.html" %}
{% block main-content %}
- {% include "core/includes/sign-out-link.html" %}
+ {% if authentication and authentication.sign_out_link_template %}
+ {% include authentication.sign_out_link_template %}
+ {% endif %}
{% include "core/includes/icon-title.html" with title=page.headline icon=page.icon %}
diff --git a/benefits/enrollment/templates/enrollment/success.html b/benefits/enrollment/templates/enrollment/success.html
index 7439ab9d3..06aa28921 100644
--- a/benefits/enrollment/templates/enrollment/success.html
+++ b/benefits/enrollment/templates/enrollment/success.html
@@ -36,17 +36,12 @@
{% translate "enrollment.pages.success.headline" %}
- {% translate "enrollment.pages.success.logout[0]" %}
- {% for b in page.buttons %}
-
- {{ b.fallback_text }}
-
- .
- {% endfor %}
+ {% translate "enrollment.pages.success.logout" %}
+ {% include authentication.sign_out_button_template %}
diff --git a/benefits/enrollment/views.py b/benefits/enrollment/views.py
index a94fc617c..653d561b3 100644
--- a/benefits/enrollment/views.py
+++ b/benefits/enrollment/views.py
@@ -124,12 +124,9 @@ def success(request):
verifier = session.verifier(request)
- page = viewmodels.Page()
-
- if verifier.supports_sign_out and session.logged_in(request):
+ if session.logged_in(request) and verifier.auth_provider.supports_sign_out:
# overwrite origin for a logged in user
# if they click the logout button, they are taken to the new route
session.update(request, origin=reverse(ROUTE_LOGGED_OUT))
- page.buttons = [viewmodels.Button.logout()]
- return TemplateResponse(request, TEMPLATE_SUCCESS, page.context_dict())
+ return TemplateResponse(request, TEMPLATE_SUCCESS)
diff --git a/benefits/locale/en/LC_MESSAGES/django.po b/benefits/locale/en/LC_MESSAGES/django.po
index 8bc6e774b..d0167d84b 100644
--- a/benefits/locale/en/LC_MESSAGES/django.po
+++ b/benefits/locale/en/LC_MESSAGES/django.po
@@ -6,16 +6,13 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: https://github.com/cal-itp/benefits/issues \n"
-"POT-Creation-Date: 2023-07-13 23:04+0000\n"
+"POT-Creation-Date: 2023-07-14 05:24+0000\n"
"Language: English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-msgid "eligibility.buttons.senior.signout"
-msgstr "Sign out of Login.gov"
-
msgid "eligibility.pages.unverified.title"
msgstr "Eligibility Error"
@@ -267,6 +264,9 @@ msgstr ""
"To function properly, this website requires a browser that supports "
"JavaScript. Please enable JavaScript for this website and"
+msgid "core.buttons.senior.signout"
+msgstr "Sign out of Login.gov"
+
msgid "core.pages.index.button"
msgstr "Choose your Provider"
@@ -634,7 +634,7 @@ msgstr ""
msgid "enrollment.pages.success.thankyou"
msgstr "Thank you for using Cal-ITP Benefits!"
-msgid "enrollment.pages.success.logout[0]"
+msgid "enrollment.pages.success.logout"
msgstr ""
"If you are on a public or shared computer, don’t forget to sign out of "
diff --git a/benefits/locale/es/LC_MESSAGES/django.po b/benefits/locale/es/LC_MESSAGES/django.po
index 15c823fd5..7918aeaaa 100644
--- a/benefits/locale/es/LC_MESSAGES/django.po
+++ b/benefits/locale/es/LC_MESSAGES/django.po
@@ -6,16 +6,13 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: https://github.com/cal-itp/benefits/issues \n"
-"POT-Creation-Date: 2023-07-13 23:04+0000\n"
+"POT-Creation-Date: 2023-07-14 05:24+0000\n"
"Language: Español\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-msgid "eligibility.buttons.senior.signout"
-msgstr "Cierre sesión de Login.gov"
-
msgid "eligibility.pages.unverified.title"
msgstr "Error de elegibilidad"
@@ -276,6 +273,9 @@ msgstr ""
"Para funcionar correctamente, este sitio web requiere un navegador que "
"admita JavaScript. Por favor, active JavaScript por este sitio web y"
+msgid "core.buttons.senior.signout"
+msgstr "Cierre sesión de Login.gov"
+
msgid "core.pages.index.button"
msgstr "Elija su Proveedor"
@@ -647,7 +647,7 @@ msgstr ""
msgid "enrollment.pages.success.thankyou"
msgstr "Gracias por usar los Beneficios de Cal-ITP."
-msgid "enrollment.pages.success.logout[0]"
+msgid "enrollment.pages.success.logout"
msgstr ""
"Si está en una computadora pública o compartida, no olvide cerrar sesión en "
diff --git a/tests/pytest/conftest.py b/tests/pytest/conftest.py
index e3625d90f..03c3c5659 100644
--- a/tests/pytest/conftest.py
+++ b/tests/pytest/conftest.py
@@ -44,7 +44,8 @@ def model_PemData():
@pytest.fixture
def model_AuthProvider():
auth_provider = AuthProvider.objects.create(
- sign_out_button_label="Sign out",
+ sign_out_button_template="core/includes/sign-out-button--senior.html",
+ sign_out_link_template="core/includes/sign-out-link--senior.html",
client_name="Client",
client_id="1234",
authority="https://example.com",
@@ -66,7 +67,8 @@ def model_AuthProvider_with_verification(model_AuthProvider):
def model_AuthProvider_with_verification_no_sign_out(model_AuthProvider):
model_AuthProvider.scope = "scope"
model_AuthProvider.claim = "claim"
- model_AuthProvider.sign_out_button_label = None
+ model_AuthProvider.sign_out_button_template = None
+ model_AuthProvider.sign_out_link_template = None
model_AuthProvider.save()
return model_AuthProvider
@@ -85,7 +87,8 @@ def model_AuthProvider_without_verification(model_AuthProvider):
def model_AuthProvider_without_verification_no_sign_out(model_AuthProvider):
model_AuthProvider.scope = None
model_AuthProvider.claim = None
- model_AuthProvider.sign_out_button_label = None
+ model_AuthProvider.sign_out_button_template = None
+ model_AuthProvider.sign_out_link_template = None
model_AuthProvider.save()
return model_AuthProvider
@@ -237,12 +240,20 @@ def mocked_session_verifier_oauth(mocker, model_EligibilityVerifier_AuthProvider
@pytest.fixture
-def mocked_session_verifier_auth_required(mocker, model_EligibilityVerifier, mocked_session_verifier):
- mock_verifier = mocker.Mock(spec=model_EligibilityVerifier)
- mock_verifier.name = model_EligibilityVerifier.name
+def mocked_session_verifier_auth_required(
+ mocker, model_EligibilityVerifier_AuthProvider_with_verification, mocked_session_verifier_oauth
+):
+ mock_verifier = mocker.Mock(spec=model_EligibilityVerifier_AuthProvider_with_verification)
+ mock_verifier.name = model_EligibilityVerifier_AuthProvider_with_verification.name
mock_verifier.is_auth_required = True
- mocked_session_verifier.return_value = mock_verifier
- return mocked_session_verifier
+ mock_verifier.auth_provider.sign_out_button_template = (
+ model_EligibilityVerifier_AuthProvider_with_verification.auth_provider.sign_out_button_template
+ )
+ mock_verifier.auth_provider.sign_out_link_template = (
+ model_EligibilityVerifier_AuthProvider_with_verification.auth_provider.sign_out_link_template
+ )
+ mocked_session_verifier_oauth.return_value = mock_verifier
+ return mocked_session_verifier_oauth
@pytest.fixture
diff --git a/tests/pytest/core/test_models.py b/tests/pytest/core/test_models.py
index bc2b06b04..135613d87 100644
--- a/tests/pytest/core/test_models.py
+++ b/tests/pytest/core/test_models.py
@@ -34,7 +34,35 @@ def test_PemData_data_remote(model_PemData, mocker):
@pytest.mark.django_db
-def test_EligibilityType_str(model_EligibilityType):
+def test_model_AuthProvider(model_AuthProvider):
+ assert not model_AuthProvider.supports_claims_verification
+ assert model_AuthProvider.supports_sign_out
+
+
+@pytest.mark.django_db
+def test_model_AuthProvider_with_verification(model_AuthProvider_with_verification):
+ assert model_AuthProvider_with_verification.supports_claims_verification
+
+
+@pytest.mark.django_db
+def test_model_AuthProvider_with_verification_no_sign_out(model_AuthProvider_with_verification_no_sign_out):
+ assert model_AuthProvider_with_verification_no_sign_out.supports_claims_verification
+ assert not model_AuthProvider_with_verification_no_sign_out.supports_sign_out
+
+
+@pytest.mark.django_db
+def test_model_AuthProvider_without_verification(model_AuthProvider_without_verification):
+ assert not model_AuthProvider_without_verification.supports_claims_verification
+
+
+@pytest.mark.django_db
+def model_AuthProvider_without_verification_no_sign_out(model_AuthProvider_without_verification_no_sign_out):
+ assert not model_AuthProvider_without_verification_no_sign_out.supports_claims_verification
+ assert not model_AuthProvider_without_verification_no_sign_out.supports_sign_out
+
+
+@pytest.mark.django_db
+def test_test_EligibilityType_str(model_EligibilityType):
assert str(model_EligibilityType) == model_EligibilityType.label
@@ -114,7 +142,6 @@ def test_EligibilityVerifier_with_AuthProvider_with_verification(
assert model_EligibilityVerifier.is_auth_required
assert model_EligibilityVerifier.uses_auth_verification
- assert model_EligibilityVerifier.supports_sign_out
@pytest.mark.django_db
@@ -125,7 +152,6 @@ def test_EligibilityVerifier_with_AuthProvider_with_verification_no_sign_out(
assert model_EligibilityVerifier.is_auth_required
assert model_EligibilityVerifier.uses_auth_verification
- assert not model_EligibilityVerifier.supports_sign_out
@pytest.mark.django_db
@@ -136,7 +162,6 @@ def test_EligibilityVerifier_with_AuthProvider_without_verification(
assert model_EligibilityVerifier.is_auth_required
assert not model_EligibilityVerifier.uses_auth_verification
- assert model_EligibilityVerifier.supports_sign_out
@pytest.mark.django_db
@@ -147,7 +172,6 @@ def test_EligibilityVerifier_with_AuthProvider_without_verification_no_sign_out(
assert model_EligibilityVerifier.is_auth_required
assert not model_EligibilityVerifier.uses_auth_verification
- assert not model_EligibilityVerifier.supports_sign_out
@pytest.mark.django_db
diff --git a/tests/pytest/enrollment/test_views.py b/tests/pytest/enrollment/test_views.py
index 60f7f36af..ac7c7dfd7 100644
--- a/tests/pytest/enrollment/test_views.py
+++ b/tests/pytest/enrollment/test_views.py
@@ -209,7 +209,6 @@ def test_success_authentication_logged_in(mocker, client):
assert response.status_code == 200
assert response.template_name == TEMPLATE_SUCCESS
- assert "page" in response.context_data
assert {"origin": reverse(ROUTE_LOGGED_OUT)} in mock_session.update.call_args
@@ -224,7 +223,6 @@ def test_success_authentication_not_logged_in(mocker, client):
assert response.status_code == 200
assert response.template_name == TEMPLATE_SUCCESS
- assert "page" in response.context_data
@pytest.mark.django_db
@@ -235,4 +233,3 @@ def test_success_no_authentication(client):
assert response.status_code == 200
assert response.template_name == TEMPLATE_SUCCESS
- assert "page" in response.context_data