Skip to content

Commit

Permalink
[QOLSVC-5478] add unit tests for logout flow
Browse files Browse the repository at this point in the history
  • Loading branch information
ThrawnCA committed Oct 11, 2024
1 parent 225c62c commit 564c602
Showing 1 changed file with 56 additions and 0 deletions.
56 changes: 56 additions & 0 deletions ckanext/oidc_pkce/tests/test_plugin.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,65 @@
# encoding: utf-8

from unittest.mock import MagicMock
import pytest

import ckan.plugins as p

from ckanext.oidc_pkce import plugin as plugin_module


class MockUser(object):
""" Stub class to represent a logged-in user.
"""

def __init__(self, name):
""" Set up a stub name to return.
"""
self.name = name

def is_authenticated(self):
return self.name is not None


@pytest.mark.ckan_config("ckan.plugins", "oidc_pkce")
@pytest.mark.usefixtures("with_plugins")
def test_plugin():
assert p.plugin_loaded("oidc_pkce")


if p.toolkit.check_ckan_version('2.10'):

@pytest.mark.ckan_config("ckanext.oidc_pkce.base_url", "http://unit-test")
@pytest.mark.ckan_config("ckanext.oidc_pkce.logout_path", "/logout")
def test_logout_flow():
plugin_module.user_view = MagicMock()
plugin_module.tk = MagicMock()
plugin = plugin_module.OidcPkcePlugin()
plugin_module.session = {}

# no-op due to not being logged in
plugin_module.current_user = MockUser(None)
assert plugin.logout() is None
plugin_module.user_view.logout.assert_not_called()

# no-op due to flag in session
plugin_module.session['_in_logout'] = True
plugin_module.current_user = MockUser('test')
assert plugin.logout() is None
plugin_module.user_view.logout.assert_not_called()
assert plugin_module.session == {}

# call core view and issue redirect
result = plugin.logout()
plugin_module.user_view.logout.assert_called_once()
assert result.location == 'http://unit-test/logout'

@pytest.mark.ckan_config("ckanext.oidc_pkce.base_url", "http://unit-test")
def test_logout_disabled():
plugin_module.user_view = MagicMock()
plugin = plugin_module.OidcPkcePlugin()
plugin_module.current_user = {'name': 'test'}

# no-op due to config not having a logout path
assert plugin.logout() is None
plugin_module.user_view.logout.assert_not_called()

0 comments on commit 564c602

Please sign in to comment.