""" Unit tests for site page generator """ import pytest from unittest.mock import Mock, MagicMock from src.generation.site_page_generator import generate_site_pages, get_domain_from_site from src.database.models import SiteDeployment, SitePage def test_get_domain_from_site_with_custom_hostname(): site = Mock(spec=SiteDeployment) site.custom_hostname = "www.example.com" site.pull_zone_bcdn_hostname = "site123.b-cdn.net" domain = get_domain_from_site(site) assert domain == "www.example.com" def test_get_domain_from_site_without_custom_hostname(): site = Mock(spec=SiteDeployment) site.custom_hostname = None site.pull_zone_bcdn_hostname = "site123.b-cdn.net" domain = get_domain_from_site(site) assert domain == "site123.b-cdn.net" def test_generate_site_pages_success(): site = Mock(spec=SiteDeployment) site.id = 1 site.custom_hostname = "www.example.com" site.pull_zone_bcdn_hostname = "site123.b-cdn.net" site.template_name = "modern" page_repo = Mock() page_repo.exists = Mock(return_value=False) page_repo.create = Mock(return_value=Mock(spec=SitePage, id=1)) template_service = Mock() template_service.format_content = Mock(return_value="Full HTML Page") pages = generate_site_pages(site, page_repo, template_service) assert len(pages) == 3 assert page_repo.create.call_count == 3 create_calls = page_repo.create.call_args_list page_types_created = [call[1]["page_type"] for call in create_calls] assert "about" in page_types_created assert "contact" in page_types_created assert "privacy" in page_types_created def test_generate_site_pages_with_basic_template(): site = Mock(spec=SiteDeployment) site.id = 2 site.custom_hostname = None site.pull_zone_bcdn_hostname = "test-site.b-cdn.net" site.template_name = "basic" page_repo = Mock() page_repo.exists = Mock(return_value=False) page_repo.create = Mock(return_value=Mock(spec=SitePage, id=1)) template_service = Mock() template_service.format_content = Mock(return_value="Page") pages = generate_site_pages(site, page_repo, template_service) assert len(pages) == 3 format_calls = template_service.format_content.call_args_list for call in format_calls: assert call[1]["template_name"] == "basic" def test_generate_site_pages_skips_existing_pages(): site = Mock(spec=SiteDeployment) site.id = 3 site.custom_hostname = "www.test.com" site.template_name = "modern" page_repo = Mock() page_repo.exists = Mock(side_effect=[True, False, False]) page_repo.create = Mock(return_value=Mock(spec=SitePage, id=1)) template_service = Mock() template_service.format_content = Mock(return_value="Page") pages = generate_site_pages(site, page_repo, template_service) assert len(pages) == 2 assert page_repo.create.call_count == 2 def test_generate_site_pages_uses_default_template_when_none(): site = Mock(spec=SiteDeployment) site.id = 4 site.custom_hostname = "www.example.com" site.template_name = None page_repo = Mock() page_repo.exists = Mock(return_value=False) page_repo.create = Mock(return_value=Mock(spec=SitePage, id=1)) template_service = Mock() template_service.format_content = Mock(return_value="Page") pages = generate_site_pages(site, page_repo, template_service) format_calls = template_service.format_content.call_args_list for call in format_calls: assert call[1]["template_name"] == "basic" def test_generate_site_pages_correct_content_structure(): site = Mock(spec=SiteDeployment) site.id = 5 site.custom_hostname = "www.test.com" site.template_name = "modern" page_repo = Mock() page_repo.exists = Mock(return_value=False) created_pages = [] def mock_create(**kwargs): page = Mock(spec=SitePage, id=len(created_pages) + 1) created_pages.append(kwargs) return page page_repo.create = mock_create template_service = Mock() template_service.format_content = Mock(return_value="Full Page") pages = generate_site_pages(site, page_repo, template_service) assert len(created_pages) == 3 for page_data in created_pages: assert page_data["site_deployment_id"] == 5 assert page_data["page_type"] in ["about", "contact", "privacy"] assert page_data["content"] == "Full Page" def test_generate_site_pages_page_titles(): site = Mock(spec=SiteDeployment) site.id = 6 site.custom_hostname = "www.test.com" site.template_name = "basic" page_repo = Mock() page_repo.exists = Mock(return_value=False) page_repo.create = Mock(return_value=Mock(spec=SitePage, id=1)) template_service = Mock() template_service.format_content = Mock(return_value="Page") pages = generate_site_pages(site, page_repo, template_service) format_calls = template_service.format_content.call_args_list titles_used = [call[1]["title"] for call in format_calls] assert "About Us" in titles_used assert "Contact" in titles_used assert "Privacy Policy" in titles_used def test_generate_site_pages_error_handling(): site = Mock(spec=SiteDeployment) site.id = 7 site.custom_hostname = "www.test.com" site.template_name = "modern" page_repo = Mock() page_repo.exists = Mock(return_value=False) page_repo.create = Mock(side_effect=Exception("Database error")) template_service = Mock() template_service.format_content = Mock(return_value="Page") with pytest.raises(Exception) as exc_info: generate_site_pages(site, page_repo, template_service) assert "Database error" in str(exc_info.value)