190 lines
5.9 KiB
Python
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)
|