Skip to content
Merged
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
19 changes: 4 additions & 15 deletions extend/resources/expense_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,6 @@ async def create_expense_category(
required: bool,
active: Optional[bool] = None,
free_text_allowed: Optional[bool] = None,
integrator_enabled: Optional[bool] = None,
integrator_field_number: Optional[int] = None,
) -> Dict:
"""Create an expense category.

Expand All @@ -124,8 +122,6 @@ async def create_expense_category(
required (bool): Whether this field is required for all users
active (Optional[bool]): Whether this category is active and available for input
free_text_allowed (Optional[bool]): Whether free text input is allowed
integrator_enabled (Optional[bool]): Whether this category is integrator enabled
integrator_field_number (Optional[int]): Field number used by the integrator

Returns:
Dict: A dictionary containing the newly created expense category
Expand All @@ -140,12 +136,11 @@ async def create_expense_category(
"required": required,
"active": active,
"freeTextAllowed": free_text_allowed,
"integratorEnabled": integrator_enabled,
"integratorFieldNumber": integrator_field_number,
}

return await self._request(
method="post",
path='/categories',
params=payload
)

Expand Down Expand Up @@ -178,7 +173,7 @@ async def create_expense_category_label(

return await self._request(
method="post",
path=f"/{category_id}",
path=f"/categories/{category_id}/labels",
params=payload
)

Expand All @@ -189,8 +184,6 @@ async def update_expense_category(
active: Optional[bool] = None,
required: Optional[bool] = None,
free_text_allowed: Optional[bool] = None,
integrator_enabled: Optional[bool] = None,
integrator_field_number: Optional[int] = None,
) -> Dict:
"""Update the an expense category.

Expand All @@ -200,8 +193,6 @@ async def update_expense_category(
active (Optional[bool]): Whether the category is active
required (Optional[bool]): Whether this field is required for all users
free_text_allowed (Optional[bool]): Whether free text input is allowed
integrator_enabled (Optional[bool]): Whether this category is integrator enabled
integrator_field_number (Optional[int]): Field number used by the integrator

Returns:
Dict: A dictionary containing the updated expense category details
Expand All @@ -215,13 +206,11 @@ async def update_expense_category(
"active": active,
"required": required,
"freeTextAllowed": free_text_allowed,
"integratorEnabled": integrator_enabled,
"integratorFieldNumber": integrator_field_number,
}

return await self._request(
method="patch",
path=f"/{category_id}",
path=f"/categories/{category_id}",
params=payload
)

Expand Down Expand Up @@ -254,6 +243,6 @@ async def update_expense_category_label(

return await self._request(
method="patch",
path=f"/{category_id}/labels/{label_id}",
path=f"/categories/{category_id}/labels/{label_id}",
params=payload
)
4 changes: 1 addition & 3 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,9 +533,7 @@ async def test_create_expense_category(extend, mocker):
code="NEWCODE",
required=True,
active=True,
free_text_allowed=True,
integrator_enabled=True,
integrator_field_number=42
free_text_allowed=False,
)

assert response["id"] == "cat_new"
Expand Down
56 changes: 39 additions & 17 deletions tests/test_integration.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import uuid
from datetime import datetime, timedelta

import pytest
Expand Down Expand Up @@ -209,51 +210,72 @@ class TestExpenseData:
@pytest.mark.asyncio
async def test_create_update_category_and_label(self, extend):
# Create a new expense category
u = uuid.uuid4()
name = f"Integration Test Category {u}"
code = f"INTEG-CAT-{u}"
category_resp = await extend.expense_data.create_expense_category(
name="Integration Test Category",
code="INTEG-CAT",
name=name,
code=code,
required=True,
active=True,
free_text_allowed=True,
integrator_enabled=True,
integrator_field_number=999
free_text_allowed=False,
)

category_id = category_resp["id"]
assert category_resp["name"] == "Integration Test Category"
assert category_resp["code"] == "INTEG-CAT"
assert category_resp["name"] == name
assert category_resp["code"] == code

# re-fetch newly created expense category
category = await extend.expense_data.get_expense_category(category_id)
assert category_resp["name"] == name
assert category_resp["code"] == code

# Update the category
updated_name = f"Updated Integration Category {u}"
updated_category = await extend.expense_data.update_expense_category(
category_id=category_id,
name="Updated Integration Category",
name=updated_name,
active=False
)

assert updated_category["name"] == "Updated Integration Category"
assert updated_category["name"] == updated_name
assert updated_category["active"] is False

# Create a label under the category
label_resp = await extend.expense_data.create_expense_category_label(
u1 = uuid.uuid4()
label_name_one = f"Integration Label {u1}"
label_code_one = f"INTEG-LABEL-{u1}"
u2 = uuid.uuid4()
label_name_two = f"Integration Label {u2}"
label_code_two = f"INTEG-LABEL-{u2}"

label_resp_one = await extend.expense_data.create_expense_category_label(
category_id=category_id,
name=label_name_one,
code=label_code_one,
active=True
)

label_resp_two = await extend.expense_data.create_expense_category_label(
category_id=category_id,
name="Integration Label",
code="INTEG-LABEL",
name=label_name_two,
code=label_code_two,
active=True
)

label_id = label_resp["id"]
assert label_resp["name"] == "Integration Label"
assert label_resp["code"] == "INTEG-LABEL"
label_id = label_resp_one["id"]
assert label_resp_one["name"] == label_name_one
assert label_resp_one["code"] == label_code_one

# Update the label
updated_label = await extend.expense_data.update_expense_category_label(
category_id=category_id,
label_id=label_id,
name="Updated Label Name",
name=f"Updated Label Name {u1}",
active=False
)

assert updated_label["name"] == "Updated Label Name"
assert updated_label["name"] == f"Updated Label Name {u1}"
assert updated_label["active"] is False

@pytest.mark.asyncio
Expand Down