indico-plugins/livesync/tests/agent_test.py
2024-01-02 20:51:21 +01:00

77 lines
2.7 KiB
Python

# This file is part of the Indico plugins.
# Copyright (C) 2002 - 2024 CERN
#
# The Indico plugins are free software; you can redistribute
# them and/or modify them under the terms of the MIT License;
# see the LICENSE file for more details.
from unittest.mock import MagicMock
import pytest
from indico_livesync.base import LiveSyncBackendBase
from indico_livesync.models.queue import ChangeType, EntryType, LiveSyncQueueEntry
from indico_livesync.plugin import LiveSyncPlugin
class DummyBackend(LiveSyncBackendBase):
"""Dummy agent
A dummy agent for testing
"""
def _precache_categories(self):
pass
class NonDescriptiveAgent(LiveSyncBackendBase):
"""Nondescriptive agent"""
def test_title_description():
"""Test if title/description are extracted from docstring"""
assert DummyBackend.title == 'Dummy agent'
assert DummyBackend.description == 'A dummy agent for testing'
assert NonDescriptiveAgent.title == 'Nondescriptive agent'
assert NonDescriptiveAgent.description == 'no description available'
def test_run(mocker):
"""Test if run calls the fetcher/uploader properly"""
mocker.patch.object(DummyBackend, 'fetch_records')
backend = DummyBackend(MagicMock())
mock_uploader = MagicMock()
backend.uploader = lambda *x, **kw: mock_uploader
backend.run()
assert backend.fetch_records.called
assert mock_uploader.run.called
def test_fetch_records(db, dummy_event, dummy_agent):
"""Test if the correct records are fetched"""
backend = DummyBackend(dummy_agent)
queue = [
LiveSyncQueueEntry(change=ChangeType.created, type=EntryType.event, event=dummy_event, processed=True),
LiveSyncQueueEntry(change=ChangeType.created, type=EntryType.event, event=dummy_event)
]
dummy_agent.queue = queue
db.session.flush()
assert backend.fetch_records() == [queue[1]]
@pytest.mark.parametrize('disabled', (True, False))
@pytest.mark.parametrize('whitelisted', (True, False))
def test_fetch_records_categories_disabled(db, dummy_event, dummy_category, dummy_agent, disabled, whitelisted):
"""Test if the correct records are fetched"""
backend = DummyBackend(dummy_agent)
queue = [
LiveSyncQueueEntry(change=ChangeType.protection_changed, type=EntryType.category, category=dummy_category),
LiveSyncQueueEntry(change=ChangeType.created, type=EntryType.event, event=dummy_event)
]
dummy_agent.queue = queue
LiveSyncPlugin.settings.set('skip_category_changes', disabled)
db.session.flush()
expected = queue[1:] if disabled and not whitelisted else queue
whitelist = (dummy_category.id,) if whitelisted else ()
assert backend.fetch_records(whitelist) == expected