Skip to content

Commit e13e823

Browse files
franccescoclaude
andcommitted
test: update tests for new update() return types
Adapt goal and headline update tests to expect returned objects instead of None, and add GET mocks for the post-update details() re-fetch. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent b8c1f1b commit e13e823

5 files changed

Lines changed: 83 additions & 17 deletions

File tree

tests/test_adversarial_todos_goals.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,22 @@ class TestGoalUpdateOverwritesOwner:
6868
overwriting the goal owner. This has been fixed.
6969
"""
7070

71+
@pytest.fixture(autouse=True)
72+
def _setup_goal_get_response(self, mock_http_client: Mock) -> None:
73+
"""Configure GET to return a valid goal response for the details() re-fetch."""
74+
get_response = Mock()
75+
get_response.raise_for_status = Mock()
76+
get_response.json.return_value = {
77+
"Id": 1,
78+
"Owner": {"Id": 123, "Name": "Alice"},
79+
"Name": "Goal Title",
80+
"CreateTime": "2024-01-01T00:00:00Z",
81+
"DueDate": "2024-12-31",
82+
"Complete": False,
83+
"Origins": [{"Id": 100, "Name": "Meeting A"}],
84+
}
85+
mock_http_client.get.return_value = get_response
86+
7187
def test_update_title_only_should_not_overwrite_owner(
7288
self, mock_http_client: Mock, mock_user_id: PropertyMock
7389
) -> None:

tests/test_async_goals.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,30 @@ async def test_update(
190190
self, async_client: AsyncClient, mock_async_client: AsyncMock
191191
):
192192
"""Test updating a goal."""
193-
mock_response = MagicMock()
194-
mock_response.raise_for_status = MagicMock()
195-
mock_async_client.put.return_value = mock_response
193+
mock_put_response = MagicMock()
194+
mock_put_response.raise_for_status = MagicMock()
195+
mock_async_client.put.return_value = mock_put_response
196+
197+
mock_get_response = MagicMock()
198+
mock_get_response.raise_for_status = MagicMock()
199+
mock_get_response.json.return_value = {
200+
"Id": 123,
201+
"Owner": {"Id": 1, "Name": "John Doe"},
202+
"Name": "Updated Goal",
203+
"CreateTime": "2024-01-01T00:00:00Z",
204+
"DueDate": "2024-06-01",
205+
"Complete": False,
206+
"Origins": [{"Id": 10, "Name": "Team Meeting"}],
207+
}
208+
mock_async_client.get.return_value = mock_get_response
196209

197210
result = await async_client.goal.update(
198211
goal_id=123, title="Updated Goal", status="on"
199212
)
200213

201-
assert result is None
214+
assert isinstance(result, GoalInfo)
215+
assert result.id == 123
216+
assert result.title == "Updated Goal"
202217
mock_async_client.put.assert_called_once_with(
203218
"rocks/123",
204219
json={

tests/test_async_headlines.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,31 @@ async def test_update(
8686
self, async_client: AsyncClient, mock_async_client: AsyncMock
8787
):
8888
"""Test updating a headline."""
89-
mock_response = MagicMock()
90-
mock_response.raise_for_status = MagicMock()
91-
mock_async_client.put.return_value = mock_response
89+
mock_put_response = MagicMock()
90+
mock_put_response.raise_for_status = MagicMock()
91+
mock_async_client.put.return_value = mock_put_response
92+
93+
mock_get_response = MagicMock()
94+
mock_get_response.raise_for_status = MagicMock()
95+
mock_get_response.json.return_value = {
96+
"Id": 501,
97+
"Name": "Updated headline",
98+
"DetailsUrl": "https://example.com/headline/501",
99+
"Owner": {"Id": 123, "Name": "John Doe"},
100+
"Origin": "Product Meeting",
101+
"OriginId": 456,
102+
"Archived": False,
103+
"CreateTime": "2024-06-01T10:00:00Z",
104+
"CloseTime": None,
105+
}
106+
mock_async_client.get.return_value = mock_get_response
92107

93108
result = await async_client.headline.update(
94109
headline_id=501, title="Updated headline"
95110
)
96111

97-
assert result is None
112+
assert isinstance(result, HeadlineDetails)
113+
assert result.id == 501
98114
mock_async_client.put.assert_called_once_with(
99115
"headline/501", json={"title": "Updated headline"}
100116
)

tests/test_goals.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,27 @@ def test_delete_goal(self, mock_http_client: Mock) -> None:
109109
assert result is None
110110
mock_http_client.delete.assert_called_once_with("rocks/101")
111111

112-
def test_update_goal(self, mock_http_client: Mock, mock_user_id: Mock) -> None:
112+
def test_update_goal(
113+
self,
114+
mock_http_client: Mock,
115+
mock_user_id: Mock,
116+
sample_goal_data: dict[str, Any],
117+
) -> None:
113118
"""Test updating a goal."""
114-
mock_response = Mock()
115-
mock_http_client.put.return_value = mock_response
119+
mock_put_response = Mock()
120+
mock_http_client.put.return_value = mock_put_response
121+
122+
mock_get_response = Mock()
123+
mock_get_response.json.return_value = sample_goal_data
124+
mock_http_client.get.return_value = mock_get_response
116125

117126
goal_ops = GoalOperations(mock_http_client)
118127

128+
from bloomy.models import GoalInfo
129+
119130
result = goal_ops.update(goal_id=101, title="Updated Goal", status="complete")
120131

121-
assert result is None
132+
assert isinstance(result, GoalInfo)
122133
mock_http_client.put.assert_called_once_with(
123134
"rocks/101",
124135
json={

tests/test_headlines.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,24 @@ def test_create_default_owner(
6969
json={"title": "Product launch successful", "ownerId": 123},
7070
)
7171

72-
def test_update(self, mock_http_client: Mock) -> None:
72+
def test_update(
73+
self, mock_http_client: Mock, sample_headline_data: dict[str, Any]
74+
) -> None:
7375
"""Test updating a headline."""
74-
mock_response = Mock()
75-
mock_response.json.return_value = {"Id": 501, "Name": "Updated headline"}
76-
mock_http_client.put.return_value = mock_response
76+
mock_put_response = Mock()
77+
mock_http_client.put.return_value = mock_put_response
78+
79+
mock_get_response = Mock()
80+
mock_get_response.json.return_value = sample_headline_data
81+
mock_http_client.get.return_value = mock_get_response
7782

7883
headline_ops = HeadlineOperations(mock_http_client)
7984
result = headline_ops.update(headline_id=501, title="Updated headline")
8085

81-
assert result is None
86+
from bloomy.models import HeadlineDetails
87+
88+
assert isinstance(result, HeadlineDetails)
89+
assert result.id == 501
8290

8391
mock_http_client.put.assert_called_once_with(
8492
"headline/501", json={"title": "Updated headline"}

0 commit comments

Comments
 (0)