Big-Link-Man/tests/unit/test_site_page_generator.py

190 lines
5.9 KiB
Python

"""
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="<html>Full HTML Page</html>")
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="<html>Page</html>")
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="<html>Page</html>")
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="<html>Page</html>")
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="<html>Full Page</html>")
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"] == "<html>Full Page</html>"
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="<html>Page</html>")
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="<html>Page</html>")
with pytest.raises(Exception) as exc_info:
generate_site_pages(site, page_repo, template_service)
assert "Database error" in str(exc_info.value)