mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-13 07:29:39 +00:00
136 lines
4.6 KiB
Python
136 lines
4.6 KiB
Python
# This file is part of the Indico plugins.
|
|
# Copyright (C) 2020 - 2024 CERN and ENEA
|
|
#
|
|
# 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.
|
|
|
|
import pytest
|
|
|
|
from indico.core.plugins import plugin_engine
|
|
from indico.modules.vc.models.vc_rooms import VCRoom, VCRoomEventAssociation, VCRoomLinkType, VCRoomStatus
|
|
|
|
from indico_vc_zoom.plugin import ZoomPlugin
|
|
|
|
|
|
@pytest.fixture
|
|
def zoom_plugin(app):
|
|
"""Return a callable which lets you create dummy Zoom room occurrences."""
|
|
plugin = ZoomPlugin(plugin_engine, app)
|
|
plugin.settings.set('email_domains', 'megacorp.xyz')
|
|
return plugin
|
|
|
|
|
|
@pytest.fixture
|
|
def create_meeting(create_user, dummy_event, db, zoom_plugin):
|
|
def _create_meeting(name='New Room'):
|
|
user_joe = create_user(1, email='don.orange@megacorp.xyz')
|
|
|
|
vc_room = VCRoom(
|
|
type='zoom',
|
|
status=VCRoomStatus.created,
|
|
name=name,
|
|
created_by_id=0,
|
|
data={
|
|
'description': 'something something',
|
|
'password': '1234',
|
|
'host': user_joe.identifier,
|
|
'meeting_type': 'meeting',
|
|
'mute_host_video': False,
|
|
'mute_audio': False,
|
|
'mute_participant_video': False,
|
|
'waiting_room': False
|
|
}
|
|
)
|
|
VCRoomEventAssociation(linked_event=dummy_event, vc_room=vc_room, link_type=VCRoomLinkType.event, data={})
|
|
db.session.flush()
|
|
zoom_plugin.create_room(vc_room, dummy_event)
|
|
return vc_room
|
|
return _create_meeting
|
|
|
|
|
|
@pytest.fixture
|
|
def zoom_api(create_user, mocker):
|
|
"""Mock some Zoom API endpoints."""
|
|
api_create_meeting = mocker.patch('indico_vc_zoom.plugin.ZoomIndicoClient.create_meeting')
|
|
api_create_meeting.return_value = {
|
|
'id': '12345abc',
|
|
'join_url': 'https://example.com/kitties',
|
|
'start_url': 'https://example.com/puppies',
|
|
'password': '1234',
|
|
'host_id': 'don.orange@megacorp.xyz',
|
|
'topic': 'New Room',
|
|
'agenda': 'something something',
|
|
'settings': {
|
|
'host_video': True,
|
|
'mute_upon_entry': False,
|
|
'participant_video': True,
|
|
'waiting_room': False
|
|
}
|
|
}
|
|
|
|
api_update_meeting = mocker.patch('indico_vc_zoom.plugin.ZoomIndicoClient.update_meeting')
|
|
api_update_meeting.return_value = {}
|
|
|
|
create_user(1, email='don.orange@megacorp.xyz')
|
|
|
|
api_get_user = mocker.patch('indico_vc_zoom.plugin.ZoomIndicoClient.get_user')
|
|
api_get_user.return_value = {
|
|
'id': '7890abcd',
|
|
'email': 'don.orange@megacorp.xyz'
|
|
}
|
|
|
|
api_get_meeting = mocker.patch('indico_vc_zoom.plugin.ZoomIndicoClient.get_meeting')
|
|
api_get_meeting.return_value = api_create_meeting.return_value
|
|
|
|
return {
|
|
'create_meeting': api_create_meeting,
|
|
'get_meeting': api_get_meeting,
|
|
'update_meeting': api_update_meeting,
|
|
'get_user': api_get_user
|
|
}
|
|
|
|
|
|
def test_room_creation(create_meeting, zoom_api):
|
|
vc_room = create_meeting()
|
|
assert vc_room.data['url'] == 'https://example.com/kitties'
|
|
assert vc_room.data['host'] == 'User:1'
|
|
assert zoom_api['create_meeting'].called
|
|
|
|
|
|
def test_password_change(create_user, mocker, create_meeting, zoom_plugin, zoom_api):
|
|
create_user(2, email='joe.bidon@megacorp.xyz')
|
|
vc_room = create_meeting()
|
|
vc_room.data['password'] = '1337'
|
|
|
|
# simulate changes between calls of "GET meeting"
|
|
def _get_meeting(self, meeting_id):
|
|
result = {
|
|
'id': meeting_id,
|
|
'join_url': 'https://example.com/llamas' if _get_meeting.called else 'https://example.com/kitties',
|
|
'start_url': 'https://example.com/puppies',
|
|
'password': '1337' if _get_meeting.called else '1234',
|
|
'host_id': 'don.orange@megacorp.xyz',
|
|
'topic': 'New Room',
|
|
'agenda': 'something something',
|
|
'settings': {
|
|
'host_video': True,
|
|
'mute_upon_entry': False,
|
|
'participant_video': True,
|
|
'waiting_room': False
|
|
}
|
|
}
|
|
_get_meeting.called = True
|
|
return result
|
|
_get_meeting.called = False
|
|
mocker.patch('indico_vc_zoom.plugin.ZoomIndicoClient.get_meeting', _get_meeting)
|
|
|
|
zoom_plugin.update_room(vc_room, vc_room.events[0].event)
|
|
|
|
zoom_api['update_meeting'].assert_called_with('12345abc', {
|
|
'password': '1337'
|
|
})
|
|
|
|
assert vc_room.data['password'] == '1337'
|
|
assert vc_room.data['url'] == 'https://example.com/llamas'
|