2024-01-02 20:51:21 +01:00

53 lines
2.2 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.
from datetime import timedelta
import pytest
from requests.exceptions import HTTPError
from indico.core.db.sqlalchemy.util.session import no_autoflush
from indico.modules.logs import EventLogRealm, LogKind
from indico.modules.vc.models.vc_rooms import VCRoom, VCRoomEventAssociation, VCRoomLinkType, VCRoomStatus
from indico.util.date_time import now_utc
from indico_vc_zoom.util import ZoomMeetingType
@pytest.fixture
def zoom_client(mocker):
client = mocker.patch('indico_vc_zoom.api.ZoomIndicoClient', autospec=True)
client.return_value = client
return client
@pytest.fixture
@no_autoflush
def dummy_vc_room(db, dummy_event, dummy_user):
zoom_data = {'zoom_id': 0, 'meeting_type': ZoomMeetingType.scheduled_meeting}
room = VCRoom(type='zoom', name='test', status=VCRoomStatus.created, created_by_user=dummy_user, data=zoom_data)
room_association = VCRoomEventAssociation(vc_room=room, link_type=VCRoomLinkType.event, data=zoom_data)
dummy_event.vc_room_associations = [room_association]
db.session.flush()
return room
@pytest.mark.usefixtures('dummy_vc_room')
def test_meeting_reschedule(dummy_event, zoom_client):
from indico_vc_zoom.task import refresh_meetings
meeting_time = now_utc() - timedelta(days=30)
log_entry = dummy_event.log(EventLogRealm.event, LogKind.change, 'Test', 'Test', data={'State': 'pending'})
dummy_event.start_dt = meeting_time + timedelta(days=5)
refresh_meetings([room.vc_room for room in dummy_event.vc_room_associations], dummy_event, log_entry)
assert zoom_client.update_meeting.call_count == 1
assert log_entry.data['State'] == 'succeeded'
zoom_client.update_meeting.side_effect = HTTPError()
with pytest.raises(HTTPError):
refresh_meetings([room.vc_room for room in dummy_event.vc_room_associations], dummy_event, log_entry)
assert zoom_client.update_meeting.call_count == 2
assert log_entry.data['State'] == 'failed'