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

112 lines
3.6 KiB
Python

"""
Base test class for integration tests
Provides common fixtures and utilities
"""
from django.test import TestCase
from rest_framework.test import APIClient
from rest_framework import status
from igny8_core.auth.models import User, Account, Plan, Site, Sector, Industry, IndustrySector, SeedKeyword
class IntegrationTestBase(TestCase):
"""Base class for integration tests with common fixtures"""
def setUp(self):
"""Set up test fixtures"""
self.client = APIClient()
# Create test plan
self.plan = Plan.objects.create(
name="Test Plan",
slug="test-plan",
price=0,
credits_per_month=1000
)
# Create test user first (Account needs owner)
self.user = User.objects.create_user(
username='testuser',
email='test@test.com',
password='testpass123',
role='owner'
)
# Create test account with owner
self.account = Account.objects.create(
name="Test Account",
slug="test-account",
plan=self.plan,
owner=self.user
)
# Update user to have account
self.user.account = self.account
self.user.save()
# Create industry and sector
self.industry = Industry.objects.create(
name="Test Industry",
slug="test-industry"
)
self.industry_sector = IndustrySector.objects.create(
industry=self.industry,
name="Test Sector",
slug="test-sector"
)
# Create site
self.site = Site.objects.create(
name="Test Site",
slug="test-site",
account=self.account,
industry=self.industry
)
# Create sector (Sector needs industry_sector reference)
self.sector = Sector.objects.create(
name="Test Sector",
slug="test-sector",
site=self.site,
account=self.account,
industry_sector=self.industry_sector
)
# Create seed keyword
self.seed_keyword = SeedKeyword.objects.create(
keyword="test keyword",
industry=self.industry,
sector=self.industry_sector,
volume=1000,
difficulty=50,
intent="informational"
)
# Authenticate client
self.client.force_authenticate(user=self.user)
# Set account on request (simulating middleware)
self.client.force_authenticate(user=self.user)
def assert_unified_response_format(self, response, expected_success=True):
"""Assert response follows unified format"""
self.assertIn('success', response.data)
self.assertEqual(response.data['success'], expected_success)
if expected_success:
# Success responses should have data or results
self.assertTrue('data' in response.data or 'results' in response.data)
else:
# Error responses should have error
self.assertIn('error', response.data)
def assert_paginated_response(self, response):
"""Assert response is a paginated response"""
self.assert_unified_response_format(response, expected_success=True)
self.assertIn('success', response.data)
self.assertIn('count', response.data)
self.assertIn('results', response.data)
self.assertIn('next', response.data)
self.assertIn('previous', response.data)