Skip to content
Snippets Groups Projects
test_authentication.py 2.13 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eliot Berriot's avatar
    Eliot Berriot committed
    import pytest
    
    from funkwhale_api import plugins
    
    from funkwhale_api.common import authentication as common_authentication
    from funkwhale_api.subsonic import authentication as subsonic_authentication
    
    
    @pytest.mark.parametrize(
        "authentication_class, base_class, patched_method",
        [
            (
                common_authentication.SessionAuthentication,
                common_authentication.BaseSessionAuthentication,
                "authenticate",
            ),
            (
                common_authentication.JSONWebTokenAuthentication,
                common_authentication.authentication.JSONWebTokenAuthentication,
                "authenticate",
            ),
            (
                common_authentication.JSONWebTokenAuthenticationQS,
                common_authentication.authentication.BaseJSONWebTokenAuthentication,
                "authenticate",
            ),
            (
                common_authentication.OAuth2Authentication,
                common_authentication.BaseOAuth2Authentication,
                "authenticate",
            ),
            (
                common_authentication.BearerTokenHeaderAuth,
                common_authentication.authentication.BaseJSONWebTokenAuthentication,
                "authenticate",
            ),
            (
                subsonic_authentication.SubsonicAuthentication,
                subsonic_authentication.SubsonicAuthentication,
                "perform_authentication",
            ),
        ],
    )
    def test_authentication_calls_update_plugins_conf_with_user_settings(
        authentication_class, base_class, patched_method, mocker, api_request
    ):
        request = api_request.get("/")
        plugins_conf = mocker.Mock()
        setattr(request, "plugins_conf", plugins_conf)
        auth = (mocker.Mock(), None)
        authentication = authentication_class()
        base_class_authenticate = mocker.patch.object(
            base_class, patched_method, return_value=auth
        )
        update_plugins_conf_with_user_settings = mocker.patch.object(
            plugins, "update_plugins_conf_with_user_settings"
        )
    
        authentication.authenticate(request)
    
        update_plugins_conf_with_user_settings.assert_called_once_with(
            plugins_conf, user=auth[0]
        )
        base_class_authenticate.assert_called_once_with(request)