"""Tests for contributor_role MySQL queries.""" from pytest_mock import MockerFixture from contributor.queries.mysql.contributor_role import ( ContributorRole, ContributorRoleCategory, get_role_by_uuid, get_roles, get_roles_by_category_uuid, get_roles_by_category_uuids, ) class TestGetRoles: def test_returns_role_dicts_when_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() query_result = mocker.Mock() session.query.return_value = query_result query_result.all.return_value = [ ContributorRole( id=85, uuid="853a52b9-8e8e-42a4-b74c-2be7b1926649", name="Choir Member", ddex_name="ChoirMember", contributor_role_category_id=4, ), ContributorRole( id=302, uuid="46c51491-afe4-4b08-a67e-643b23a33647", name="Sub-Lyricist", ddex_name="SubLyricist", contributor_role_category_id=1, ), ] result = get_roles(session=session) session.query.assert_called_once_with(ContributorRole) query_result.all.assert_called_once_with() assert result == [ { "id": 85, "uuid": "853a52b9-8e8e-42a4-b74c-2be7b1926649", "name": "Choir Member", "ddex_name": "ChoirMember", "apple_name": None, "contributor_role_category_id": 4, }, { "id": 302, "uuid": "46c51491-afe4-4b08-a67e-643b23a33647", "name": "Sub-Lyricist", "ddex_name": "SubLyricist", "apple_name": None, "contributor_role_category_id": 1, }, ] def test_returns_empty_list_when_no_roles_found( self, mocker: MockerFixture ) -> None: session = mocker.Mock() query_result = mocker.Mock() session.query.return_value = query_result query_result.all.return_value = [] result = get_roles(session=session) session.query.assert_called_once_with(ContributorRole) query_result.all.assert_called_once_with() assert result == [] class TestGetRoleByUuid: def test_returns_role_dict_when_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result role = ContributorRole( id=85, uuid="853a52b9-8e8e-42a4-b74c-2be7b1926649", name="Choir Member", ddex_name="ChoirMember", contributor_role_category_id=4, ) category = ContributorRoleCategory( id=4, uuid="8981c256-e993-450d-8f18-905930bdf59e", name="Performer", ) execute_result.first.return_value = (role, category) result = get_role_by_uuid( session=session, uuid="853a52b9-8e8e-42a4-b74c-2be7b1926649", ) session.execute.assert_called_once() execute_result.first.assert_called_once_with() assert result == { "uuid": "853a52b9-8e8e-42a4-b74c-2be7b1926649", "name": "Choir Member", "ddex_name": "ChoirMember", "category": { "uuid": "8981c256-e993-450d-8f18-905930bdf59e", "name": "Performer", }, } stmt = session.execute.call_args.args[0] where_clause = stmt.whereclause assert "contributor_roles.uuid" in str(where_clause) def test_returns_none_when_not_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.first.return_value = None result = get_role_by_uuid( session=session, uuid="1099d0c4-869b-4538-8f5b-4fc48d5d62b7", ) session.execute.assert_called_once() execute_result.first.assert_called_once_with() assert result is None class TestGetRolesByCategoryUuid: def test_returns_role_dicts_when_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result category = ContributorRoleCategory( id=8, uuid="f977ff0a-a70f-478a-88ce-6cce58034c65", name="Visual Production Contributor", ) execute_result.all.return_value = [ ( ContributorRole( id=213, uuid="56b44d60-371d-45f3-96d0-b51a08b00c65", name="Second Unit Director", ddex_name="SecondUnitDirector", contributor_role_category_id=8, ), category, ), ( ContributorRole( id=179, uuid="a78ae7ed-ea77-4d7e-a378-e90fb117abc2", name="Graphic Designer", ddex_name="GraphicDesigner", contributor_role_category_id=8, ), category, ), ] result = get_roles_by_category_uuid( session=session, uuid="f977ff0a-a70f-478a-88ce-6cce58034c65", ) session.execute.assert_called_once() execute_result.all.assert_called_once_with() assert result == [ { "uuid": "56b44d60-371d-45f3-96d0-b51a08b00c65", "name": "Second Unit Director", "ddex_name": "SecondUnitDirector", "category": { "uuid": "f977ff0a-a70f-478a-88ce-6cce58034c65", "name": "Visual Production Contributor", }, }, { "uuid": "a78ae7ed-ea77-4d7e-a378-e90fb117abc2", "name": "Graphic Designer", "ddex_name": "GraphicDesigner", "category": { "uuid": "f977ff0a-a70f-478a-88ce-6cce58034c65", "name": "Visual Production Contributor", }, }, ] stmt = session.execute.call_args.args[0] where_clause = stmt.whereclause assert "contributor_role_categories.uuid" in str(where_clause) def test_returns_empty_list_when_not_found(self, mocker: MockerFixture) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.all.return_value = [] result = get_roles_by_category_uuid( session=session, uuid="ba494180-7e22-4c47-9ebf-9024b7aa421b", ) session.execute.assert_called_once() execute_result.all.assert_called_once_with() assert result == [] class TestGetRolesByCategoryUuids: def test_returns_category_roles_grouped_by_uuid( self, mocker: MockerFixture ) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result category_a = ContributorRoleCategory( id=4, uuid="8981c256-e993-450d-8f18-905930bdf59e", name="Performer", ) category_b = ContributorRoleCategory( id=8, uuid="f977ff0a-a70f-478a-88ce-6cce58034c65", name="Visual Production Contributor", ) execute_result.all.return_value = [ ( ContributorRole( id=85, uuid="853a52b9-8e8e-42a4-b74c-2be7b1926649", name="Choir Member", ddex_name="ChoirMember", contributor_role_category_id=4, ), category_a, ), ( ContributorRole( id=213, uuid="56b44d60-371d-45f3-96d0-b51a08b00c65", name="Second Unit Director", ddex_name="SecondUnitDirector", contributor_role_category_id=8, ), category_b, ), ] result = get_roles_by_category_uuids( session=session, uuids=[ "8981c256-e993-450d-8f18-905930bdf59e", "f977ff0a-a70f-478a-88ce-6cce58034c65", ], ) session.execute.assert_called_once() execute_result.all.assert_called_once_with() assert result == [ { "category_uuid": "8981c256-e993-450d-8f18-905930bdf59e", "roles": [ { "uuid": "853a52b9-8e8e-42a4-b74c-2be7b1926649", "name": "Choir Member", "ddex_name": "ChoirMember", "category": { "uuid": "8981c256-e993-450d-8f18-905930bdf59e", "name": "Performer", }, } ], }, { "category_uuid": "f977ff0a-a70f-478a-88ce-6cce58034c65", "roles": [ { "uuid": "56b44d60-371d-45f3-96d0-b51a08b00c65", "name": "Second Unit Director", "ddex_name": "SecondUnitDirector", "category": { "uuid": "f977ff0a-a70f-478a-88ce-6cce58034c65", "name": "Visual Production Contributor", }, } ], }, ] stmt = session.execute.call_args.args[0] where_clause = stmt.whereclause assert "contributor_role_categories.uuid" in str(where_clause) def test_returns_empty_roles_for_categories_with_no_matches( self, mocker: MockerFixture ) -> None: session = mocker.Mock() execute_result = mocker.Mock() session.execute.return_value = execute_result execute_result.all.return_value = [] result = get_roles_by_category_uuids( session=session, uuids=[ "ea30dcf2-41b7-4682-8082-50db93349933", "4cf2faea-5a5a-4edd-9431-b054031edee0", ], ) session.execute.assert_called_once() execute_result.all.assert_called_once_with() assert result == [ { "category_uuid": "ea30dcf2-41b7-4682-8082-50db93349933", "roles": [], }, { "category_uuid": "4cf2faea-5a5a-4edd-9431-b054031edee0", "roles": [], }, ] def test_returns_empty_list_when_no_category_uuids( self, mocker: MockerFixture ) -> None: session = mocker.Mock() result = get_roles_by_category_uuids(session=session, uuids=[]) session.execute.assert_not_called() assert result == []