test: add API-level coverage for internal helpers, schemas, and service validation
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
from gatehouse_app.api.v1.superadmin.organizations import (
|
||||
ListOrganizationsSchema,
|
||||
UpdateOrganizationSchema,
|
||||
)
|
||||
|
||||
|
||||
class TestListOrganizationsSchema:
|
||||
def test_defaults_when_empty(self):
|
||||
result = ListOrganizationsSchema.load({})
|
||||
assert result["page"] == 1
|
||||
assert result["per_page"] == 20
|
||||
assert result["search"] is None
|
||||
assert result["status"] is None
|
||||
assert result["plan_slug"] is None
|
||||
|
||||
def test_normal_pagination(self):
|
||||
result = ListOrganizationsSchema.load({"page": 3, "per_page": 10})
|
||||
assert result["page"] == 3
|
||||
assert result["per_page"] == 10
|
||||
|
||||
def test_page_zero_clamped_to_one(self):
|
||||
result = ListOrganizationsSchema.load({"page": 0})
|
||||
assert result["page"] == 1
|
||||
|
||||
def test_negative_per_page_clamped_to_one(self):
|
||||
result = ListOrganizationsSchema.load({"per_page": -5})
|
||||
assert result["per_page"] == 1
|
||||
|
||||
def test_per_page_exceeds_max_clamped_to_100(self):
|
||||
result = ListOrganizationsSchema.load({"per_page": 200})
|
||||
assert result["per_page"] == 100
|
||||
|
||||
def test_non_integer_values_fallback(self):
|
||||
result = ListOrganizationsSchema.load({"page": "abc", "per_page": "xyz"})
|
||||
assert result["page"] == 1
|
||||
assert result["per_page"] == 20
|
||||
|
||||
def test_search_passthrough(self):
|
||||
result = ListOrganizationsSchema.load({"search": "acme"})
|
||||
assert result["search"] == "acme"
|
||||
|
||||
def test_status_passthrough(self):
|
||||
result = ListOrganizationsSchema.load({"status": "active"})
|
||||
assert result["status"] == "active"
|
||||
|
||||
def test_plan_slug_passthrough(self):
|
||||
result = ListOrganizationsSchema.load({"plan_slug": "pro"})
|
||||
assert result["plan_slug"] == "pro"
|
||||
|
||||
|
||||
class TestUpdateOrganizationSchema:
|
||||
def test_all_fields(self):
|
||||
result = UpdateOrganizationSchema.load({
|
||||
"name": "New Name",
|
||||
"description": "New Description",
|
||||
"is_active": True,
|
||||
})
|
||||
assert result == {
|
||||
"name": "New Name",
|
||||
"description": "New Description",
|
||||
"is_active": True,
|
||||
}
|
||||
|
||||
def test_empty_dict(self):
|
||||
result = UpdateOrganizationSchema.load({})
|
||||
assert result == {}
|
||||
|
||||
def test_partial_data(self):
|
||||
result = UpdateOrganizationSchema.load({"name": "Renamed Only"})
|
||||
assert result == {"name": "Renamed Only"}
|
||||
|
||||
def test_is_active_coerced_to_bool(self):
|
||||
result = UpdateOrganizationSchema.load({"is_active": "truthy"})
|
||||
assert result["is_active"] is True
|
||||
|
||||
result = UpdateOrganizationSchema.load({"is_active": ""})
|
||||
assert result["is_active"] is False
|
||||
Reference in New Issue
Block a user