Paginate get_plans to return flat list[PlanSummary] 🟥

This commit is contained in:
Daniel Roth 2026-05-12 14:45:09 +00:00
parent 8727a78f8b
commit 62acc3ce98
2 changed files with 11 additions and 10 deletions

View file

@ -1,6 +1,6 @@
import requests
from datatypes.magicplan.api.response import MagicPlanPlan, PlansListResponse
from datatypes.magicplan.api.response import MagicPlanPlan, PlanSummary, PlansListResponse
_BASE_URL = "https://cloud.magicplan.app/api/v2"
@ -10,10 +10,8 @@ class MagicPlanClient:
self._session = requests.Session()
self._session.headers.update({"customer": customer_id, "key": api_key})
def get_plans(self) -> PlansListResponse:
r = self._session.get(f"{_BASE_URL}/workgroups/plans")
r.raise_for_status()
return PlansListResponse.model_validate(r.json()["data"])
def get_plans(self) -> list[PlanSummary]:
raise NotImplementedError
def get_plan(self, plan_id: str) -> MagicPlanPlan:
return MagicPlanPlan.model_validate(self._fetch_plan(plan_id).json()["data"])

View file

@ -7,7 +7,7 @@ import pytest
import requests
from backend.magic_plan.magic_plan_client import MagicPlanClient
from datatypes.magicplan.api.response import MagicPlanPlan, PlansListResponse
from datatypes.magicplan.api.response import MagicPlanPlan, PlanSummary
FIXTURE_DIR = Path(__file__).parents[2] / "magic_plan"
BASE_URL = "https://cloud.magicplan.app/api/v2"
@ -70,7 +70,9 @@ def test_get_plans_calls_correct_url(
# Act
client.get_plans()
# Assert
mock_session.get.assert_called_once_with(f"{BASE_URL}/workgroups/plans")
mock_session.get.assert_called_once_with(
f"{BASE_URL}/workgroups/plans", params={"page": 1}
)
def test_get_plans_calls_raise_for_status(
@ -88,7 +90,7 @@ def test_get_plans_calls_raise_for_status(
mock_session.get.return_value.raise_for_status.assert_called_once()
def test_get_plans_returns_plans_list_response(
def test_get_plans_returns_list_of_plan_summaries(
client: MagicPlanClient, mock_session: MagicMock
) -> None:
# Arrange
@ -100,8 +102,9 @@ def test_get_plans_returns_plans_list_response(
# Act
result = client.get_plans()
# Assert
assert isinstance(result, PlansListResponse)
assert len(result.plans) == 1
assert isinstance(result, list)
assert len(result) == 1
assert isinstance(result[0], PlanSummary)
def test_get_plans_propagates_http_error(