"""Functional tests for fetching a collaborator's splits.""" from unittest.mock import ANY from oto import status from tests.testutils import db, mock_auth @db.test_schema_default_seed def test_get_collaborator_splits_returns_all_splits_for_collaborator( auth_client, mocker ): """Returns all of the collaborator's splits when no split type filter is given.""" mock_auth(mocker, 24601) result = auth_client.get( "/collaborators/1/splits", ) assert result.status_code == status.OK sort_key = lambda s: s["id"] # noqa: E731 splits = result.get_json()["splits"] assert sorted(splits, key=sort_key) == [ { "id": 1, "identifier": "ABCD1234", "split_rate": 0.1, "split_type_id": 1, "collaborator_id": 1, "rate_type": "NET", "created_date": ANY, "updated_date": None, "created_by": None, "updated_by": None, "source": None, }, { "id": 3, "identifier": "12341234", "split_rate": 0.1, "split_type_id": 1, "collaborator_id": 1, "rate_type": "NET", "created_date": ANY, "updated_date": None, "created_by": None, "updated_by": None, "source": None, }, { "id": 5, "identifier": "12341234", "split_rate": 0.2, "split_type_id": 2, "collaborator_id": 1, "rate_type": "NET", "created_date": ANY, "updated_date": None, "created_by": None, "updated_by": None, "source": None, }, { "id": 1000, "identifier": "1", "split_rate": 0.25, "split_type_id": 2, "collaborator_id": 1, "rate_type": "NET", "created_date": ANY, "updated_date": None, "created_by": None, "updated_by": None, "source": None, }, ] @db.test_schema_default_seed def test_get_collaborator_splits_filters_by_split_types(auth_client, mocker): """Only splits of the requested type are returned.""" mock_auth(mocker, 24601) result = auth_client.get( "/collaborators/1/splits", query_string={"split_types": [2]} ) assert result.status_code == status.OK splits = result.get_json()["splits"] assert sorted(item["id"] for item in splits) == [5, 1000] @db.test_schema_default_seed def test_get_collaborator_splits_returns_empty_when_filter_excludes_all( auth_client, mocker ): """Returns an empty list when split_types filter matches nothing for that collaborator.""" mock_auth(mocker, 90210) result = auth_client.get( "/collaborators/5/splits", query_string={"split_types": [1]} ) assert result.status_code == status.OK splits = result.get_json()["splits"] assert splits == [] @db.test_schema_default_seed def test_get_collaborator_splits_forbidden_for_other_vendors_collaborator( auth_client, mocker ): """Returns 403 when the collaborator belongs to a vendor the caller can't access.""" mock_auth(mocker, 90210) result = auth_client.get( "/collaborators/1/splits", ) assert result.status_code == status.FORBIDDEN @db.test_schema_default_seed def test_get_collaborator_splits_bad_request_on_invalid_split_type(auth_client, mocker): """Returns 400 when split_types contains an invalid SplitTypeId.""" mock_auth(mocker, 24601) result = auth_client.get( "/collaborators/1/splits", query_string={"split_types": [999]} ) assert result.status_code == status.BAD_REQUEST