-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* set_item_layout and testing * comments on function * expected respone * code consistency * BadRequest * mypy check
- Loading branch information
1 parent
05843d9
commit 9a6d191
Showing
4 changed files
with
141 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
from __future__ import annotations | ||
|
||
from typing import Dict | ||
|
||
from darwin.future.core.client import ClientCore | ||
from darwin.future.core.types.common import JSONType | ||
from darwin.future.data_objects.item import ItemLayout | ||
from darwin.future.data_objects.typing import UnknownType | ||
|
||
|
||
def set_item_layout( | ||
client: ClientCore, | ||
team_slug: str, | ||
dataset_ids: int | list[int], | ||
layout: ItemLayout, | ||
filters: Dict[str, UnknownType], | ||
) -> JSONType: | ||
""" | ||
Set the layout of a dataset and filtered items via filters. | ||
Args: | ||
client (ClientCore): The Darwin Core client. | ||
team_slug (str): The team slug. | ||
dataset_ids (int | list[int]): The dataset ids. | ||
layout (ItemLayout): The layout. | ||
filters Dict[str, UnknownType]: The parameters of the filter. | ||
Returns: | ||
JSONType: The response data. | ||
""" | ||
assert ( | ||
filters | ||
), "No parameters provided, please provide at least one non-dataset id filter" | ||
payload = { | ||
"filters": { | ||
"dataset_ids": dataset_ids | ||
if isinstance(dataset_ids, list) | ||
else [dataset_ids], | ||
**filters, | ||
}, | ||
"layout": dict(layout), | ||
} | ||
|
||
return client.post(f"/v2/teams/{team_slug}/items/layout", data=payload) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
from typing import Dict | ||
|
||
import pytest | ||
import responses | ||
|
||
from darwin.future.core.client import ClientCore | ||
from darwin.future.core.items.set_item_layout import set_item_layout | ||
from darwin.future.data_objects.item import ItemLayout | ||
from darwin.future.data_objects.typing import UnknownType | ||
from darwin.future.exceptions import BadRequest | ||
from darwin.future.tests.core.fixtures import * | ||
from darwin.future.tests.core.items.fixtures import * | ||
|
||
|
||
@responses.activate | ||
def test_set_item_layout_returns_blank_object( | ||
base_client: ClientCore, base_layout: ItemLayout | ||
) -> None: | ||
dataset_ids = [1, 2, 3] | ||
params = {"param1": "value1", "param2": "value2"} | ||
team_slug = "my_team" | ||
responses.add( | ||
responses.POST, | ||
f"{base_client.config.api_endpoint}v2/teams/{team_slug}/items/layout", | ||
json={"affected_item_count": 2}, | ||
status=200, | ||
) | ||
|
||
response = set_item_layout(base_client, team_slug, dataset_ids, base_layout, params) | ||
|
||
assert response == {"affected_item_count": 2} | ||
|
||
|
||
@responses.activate | ||
def test_set_item_layout_raises_on_incorrect_parameters( | ||
base_client: ClientCore, base_layout: ItemLayout | ||
) -> None: | ||
team_slug = "my_team" | ||
dataset_ids = [1, 2, 3] | ||
params: Dict[str, UnknownType] = {} | ||
|
||
with pytest.raises(AssertionError): | ||
set_item_layout(base_client, team_slug, dataset_ids, base_layout, params) | ||
|
||
|
||
@responses.activate | ||
def test_set_item_layout_raises_on_4xx_status_code( | ||
base_client: ClientCore, base_layout: ItemLayout | ||
) -> None: | ||
team_slug = "my_team" | ||
dataset_ids = [1, 2, 3] | ||
params = {"param1": "value1", "param2": "value2"} | ||
|
||
responses.add( | ||
responses.POST, | ||
f"{base_client.config.api_endpoint}v2/teams/{team_slug}/items/layout", | ||
json={"error": "Bad Request"}, | ||
status=400, | ||
) | ||
|
||
with pytest.raises(BadRequest): | ||
set_item_layout(base_client, team_slug, dataset_ids, base_layout, params) | ||
|
||
|
||
@responses.activate | ||
def test_set_item_layout_sends_correct_payload( | ||
base_client: ClientCore, base_layout: ItemLayout | ||
) -> None: | ||
team_slug = "my_team" | ||
dataset_ids = [1, 2, 3] | ||
params = {"param1": "value1", "param2": "value2"} | ||
|
||
responses.add( | ||
responses.POST, | ||
f"{base_client.config.api_endpoint}v2/teams/{team_slug}/items/layout", | ||
json={}, | ||
status=200, | ||
match=[ | ||
responses.json_params_matcher( | ||
{ | ||
"filters": {"dataset_ids": dataset_ids, **params}, | ||
"layout": dict(base_layout), | ||
} | ||
) | ||
], | ||
) | ||
|
||
set_item_layout(base_client, team_slug, dataset_ids, base_layout, params) |