Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/services/organisation_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,13 @@ async def active_portfolio_list(self, president_id: str, selected_date: str):
raise BadRequestError("Selected date is required")

try:
try:
await self.opengin_service.get_entities(
entity=Entity(id=president_id)
)
except NotFoundError as e:
raise NotFoundError("President not found for the given ID") from e

# First retrieve the relation list of the active portfolios under given president and given date
relation = Relation(name=RelationNameEnum.AS_MINISTER.value,activeAt=Util.normalize_timestamp(selected_date),direction=RelationDirectionEnum.OUTGOING.value)
activePortfolioList = await self.opengin_service.fetch_relation(
Expand Down
93 changes: 92 additions & 1 deletion test/test_organisation_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from unittest.mock import AsyncMock, patch, MagicMock
from src.enums import EntityIdEnum, RelationDirectionEnum, RelationNameEnum
from src.exception import BadRequestError, InternalServerError
from src.exception import BadRequestError, InternalServerError, NotFoundError
from src.models import Entity, Relation
from src.utils import Util

Expand Down Expand Up @@ -196,6 +196,97 @@ async def test_enrich_department_item_not_new(
)


@pytest.mark.asyncio
async def test_active_portfolio_list_invalid_president_id(
organisation_service, mock_opengin_service
):
president_id = "invalid_president_123"
selected_date = "2021-10-27"

mock_opengin_service.get_entities.side_effect = NotFoundError("President not found")

with pytest.raises(NotFoundError):
await organisation_service.active_portfolio_list(
president_id=president_id, selected_date=selected_date
)

mock_opengin_service.get_entities.assert_called_once_with(
entity=Entity(id=president_id)
)


@pytest.mark.asyncio
async def test_active_portfolio_list_valid_president_id(
organisation_service, mock_opengin_service
):
president_id = "president_123"
selected_date = "2021-10-27"

mock_opengin_service.get_entities.return_value = [
Entity(id=president_id, name="mocked_protobuf_name")
]
mock_opengin_service.fetch_relation.return_value = [
Relation(
id="portfolio_relation_123",
relatedEntityId="portfolio_123",
name=RelationNameEnum.AS_MINISTER.value,
startTime="2020-08-09T00:00:00Z",
endTime="2022-03-08T00:00:00Z",
direction=RelationDirectionEnum.OUTGOING.value,
)
]

with patch(
"src.services.organisation_service.OrganisationService.process_portfolio_item",
new_callable=AsyncMock,
) as mock_process_portfolio_item:
mock_process_portfolio_item.return_value = {
"id": "portfolio_123",
"name": "Portfolio X",
"type": "cabinetMinister",
"isNew": False,
"ministers": [],
}

result = await organisation_service.active_portfolio_list(
president_id=president_id, selected_date=selected_date
)

assert result == {
"NoOfCabinetMinistries": 1,
"NoOfStateMinistries": 0,
"newMinistries": 0,
"newMinisters": 0,
"ministriesUnderPresident": 0,
"portfolioList": [
{
"id": "portfolio_123",
"name": "Portfolio X",
"type": "cabinetMinister",
"isNew": False,
"ministers": [],
}
],
}

mock_opengin_service.get_entities.assert_called_once_with(
entity=Entity(id=president_id)
)
mock_opengin_service.fetch_relation.assert_called_once_with(
entityId=president_id,
relation=Relation(
name=RelationNameEnum.AS_MINISTER.value,
activeAt=f"{selected_date}T00:00:00Z",
direction=RelationDirectionEnum.OUTGOING.value,
),
)
mock_process_portfolio_item.assert_called_once_with(
mock_opengin_service.fetch_relation.return_value[0],
president_id,
selected_date,
)


@pytest.mark.asyncio
async def test_departments_by_portfolio_id_success(
organisation_service, mock_opengin_service
Expand Down
Loading