diff --git a/tests/pytest/conftest.py b/tests/pytest/conftest.py index 9b86a2880..959a6bf24 100644 --- a/tests/pytest/conftest.py +++ b/tests/pytest/conftest.py @@ -60,38 +60,7 @@ def model_ClaimsProvider(): @pytest.fixture -def model_ClaimsProvider_with_scope_and_claim(model_ClaimsProvider): - model_ClaimsProvider.scope = "scope" - model_ClaimsProvider.claim = "claim" - model_ClaimsProvider.save() - - return model_ClaimsProvider - - -@pytest.fixture -def model_ClaimsProvider_with_scope_and_claim_no_sign_out(model_ClaimsProvider): - model_ClaimsProvider.scope = "scope" - model_ClaimsProvider.claim = "claim" - model_ClaimsProvider.sign_out_button_template = None - model_ClaimsProvider.sign_out_link_template = None - model_ClaimsProvider.save() - - return model_ClaimsProvider - - -@pytest.fixture -def model_ClaimsProvider_no_scope_and_claim(model_ClaimsProvider): - model_ClaimsProvider.scope = None - model_ClaimsProvider.claim = None - model_ClaimsProvider.save() - - return model_ClaimsProvider - - -@pytest.fixture -def model_ClaimsProvider_no_scope_and_claim_no_sign_out(model_ClaimsProvider): - model_ClaimsProvider.scope = None - model_ClaimsProvider.claim = None +def model_ClaimsProvider_no_sign_out(model_ClaimsProvider): model_ClaimsProvider.sign_out_button_template = None model_ClaimsProvider.sign_out_link_template = None model_ClaimsProvider.save() @@ -152,7 +121,7 @@ def model_EligibilityType_supports_expiration(model_EligibilityType): @pytest.fixture -def model_EligibilityVerifier(model_PemData, model_EligibilityType): +def model_EligibilityVerifier(model_PemData, model_EligibilityType, model_ClaimsProvider): verifier = EligibilityVerifier.objects.create( name="Test Verifier", active=True, @@ -162,16 +131,25 @@ def model_EligibilityVerifier(model_PemData, model_EligibilityType): eligibility_type=model_EligibilityType, eligibility_api_public_key=model_PemData, selection_label_template="eligibility/includes/selection-label.html", + claims_provider=model_ClaimsProvider, + _claims_scheme="", ) return verifier @pytest.fixture -def model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim( - model_ClaimsProvider_with_scope_and_claim, model_EligibilityVerifier -): - model_EligibilityVerifier.claims_provider = model_ClaimsProvider_with_scope_and_claim +def model_EligibilityVerifier_with_scope_and_claim(model_EligibilityVerifier): + model_EligibilityVerifier.claims_scope = "scope" + model_EligibilityVerifier.claims_claim = "claim" + model_EligibilityVerifier.save() + + return model_EligibilityVerifier + + +@pytest.fixture +def model_EligibilityVerifier_with_claims_scheme(model_EligibilityVerifier): + model_EligibilityVerifier._claims_scheme = "scheme" model_EligibilityVerifier.save() return model_EligibilityVerifier @@ -278,25 +256,34 @@ def mocked_session_verifier(mocker, model_EligibilityVerifier): @pytest.fixture -def mocked_session_verifier_oauth(mocker, model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim): +def mocked_session_verifier_oauth(mocker, model_EligibilityVerifier_with_scope_and_claim): + return mocker.patch( + "benefits.core.session.verifier", + autospec=True, + return_value=model_EligibilityVerifier_with_scope_and_claim, + ) + + +@pytest.fixture +def mocked_session_verifier_no_scope_and_claim_oauth(mocker, model_EligibilityVerifier): return mocker.patch( "benefits.core.session.verifier", autospec=True, - return_value=model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim, + return_value=model_EligibilityVerifier, ) @pytest.fixture def mocked_session_verifier_uses_claims_verification( - model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim, mocked_session_verifier_oauth + model_EligibilityVerifier_with_scope_and_claim, mocked_session_verifier_oauth ): - mock_verifier = model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim - mock_verifier.name = model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim.name + mock_verifier = model_EligibilityVerifier_with_scope_and_claim + mock_verifier.name = model_EligibilityVerifier_with_scope_and_claim.name mock_verifier.claims_provider.sign_out_button_template = ( - model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim.claims_provider.sign_out_button_template + model_EligibilityVerifier_with_scope_and_claim.claims_provider.sign_out_button_template ) mock_verifier.claims_provider.sign_out_link_template = ( - model_EligibilityVerifier_ClaimsProvider_with_scope_and_claim.claims_provider.sign_out_link_template + model_EligibilityVerifier_with_scope_and_claim.claims_provider.sign_out_link_template ) mocked_session_verifier_oauth.return_value = mock_verifier return mocked_session_verifier_oauth @@ -304,11 +291,14 @@ def mocked_session_verifier_uses_claims_verification( @pytest.fixture def mocked_session_verifier_does_not_use_claims_verification( - mocked_session_verifier_uses_claims_verification, model_ClaimsProvider_no_scope_and_claim + model_EligibilityVerifier, mocked_session_verifier_no_scope_and_claim_oauth ): - mocked_verifier = mocked_session_verifier_uses_claims_verification - mocked_verifier.claims_provider = model_ClaimsProvider_no_scope_and_claim - return mocked_verifier + mock_verifier = model_EligibilityVerifier + mock_verifier.name = model_EligibilityVerifier.name + mock_verifier.claims_provider.sign_out_button_template = model_EligibilityVerifier.claims_provider.sign_out_button_template + mock_verifier.claims_provider.sign_out_link_template = model_EligibilityVerifier.claims_provider.sign_out_link_template + mocked_session_verifier_no_scope_and_claim_oauth.return_value = mock_verifier + return mocked_session_verifier_no_scope_and_claim_oauth @pytest.fixture diff --git a/tests/pytest/core/test_models.py b/tests/pytest/core/test_models.py index f45649d5f..b01797c0e 100644 --- a/tests/pytest/core/test_models.py +++ b/tests/pytest/core/test_models.py @@ -94,7 +94,6 @@ def test_PemData_data_text_secret_name_and_remote__uses_remote( @pytest.mark.django_db def test_model_ClaimsProvider(model_ClaimsProvider): - assert not model_ClaimsProvider.supports_claims_verification assert model_ClaimsProvider.supports_sign_out assert str(model_ClaimsProvider) == model_ClaimsProvider.client_name @@ -108,25 +107,8 @@ def test_model_ClaimsProvider_client_id(model_ClaimsProvider, mock_models_get_se @pytest.mark.django_db -def test_model_ClaimsProvider_with_scope_and_claim(model_ClaimsProvider_with_scope_and_claim): - assert model_ClaimsProvider_with_scope_and_claim.supports_claims_verification - - -@pytest.mark.django_db -def test_model_ClaimsProvider_with_scope_and_claim_no_sign_out(model_ClaimsProvider_with_scope_and_claim_no_sign_out): - assert model_ClaimsProvider_with_scope_and_claim_no_sign_out.supports_claims_verification - assert not model_ClaimsProvider_with_scope_and_claim_no_sign_out.supports_sign_out - - -@pytest.mark.django_db -def test_model_ClaimsProvider_no_scope_and_claim(model_ClaimsProvider_no_scope_and_claim): - assert not model_ClaimsProvider_no_scope_and_claim.supports_claims_verification - - -@pytest.mark.django_db -def test_model_ClaimsProvider_no_scope_and_claim_no_sign_out(model_ClaimsProvider_no_scope_and_claim_no_sign_out): - assert not model_ClaimsProvider_no_scope_and_claim_no_sign_out.supports_claims_verification - assert not model_ClaimsProvider_no_scope_and_claim_no_sign_out.supports_sign_out +def test_model_ClaimsProvider_no_sign_out(model_ClaimsProvider_no_sign_out): + assert not model_ClaimsProvider_no_sign_out.supports_sign_out @pytest.mark.django_db @@ -297,37 +279,29 @@ def test_EligibilityVerifier_by_id_nonmatching(): @pytest.mark.django_db -def test_EligibilityVerifier_with_ClaimsProvider_with_scope_and_claim( - model_EligibilityVerifier, model_ClaimsProvider_with_scope_and_claim -): - model_EligibilityVerifier.claims_provider = model_ClaimsProvider_with_scope_and_claim +def test_EligibilityVerifier_with_scope_and_claim(model_EligibilityVerifier_with_scope_and_claim): - assert model_EligibilityVerifier.uses_claims_verification + assert model_EligibilityVerifier_with_scope_and_claim.uses_claims_verification @pytest.mark.django_db -def test_EligibilityVerifier_with_ClaimsProvider_with_scope_and_claim_no_sign_out( - model_EligibilityVerifier, model_ClaimsProvider_with_scope_and_claim_no_sign_out +def test_EligibilityVerifier_with_scope_and_claim_no_sign_out( + model_EligibilityVerifier_with_scope_and_claim, model_ClaimsProvider_no_sign_out ): - model_EligibilityVerifier.claims_provider = model_ClaimsProvider_with_scope_and_claim_no_sign_out + model_EligibilityVerifier_with_scope_and_claim.claims_provider = model_ClaimsProvider_no_sign_out - assert model_EligibilityVerifier.uses_claims_verification + assert model_EligibilityVerifier_with_scope_and_claim.uses_claims_verification @pytest.mark.django_db -def test_EligibilityVerifier_with_ClaimsProvider_no_scope_and_claim( - model_EligibilityVerifier, model_ClaimsProvider_no_scope_and_claim -): - model_EligibilityVerifier.claims_provider = model_ClaimsProvider_no_scope_and_claim +def test_EligibilityVerifier_no_scope_and_claim(model_EligibilityVerifier): assert not model_EligibilityVerifier.uses_claims_verification @pytest.mark.django_db -def test_EligibilityVerifier_with_ClaimsProvider_no_scope_and_claim_no_sign_out( - model_EligibilityVerifier, model_ClaimsProvider_no_scope_and_claim_no_sign_out -): - model_EligibilityVerifier.claims_provider = model_ClaimsProvider_no_scope_and_claim_no_sign_out +def test_EligibilityVerifier_no_scope_and_claim_no_sign_out(model_EligibilityVerifier, model_ClaimsProvider_no_sign_out): + model_EligibilityVerifier.claims_provider = model_ClaimsProvider_no_sign_out assert not model_EligibilityVerifier.uses_claims_verification @@ -347,6 +321,16 @@ def test_EligiblityVerifier_eligibility_api_auth_key(model_EligibilityVerifier, assert secret_value == mock_models_get_secret_by_name.return_value +@pytest.mark.django_db +def test_EligibilityVerifier_no_claims_scheme(model_EligibilityVerifier): + assert model_EligibilityVerifier.claims_scheme == model_EligibilityVerifier.claims_provider.scheme + + +@pytest.mark.django_db +def test_EligibilityVerifier_with_claims_scheme(model_EligibilityVerifier_with_claims_scheme): + assert model_EligibilityVerifier_with_claims_scheme.claims_scheme == "scheme" + + @pytest.mark.django_db def test_TransitProcessor_str(model_TransitProcessor): assert str(model_TransitProcessor) == model_TransitProcessor.name diff --git a/tests/pytest/eligibility/test_verify.py b/tests/pytest/eligibility/test_verify.py index 8efbada34..a92b7fd6c 100644 --- a/tests/pytest/eligibility/test_verify.py +++ b/tests/pytest/eligibility/test_verify.py @@ -83,7 +83,7 @@ def test_eligibility_from_oauth_claim_match( # mocked_session_verifier_uses_claims_verification is Mocked version of the session.verifier() function # call it (with a None request) to return a verifier object verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "claim" + verifier.claims_claim = "claim" verifier.eligibility_type = model_EligibilityType types = eligibility_from_oauth(verifier, "claim", model_TransitAgency) diff --git a/tests/pytest/oauth/test_client.py b/tests/pytest/oauth/test_client.py index d6b45c61d..63918bbdf 100644 --- a/tests/pytest/oauth/test_client.py +++ b/tests/pytest/oauth/test_client.py @@ -1,6 +1,6 @@ import pytest -from benefits.core.models import ClaimsProvider +from benefits.core.models import EligibilityVerifier from benefits.oauth.client import _client_kwargs, _server_metadata_url, _authorize_params, _register_provider, create_client @@ -40,9 +40,9 @@ def test_authorize_params_no_scheme(): @pytest.mark.django_db def test_register_provider(mocker, mocked_oauth_registry): - mocked_client_provider = mocker.Mock(spec=ClaimsProvider) - mocked_client_provider.client_name = "client_name_1" - mocked_client_provider.client_id = "client_id_1" + mocked_client_provider = mocker.Mock(spec=EligibilityVerifier) + mocked_client_provider.claims_provider.client_name = "client_name_1" + mocked_client_provider.claims_provider.client_id = "client_id_1" mocker.patch("benefits.oauth.client._client_kwargs", return_value={"client": "kwargs"}) mocker.patch("benefits.oauth.client._server_metadata_url", return_value="https://metadata.url") @@ -61,9 +61,9 @@ def test_register_provider(mocker, mocked_oauth_registry): @pytest.mark.django_db def test_create_client_already_registered(mocker, mocked_oauth_registry): - mocked_client_provider = mocker.Mock(spec=ClaimsProvider) - mocked_client_provider.client_name = "client_name_1" - mocked_client_provider.client_id = "client_id_1" + mocked_client_provider = mocker.Mock(spec=EligibilityVerifier) + mocked_client_provider.claims_provider.client_name = "client_name_1" + mocked_client_provider.claims_provider.client_id = "client_id_1" create_client(mocked_oauth_registry, mocked_client_provider) @@ -73,9 +73,9 @@ def test_create_client_already_registered(mocker, mocked_oauth_registry): @pytest.mark.django_db def test_create_client_already_not_registered_yet(mocker, mocked_oauth_registry): - mocked_client_provider = mocker.Mock(spec=ClaimsProvider) - mocked_client_provider.client_name = "client_name_1" - mocked_client_provider.client_id = "client_id_1" + mocked_client_provider = mocker.Mock(spec=EligibilityVerifier) + mocked_client_provider.claims_provider.client_name = "client_name_1" + mocked_client_provider.claims_provider.client_id = "client_id_1" mocker.patch("benefits.oauth.client._client_kwargs", return_value={"client": "kwargs"}) mocker.patch("benefits.oauth.client._server_metadata_url", return_value="https://metadata.url") diff --git a/tests/pytest/oauth/test_views.py b/tests/pytest/oauth/test_views.py index 80df6cfe8..fe01411a6 100644 --- a/tests/pytest/oauth/test_views.py +++ b/tests/pytest/oauth/test_views.py @@ -52,14 +52,14 @@ def mocked_oauth_client_or_error_redirect__error(mocked_oauth_create_client): @pytest.mark.usefixtures("mocked_session_verifier_uses_claims_verification") def test_oauth_client_or_error_redirect_no_oauth_client( app_request, - model_ClaimsProvider_with_scope_and_claim, + model_EligibilityVerifier_with_scope_and_claim, mocked_oauth_create_client, mocked_analytics_module, mocked_sentry_sdk_module, ): mocked_oauth_create_client.return_value = None - result = _oauth_client_or_error_redirect(app_request, model_ClaimsProvider_with_scope_and_claim) + result = _oauth_client_or_error_redirect(app_request, model_EligibilityVerifier_with_scope_and_claim) assert result.status_code == 302 assert result.url == reverse(ROUTE_SYSTEM_ERROR) @@ -70,9 +70,9 @@ def test_oauth_client_or_error_redirect_no_oauth_client( @pytest.mark.django_db @pytest.mark.usefixtures("mocked_session_verifier_uses_claims_verification", "mocked_oauth_client_or_error_redirect__error") def test_oauth_client_or_error_redirect_oauth_client_exception( - app_request, model_ClaimsProvider_with_scope_and_claim, mocked_analytics_module, mocked_sentry_sdk_module + app_request, model_EligibilityVerifier_with_scope_and_claim, mocked_analytics_module, mocked_sentry_sdk_module ): - result = _oauth_client_or_error_redirect(app_request, model_ClaimsProvider_with_scope_and_claim) + result = _oauth_client_or_error_redirect(app_request, model_EligibilityVerifier_with_scope_and_claim) assert result.status_code == 302 assert result.url == reverse(ROUTE_SYSTEM_ERROR) @@ -83,9 +83,9 @@ def test_oauth_client_or_error_redirect_oauth_client_exception( @pytest.mark.django_db @pytest.mark.usefixtures("mocked_session_verifier_uses_claims_verification", "mocked_oauth_create_client") def test_oauth_client_or_error_oauth_client( - app_request, model_ClaimsProvider_with_scope_and_claim, mocked_analytics_module, mocked_sentry_sdk_module + app_request, model_EligibilityVerifier_with_scope_and_claim, mocked_analytics_module, mocked_sentry_sdk_module ): - result = _oauth_client_or_error_redirect(app_request, model_ClaimsProvider_with_scope_and_claim) + result = _oauth_client_or_error_redirect(app_request, model_EligibilityVerifier_with_scope_and_claim) assert hasattr(result, "authorize_redirect") mocked_analytics_module.error.assert_not_called() @@ -239,7 +239,7 @@ def test_authorize_success_with_claim_true( app_request, mocked_session_verifier_uses_claims_verification, mocked_oauth_client_or_error_redirect__client ): verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "claim" + verifier.claims_claim = "claim" mocked_oauth_client = mocked_oauth_client_or_error_redirect__client.return_value mocked_oauth_client.authorize_access_token.return_value = {"id_token": "token", "userinfo": {"claim": "1"}} @@ -257,7 +257,7 @@ def test_authorize_success_with_claim_false( app_request, mocked_session_verifier_uses_claims_verification, mocked_oauth_client_or_error_redirect__client ): verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "claim" + verifier.claims_claim = "claim" mocked_oauth_client = mocked_oauth_client_or_error_redirect__client.return_value mocked_oauth_client.authorize_access_token.return_value = {"id_token": "token", "userinfo": {"claim": "0"}} @@ -277,7 +277,7 @@ def test_authorize_success_with_claim_error( mocked_analytics_module, ): verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "claim" + verifier.claims_claim = "claim" mocked_oauth_client = mocked_oauth_client_or_error_redirect__client.return_value mocked_oauth_client.authorize_access_token.return_value = {"id_token": "token", "userinfo": {"claim": "10"}} @@ -296,9 +296,9 @@ def test_authorize_success_without_verifier_claim( app_request, mocked_session_verifier_uses_claims_verification, mocked_oauth_client_or_error_redirect__client ): verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "" + verifier.claims_claim = "" mocked_oauth_client = mocked_oauth_client_or_error_redirect__client.return_value - mocked_oauth_client.authorize_access_token.return_value = {"id_token": "token", "userinfo": {"claim": "True"}} + mocked_oauth_client.authorize_access_token.return_value = {"id_token": "token", "userinfo": {"claim": "1"}} result = authorize(app_request) @@ -323,7 +323,7 @@ def test_authorize_success_without_claim_in_response( access_token_response, ): verifier = mocked_session_verifier_uses_claims_verification.return_value - verifier.claims_provider.claim = "claim" + verifier.claims_claim = "claim" mocked_oauth_client = mocked_oauth_client_or_error_redirect__client.return_value mocked_oauth_client.authorize_access_token.return_value = access_token_response