""" Unit tests for site page generator """ import pytest from unittest.mock import Mock, MagicMock from src.generation.site_page_generator import ( get_domain_from_site, generate_site_pages, PAGE_TYPES ) from src.database.models import SiteDeployment, SitePage class TestGetDomainFromSite: """Tests for domain extraction from site deployment""" def test_custom_hostname_preferred(self): site = Mock(spec=SiteDeployment) site.custom_hostname = "www.example.com" site.pull_zone_bcdn_hostname = "example.b-cdn.net" assert get_domain_from_site(site) == "www.example.com" def test_bcdn_hostname_fallback(self): site = Mock(spec=SiteDeployment) site.custom_hostname = None site.pull_zone_bcdn_hostname = "example.b-cdn.net" assert get_domain_from_site(site) == "example.b-cdn.net" class TestGenerateSitePages: """Tests for site page generation""" def test_generates_all_three_pages(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" site.pull_zone_bcdn_hostname = "example.b-cdn.net" page_repo = Mock() page_repo.exists.return_value = False created_page = Mock(spec=SitePage) page_repo.create.return_value = created_page template_service = Mock() template_service.format_page.return_value = "formatted" result = generate_site_pages(site, "basic", page_repo, template_service) assert len(result) == 3 assert page_repo.create.call_count == 3 assert template_service.format_page.call_count == 3 def test_skips_existing_pages(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" page_repo = Mock() page_repo.exists.side_effect = [True, False, False] created_page = Mock(spec=SitePage) page_repo.create.return_value = created_page template_service = Mock() template_service.format_page.return_value = "formatted" result = generate_site_pages(site, "basic", page_repo, template_service) assert len(result) == 2 assert page_repo.create.call_count == 2 def test_correct_page_titles_used(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" page_repo = Mock() page_repo.exists.return_value = False page_repo.create.return_value = Mock(spec=SitePage) template_service = Mock() template_service.format_page.return_value = "formatted" generate_site_pages(site, "basic", page_repo, template_service) calls = template_service.format_page.call_args_list titles = [call.kwargs['page_title'] for call in calls] assert "About Us" in titles assert "Contact" in titles assert "Privacy Policy" in titles def test_uses_correct_template(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" page_repo = Mock() page_repo.exists.return_value = False page_repo.create.return_value = Mock(spec=SitePage) template_service = Mock() template_service.format_page.return_value = "formatted" generate_site_pages(site, "modern", page_repo, template_service) for call in template_service.format_page.call_args_list: assert call.kwargs['template_name'] == "modern" def test_raises_error_on_page_creation_failure(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" page_repo = Mock() page_repo.exists.return_value = False page_repo.create.side_effect = Exception("Database error") template_service = Mock() template_service.format_page.return_value = "formatted" with pytest.raises(ValueError, match="Page generation failed"): generate_site_pages(site, "basic", page_repo, template_service) def test_stores_formatted_html_in_database(self): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" page_repo = Mock() page_repo.exists.return_value = False page_repo.create.return_value = Mock(spec=SitePage) template_service = Mock() formatted_html = "