unrhodecode/rhodecode/authentication/tests/test_auth_plugin_view.py

63 lines
1.9 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
import pytest
from rhodecode.authentication.views import AuthnPluginViewBase
from rhodecode.lib.celerylib import tasks
class TestAuthPluginView:
@pytest.mark.parametrize(
"sync_active_directory_users, expected_celery_task",
[
(
True,
tasks.schedule_sync_ldap_ad_users_producer,
),
(
False,
tasks.unschedule_sync_ldap_ad_users_producer,
),
],
)
@patch("rhodecode.apps._base.BaseAppView.__init__", return_value=None)
@patch("rhodecode.authentication.views.h")
@patch("rhodecode.authentication.views.SettingsModel")
@patch.object(AuthnPluginViewBase, "load_default_context")
@patch("rhodecode.authentication.views.run_task")
def test_enable_ad_sync_schedule(
self,
run_task_mock,
load_default_context,
settings_model,
h,
_init_,
sync_active_directory_users,
expected_celery_task,
):
view = self._get_instance()
settings_post = AuthnPluginViewBase.__dict__[ # ignore decorators
"settings_post"
].__wrapped__.__wrapped__.__wrapped__
schema = MagicMock()
schema.deserialize.return_value = {"sync_active_directory_users": sync_active_directory_users}
self._plugin.get_settings_schema.return_value = schema
settings_post(view)
run_task_mock.assert_called_once_with(expected_celery_task)
def _get_instance(self):
# since base __init__ was patched, there is a need to inject mocks manually
self._context = MagicMock()
self._request = MagicMock()
self._plugin = MagicMock()
view = AuthnPluginViewBase(self._context, self._request)
view.request = self._request
view.plugin = self._plugin
view.context = self._context
return view