"""Integration tests for schedule endpoints.""" import pytest from tests.integration.conftest import ows_abacus_schedule_api_client @pytest.mark.jira('ACC-5490') def test_post_get_schedule(basic_headers, clear_db): """POST and GET /schedule .""" ows_abacus_schedule_client = ows_abacus_schedule_api_client(basic_headers) schedule_body = { 'schedule_name': 'test_name', 'conditions': None, 'target_type': 'contributor', 'target_id': '1234-1234-1234-1234', } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 assert 'schedule_id' in res_post.json() schedule_body['schedule_id'] = res_post.json()['schedule_id'] assert res_post.json() == schedule_body schedule_id = res_post.json()['schedule_id'] res_get = ows_abacus_schedule_client.get_schedule_by_id(schedule_id) assert res_get.status_code == 200 assert res_get.json()['schedule_id'] == schedule_id @pytest.mark.jira('PLATFORM-4483') def test_get_schedule_by_id_authorization( auth_headers: dict[str, str], unauthorized_headers: dict[str, str], create_schedule_fixture: None, ) -> None: """Test authorization for GET /schedule/ endpoint.""" authorized_client = ows_abacus_schedule_api_client(auth_headers) # Id of 1 defined in create_schedule_fixture res = authorized_client.get_schedule_by_id(1) assert res.status_code == 200 assert res.json()['schedule_id'] == 1 unauthorized_client = ows_abacus_schedule_api_client(unauthorized_headers) res = unauthorized_client.get_schedule_by_id(1) assert res.status_code == 403 assert res.json()['message'] == 'User is forbidden' @pytest.mark.jira('ACC-5490') def test_put_schedule(basic_headers, clear_db): """PUT /schedule/ .""" ows_abacus_schedule_client = ows_abacus_schedule_api_client(basic_headers) schedule_body = { 'schedule_name': 'test_name', 'conditions': None, 'target_type': 'contributor', 'target_id': '1234-1234-1234-1234', } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 assert 'schedule_id' in res_post.json() schedule_body['schedule_id'] = res_post.json()['schedule_id'] assert res_post.json() == schedule_body schedule_id = res_post.json()['schedule_id'] schedule_body_upd = {'schedule_name': 'test_name_updated', 'conditions': None} res_put = ows_abacus_schedule_client.put_schedule(schedule_id, schedule_body_upd) assert res_put.status_code == 200 assert res_put.json()['schedule_name'] == schedule_body_upd['schedule_name'] res_get = ows_abacus_schedule_client.get_schedule_by_id(schedule_id) assert res_get.status_code == 200 assert res_get.json()['schedule_name'] == schedule_body_upd['schedule_name'] @pytest.mark.jira('ACC-5490') def test_get_schedule_by_target_type(basic_headers, clear_db): """GET /schedules/{target_type}/{target_id} .""" ows_abacus_schedule_client = ows_abacus_schedule_api_client(basic_headers) schedule_body = { 'schedule_name': 'test_name', 'conditions': None, 'target_type': 'contributor', 'target_id': '1234-1234-1234-1234', } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 res_get = ows_abacus_schedule_client.get_schedule_by_target_type( schedule_body['target_type'], schedule_body['target_id'] ) assert res_get.status_code == 200 assert res_get.json()[0]['target_type'] == schedule_body['target_type'] @pytest.mark.jira('PLATFORM-4483') def test_get_schedule_by_target_type_authorization( auth_headers: dict[str, str], unauthorized_headers: dict[str, str], create_schedule_fixture: None, ) -> None: """Test authorization for GET /schedule/ endpoint.""" authorized_client = ows_abacus_schedule_api_client(auth_headers) # Target id of 1 defined in create_schedule_fixture res = authorized_client.get_schedule_by_target_type( target_type='contributor', target_id=1 ) assert res.status_code == 200 assert len(res.json()) == 1 assert res.json()[0]['schedule_id'] == 1 unauthorized_client = ows_abacus_schedule_api_client(unauthorized_headers) res = unauthorized_client.get_schedule_by_target_type( target_type='contributor', target_id=1 ) assert res.status_code == 403 assert res.json()['message'] == 'User is forbidden' @pytest.mark.jira('ACC-6091') def test_get_schedules_exclude_contributor_only_schedules(basic_headers, clear_db): """Test to get schedule by target. "contributor only" schedules are excluded. """ ows_abacus_schedule_client = ows_abacus_schedule_api_client(basic_headers) target_id = '1234-1234-1234-1234' schedule_body = { 'schedule_name': 'test_name_a', 'conditions': None, 'target_type': 'contributor', 'target_id': target_id, } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 schedule_id = res_post.json()['schedule_id'] put_body_assign = {'assigned_target_ids': [target_id]} res_put = ows_abacus_schedule_client.put_schedule_attachments_by_id_and_target( schedule_id, 'contributor', put_body_assign ) assert res_put.status_code == 200 assert res_put.text == 'Schedule Attachments created/deleted successfully.' schedule_body = { 'schedule_name': 'test_name_b', 'conditions': None, 'target_type': 'contributor', 'target_id': target_id, } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 schedule_body = { 'schedule_name': 'test_name_c', 'conditions': None, 'target_type': 'contributor', 'target_id': target_id, } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 schedule_body = { 'schedule_name': 'test_name_d', 'conditions': None, 'target_type': 'contributor', 'target_id': '123', } res_post = ows_abacus_schedule_client.post_schedule(schedule_body) assert res_post.status_code == 201 get_schedules = ows_abacus_schedule_client.get_schedule_by_target_type( 'contributor', target_id ) assert get_schedules.status_code == 200 assert len(get_schedules.json()) == 2 assert 'test_name_b' in str(get_schedules.json()) assert 'test_name_c' in str(get_schedules.json()) assert 'test_name_a' not in str(get_schedules.json()) assert 'test_name_d' not in str(get_schedules.json()) @pytest.mark.jira('ACC-6161') def test_get_contributor_only_schedules(basic_headers, clear_db): """Test to get contributor only schedules.""" ows_abacus_schedule_client = ows_abacus_schedule_api_client(basic_headers) target_id = '1234-1234-1234-1234' schedule_body_a = { 'schedule_name': 'test_name_a', 'conditions': None, 'target_type': 'contributor', 'target_id': target_id, } res_post = ows_abacus_schedule_client.post_schedule(schedule_body_a) assert res_post.status_code == 201 schedule_id = res_post.json()['schedule_id'] put_body_assign = {'assigned_target_ids': [target_id]} res_put = ows_abacus_schedule_client.put_schedule_attachments_by_id_and_target( schedule_id, 'contributor', put_body_assign ) assert res_put.status_code == 200 assert res_put.text == 'Schedule Attachments created/deleted successfully.' schedule_body_b = { 'schedule_name': 'test_name_b', 'conditions': None, 'target_type': 'contributor', 'target_id': target_id, } res_post = ows_abacus_schedule_client.post_schedule(schedule_body_b) assert res_post.status_code == 201 schedule_id = res_post.json()['schedule_id'] put_body_assign = {'assigned_target_ids': [target_id]} res_put = ows_abacus_schedule_client.put_schedule_attachments_by_id_and_target( schedule_id, 'contribution', put_body_assign ) assert res_put.status_code == 200 assert res_put.text == 'Schedule Attachments created/deleted successfully.' get_schedules = ows_abacus_schedule_client.get_schedule_by_target_type( 'contributor', target_id, {'include_only_schedules': True} ) assert get_schedules.status_code == 200 assert len(get_schedules.json()) == 1 assert get_schedules.json()[0]['schedule_name'] == schedule_body_a['schedule_name'] assert get_schedules.json()[0]['target_type'] == schedule_body_a['target_type'] assert get_schedules.json()[0]['target_id'] == schedule_body_a['target_id']