Files
igny8/backup-api-standard-v1/tests/test_integration_pagination.py
2025-11-16 03:28:25 +00:00

114 lines
4.7 KiB
Python

"""
Integration tests for pagination
Tests paginated responses across all modules return unified format
"""
from rest_framework import status
from igny8_core.api.tests.test_integration_base import IntegrationTestBase
from igny8_core.modules.planner.models import Keywords
from igny8_core.auth.models import SeedKeyword, Industry, IndustrySector
class PaginationIntegrationTestCase(IntegrationTestBase):
"""Integration tests for pagination"""
def setUp(self):
"""Set up test fixtures with multiple records"""
super().setUp()
# Create multiple keywords for pagination testing
for i in range(15):
Keywords.objects.create(
seed_keyword=self.seed_keyword,
site=self.site,
sector=self.sector,
account=self.account,
status='active'
)
def test_pagination_default_page_size(self):
"""Test pagination with default page size"""
response = self.client.get('/api/v1/planner/keywords/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
self.assertEqual(response.data['count'], 15)
self.assertLessEqual(len(response.data['results']), 10) # Default page size
self.assertIsNotNone(response.data['next']) # Should have next page
def test_pagination_custom_page_size(self):
"""Test pagination with custom page size"""
response = self.client.get('/api/v1/planner/keywords/?page_size=5')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
self.assertEqual(response.data['count'], 15)
self.assertEqual(len(response.data['results']), 5)
self.assertIsNotNone(response.data['next'])
def test_pagination_page_parameter(self):
"""Test pagination with page parameter"""
response = self.client.get('/api/v1/planner/keywords/?page=2&page_size=5')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
self.assertEqual(response.data['count'], 15)
self.assertEqual(len(response.data['results']), 5)
self.assertIsNotNone(response.data['previous'])
def test_pagination_max_page_size(self):
"""Test pagination respects max page size"""
response = self.client.get('/api/v1/planner/keywords/?page_size=200') # Exceeds max of 100
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
self.assertLessEqual(len(response.data['results']), 100) # Should be capped at 100
def test_pagination_empty_results(self):
"""Test pagination with empty results"""
# Use a filter that returns no results
response = self.client.get('/api/v1/planner/keywords/?status=nonexistent')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
self.assertEqual(response.data['count'], 0)
self.assertEqual(len(response.data['results']), 0)
self.assertIsNone(response.data['next'])
self.assertIsNone(response.data['previous'])
def test_pagination_includes_success_field(self):
"""Test paginated responses include success field"""
response = self.client.get('/api/v1/planner/keywords/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('success', response.data)
self.assertTrue(response.data['success'])
def test_pagination_clusters(self):
"""Test pagination works for clusters endpoint"""
response = self.client.get('/api/v1/planner/clusters/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
def test_pagination_ideas(self):
"""Test pagination works for ideas endpoint"""
response = self.client.get('/api/v1/planner/ideas/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
def test_pagination_tasks(self):
"""Test pagination works for tasks endpoint"""
response = self.client.get('/api/v1/writer/tasks/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)
def test_pagination_content(self):
"""Test pagination works for content endpoint"""
response = self.client.get('/api/v1/writer/content/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assert_paginated_response(response)