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
3 changes: 2 additions & 1 deletion src/atlas/models/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,10 @@ class ResultMetrics(BaseModel):


class Pagination(BaseModel):
total_count: int
page: int
page_size: int
total_pages: int
total_count: int


class ResultsResponse(BaseModel):
Expand Down
3 changes: 2 additions & 1 deletion src/atlas/resources/results/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,10 @@ def get_by_id(
resp_with_pagination = {
**resp,
"pagination": {
"total_count": total_count,
"page": effective_page,
"page_size": effective_page_size,
"total_pages": total_pages,
"total_count": total_count,
},
}

Expand Down
31 changes: 22 additions & 9 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,44 +223,49 @@ class TestPagination:
def valid_pagination_data(self):
"""Valid pagination data for testing."""
return {
"total_count": 250,
"page": 1,
"page_size": 100,
"total_pages": 3,
"total_count": 250,
}

def test_pagination_creation(self, valid_pagination_data):
"""Pagination model creates with valid data."""
pagination = Pagination(**valid_pagination_data)

assert pagination.total_count == 250
assert pagination.page == 1
assert pagination.page_size == 100
assert pagination.total_pages == 3
assert pagination.total_count == 250

def test_pagination_field_types(self, valid_pagination_data):
"""Pagination model enforces correct field types."""
pagination = Pagination(**valid_pagination_data)

assert isinstance(pagination.total_count, int)
assert isinstance(pagination.page, int)
assert isinstance(pagination.page_size, int)
assert isinstance(pagination.total_pages, int)
assert isinstance(pagination.total_count, int)

def test_pagination_zero_values(self):
"""Pagination model handles zero values correctly."""
pagination = Pagination(
total_count=0,
page=1,
page_size=100,
total_pages=0,
total_count=0,
)

assert pagination.total_count == 0
assert pagination.page == 1
assert pagination.page_size == 100
assert pagination.total_pages == 0
assert pagination.total_count == 0

def test_pagination_validation_errors(self, valid_pagination_data):
"""Pagination model validates field types."""
# Test invalid total_count
# Test invalid page
invalid_data = valid_pagination_data.copy()
invalid_data["total_count"] = "not-an-int"
invalid_data["page"] = "not-an-int"
with pytest.raises(ValidationError):
Pagination(**invalid_data)

Expand All @@ -276,6 +281,12 @@ def test_pagination_validation_errors(self, valid_pagination_data):
with pytest.raises(ValidationError):
Pagination(**invalid_data)

# Test invalid total_count
invalid_data = valid_pagination_data.copy()
invalid_data["total_count"] = "not-an-int"
with pytest.raises(ValidationError):
Pagination(**invalid_data)


class TestResults:
"""Test Results collection model with pagination."""
Expand Down Expand Up @@ -304,9 +315,10 @@ def valid_metrics_data(self):
def valid_pagination_data(self):
"""Valid pagination data for testing."""
return {
"total_count": 150,
"page": 1,
"page_size": 100,
"total_pages": 2,
"total_count": 150,
}

def test_results_with_pagination(self, valid_result_data, valid_metrics_data, valid_pagination_data):
Expand All @@ -323,9 +335,10 @@ def test_results_with_pagination(self, valid_result_data, valid_metrics_data, va
assert all(isinstance(result, Result) for result in results.results)
assert isinstance(results.metrics, ResultMetrics)
assert isinstance(results.pagination, Pagination)
assert results.pagination.total_count == 150
assert results.pagination.page == 1
assert results.pagination.page_size == 100
assert results.pagination.total_pages == 2
assert results.pagination.total_count == 150

def test_results_field_types(self, valid_result_data, valid_metrics_data, valid_pagination_data):
"""Results model enforces correct field types."""
Expand Down
Loading