"""Projects router tests.""" import pytest from fastapi.testclient import TestClient from pytest_mock import MockerFixture @pytest.fixture def project_contributors() -> dict: return { "project": {"project_id": 101}, "contributors": [ { "id": 42, "uuid": "550e8400-e29b-41d4-a716-446655440000", "name": "Test Artist", "spotify_id": "3TVXtAsR1Inumwj472S9r4", "apple_music_id": None, "spotify_artist_key": None, "isni": None, "company_brand_uuid": "11110000-2222-4333-8444-555555555555", "parent_company_uuid": "66660000-7777-4888-8999-aaaaaaaaaaaa", "artist_info_ids": [123, 456], "global_participant": { "id": "b1a2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", }, "label": { "uuid": "cccc0000-dddd-4eee-8fff-aaaaaaaaaaaa", "vendor_id": 100, "subaccount_id": 0, }, } ], } class TestGetProjectContributors: def test_returns_contributors( self, mocker: MockerFixture, test_client: TestClient, project_contributors: dict, ) -> None: get_project_contributors_mock = mocker.patch( "contributor.api.routers.projects.project_logic.get_project_contributors", return_value=[project_contributors], ) response = test_client.get("/projects/101") get_project_contributors_mock.assert_called_once_with( mocker.ANY, project_ids=[101], profiles=mocker.ANY, ) assert response.status_code == 200 assert response.json() == project_contributors class TestLoadProjectContributors: def test_returns_project_contributors( self, mocker: MockerFixture, test_client: TestClient, project_contributors: dict, ) -> None: mocker.patch( "contributor.api.routers.projects.project_logic.get_project_contributors", return_value=[project_contributors], ) response = test_client.post( "/projects/dataloader", json={"projects": [{"project_id": 101}]}, ) assert response.status_code == 200 assert response.json() == [project_contributors] def test_returns_multiple_projects( self, mocker: MockerFixture, test_client: TestClient, project_contributors: dict, ) -> None: second_project = { "project": {"project_id": 202}, "contributors": [ { "id": 84, "uuid": "123e4567-e89b-41d4-a456-426614174000", "name": "Second Artist", "spotify_id": None, "apple_music_id": None, "spotify_artist_key": None, "isni": None, "company_brand_uuid": None, "parent_company_uuid": None, "artist_info_ids": [], "global_participant": None, "label": { "uuid": "dddd1111-eeee-41dd-8fff-aaaaaaaaaaaa", "vendor_id": 100, "subaccount_id": 0, }, } ], } mocker.patch( "contributor.api.routers.projects.project_logic.get_project_contributors", return_value=[project_contributors, second_project], ) response = test_client.post( "/projects/dataloader", json={ "projects": [ {"project_id": 101}, {"project_id": 202}, ] }, ) assert response.status_code == 200 assert response.json() == [project_contributors, second_project] def test_returns_empty_list_when_none_found( self, mocker: MockerFixture, test_client: TestClient, ) -> None: mocker.patch( "contributor.api.routers.projects.project_logic.get_project_contributors", return_value=[], ) response = test_client.post( "/projects/dataloader", json={"projects": [{"project_id": 999}]}, ) assert response.status_code == 200 assert response.json() == []