""" Integration tests for site page generation """ import pytest from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from src.database.models import Base, SiteDeployment, SitePage from src.database.repositories import SiteDeploymentRepository, SitePageRepository from src.templating.service import TemplateService from src.generation.site_page_generator import generate_site_pages @pytest.fixture def test_db(): """Create a test database""" engine = create_engine("sqlite:///:memory:") Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() yield session session.close() @pytest.fixture def site_repo(test_db): return SiteDeploymentRepository(test_db) @pytest.fixture def page_repo(test_db): return SitePageRepository(test_db) @pytest.fixture def template_service(): return TemplateService() @pytest.fixture def sample_site(site_repo): """Create a sample site for testing""" return site_repo.create( site_name="integration-test-site", storage_zone_id=999, storage_zone_name="test-storage", storage_zone_password="test-password", storage_zone_region="DE", pull_zone_id=888, pull_zone_bcdn_hostname="integration-test.b-cdn.net", custom_hostname=None ) class TestSitePageIntegration: """Integration tests for site page generation flow""" def test_full_page_generation_flow(self, sample_site, page_repo, template_service): """Test complete flow of generating pages for a site""" pages = generate_site_pages(sample_site, "basic", page_repo, template_service) assert len(pages) == 3 stored_pages = page_repo.get_by_site(sample_site.id) assert len(stored_pages) == 3 page_types = {p.page_type for p in stored_pages} assert page_types == {"about", "contact", "privacy"} def test_pages_use_correct_template(self, sample_site, page_repo, template_service): """Test that pages are formatted with correct template""" generate_site_pages(sample_site, "modern", page_repo, template_service) about_page = page_repo.get_by_site_and_type(sample_site.id, "about") assert about_page is not None assert "" in content or "" in content.lower() assert "" in content.lower() assert "