"""Functional tests for schedule.""" from abacus_schedule.constants import constants from tests.utils.factories import ScheduleAttachmentFactory, ScheduleFactory def test_get_schedule(fixture_client): """Test GET endpoint for /schedule/.""" schedule_id = 1231 mock_schedule = ScheduleFactory.create(schedule_id=schedule_id) result = fixture_client.get(f'/schedule/{schedule_id}') assert result.status_code == 200 assert result.json == { 'target_id': mock_schedule.target_id, 'conditions': {}, 'schedule_name': mock_schedule.schedule_name, 'schedule_id': schedule_id, 'target_type': constants.SCHEDULE_TARGET_TYPE.CONTRIBUTOR, } def test_get_schedules_by_target(fixture_client): """Test GET endpoint for /schedules//.""" target_id = '456-456' ScheduleFactory.create(target_id=target_id, schedule_name='bbbbb') ScheduleFactory.create(target_id=target_id) ScheduleFactory.create(target_id=target_id, schedule_name='aaaaa') ScheduleFactory.create(target_id='123') result = fixture_client.get(f'/schedules/contributor/{target_id}') assert result.status_code == 200 assert len(result.json) == 3 # test that it sorts by schedule name assert result.json[0]['schedule_name'] == 'aaaaa' assert result.json[1]['schedule_name'] == 'bbbbb' def test_get_schedules_exclude_contributor_only_schedules(fixture_client): """Test GET endpoint for /schedules//. "contributor only" schedules are excluded. """ target_id = '456-456' schedule = ScheduleFactory.create(target_id=target_id, schedule_name='bbbbb') ScheduleAttachmentFactory.create( schedule=schedule, target_id=target_id, target_type='contributor' ) ScheduleFactory.create(target_id=target_id, schedule_name='eeeee') ScheduleFactory.create(target_id=target_id, schedule_name='aaaaa') ScheduleFactory.create(target_id='123') result = fixture_client.get(f'/schedules/contributor/{target_id}') assert result.status_code == 200 assert len(result.json) == 2 assert all(res['schedule_name'] in ['aaaaa', 'eeeee'] for res in result.json) def test_get_schedules_include_contributor_only_schedules(fixture_client): """Test GET endpoint for /schedules//. if "include_only_schedules" is true then "contributor only" schedules are retuned. """ target_id = '456-456' schedule = ScheduleFactory.create(target_id=target_id, schedule_name='bbbbb') ScheduleAttachmentFactory.create( schedule=schedule, target_id=target_id, target_type='contributor' ) ScheduleFactory.create(target_id=target_id, schedule_name='eeeee') ScheduleFactory.create(target_id=target_id, schedule_name='aaaaa') ScheduleFactory.create(target_id='123') result = fixture_client.get( f'/schedules/contributor/{target_id}?include_only_schedules=true' ) assert result.status_code == 200 assert len(result.json) == 1 assert result.json[0]['schedule_name'] == 'bbbbb' def test_update_schedule(fixture_client): """Test PUT endpoint for /schedule/.""" schedule_id = 1231 ScheduleFactory.create(schedule_id=schedule_id, schedule_name='old schedule name') result = fixture_client.put( f'/schedule/{schedule_id}', json={'schedule_name': 'updated name'} ) assert result.status_code == 200 assert result.json['schedule_name'] == 'updated name' assert result.json['schedule_id'] == 1231 def test_create_schedule(fixture_client): """Test POST endpoint for /schedule.""" mock_schedule_body = { 'conditions': {'auto_add': True}, 'target_id': 'contributor-target-id', 'schedule_name': 'created schedule', 'target_type': 'contributor', } result = fixture_client.post('/schedule', json=mock_schedule_body) assert result.status_code == 201 result_json = result.json assert result_json['conditions'] == mock_schedule_body['conditions'] assert result_json['target_id'] == mock_schedule_body['target_id'] assert result_json['target_type'] == mock_schedule_body['target_type'] assert result_json['schedule_name'] == mock_schedule_body['schedule_name']