Big-Link-Man/tests/integration/test_site_page_integration.py

222 lines
6.6 KiB
Python

"""
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_engine():
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
return engine
@pytest.fixture
def test_session(test_engine):
Session = sessionmaker(bind=test_engine)
session = Session()
yield session
session.close()
@pytest.fixture
def site_repo(test_session):
return SiteDeploymentRepository(test_session)
@pytest.fixture
def page_repo(test_session):
return SitePageRepository(test_session)
@pytest.fixture
def template_service():
return TemplateService()
@pytest.fixture
def test_site(site_repo):
site = site_repo.create(
site_name="test-site",
storage_zone_id=12345,
storage_zone_name="test-storage",
storage_zone_password="password123",
storage_zone_region="DE",
pull_zone_id=67890,
pull_zone_bcdn_hostname="test-site.b-cdn.net",
custom_hostname=None
)
return site
def test_generate_pages_for_site(test_site, page_repo, template_service):
pages = generate_site_pages(test_site, page_repo, template_service)
assert len(pages) == 3
page_types = [p.page_type for p in pages]
assert "about" in page_types
assert "contact" in page_types
assert "privacy" in page_types
def test_generated_pages_stored_in_database(test_site, page_repo, template_service):
generate_site_pages(test_site, page_repo, template_service)
stored_pages = page_repo.get_by_site(test_site.id)
assert len(stored_pages) == 3
for page in stored_pages:
assert page.site_deployment_id == test_site.id
assert page.page_type in ["about", "contact", "privacy"]
assert page.content is not None
assert len(page.content) > 0
assert "<html" in page.content.lower()
def test_pages_use_site_template(test_site, page_repo, template_service):
test_site.template_name = "modern"
pages = generate_site_pages(test_site, page_repo, template_service)
for page in pages:
assert page.content is not None
assert "<html" in page.content.lower()
def test_cannot_create_duplicate_pages(test_site, page_repo, template_service):
generate_site_pages(test_site, page_repo, template_service)
pages = generate_site_pages(test_site, page_repo, template_service)
assert len(pages) == 0
def test_unique_constraint_enforced(test_site, page_repo):
page_repo.create(
site_deployment_id=test_site.id,
page_type="about",
content="<html>About</html>"
)
with pytest.raises(ValueError) as exc_info:
page_repo.create(
site_deployment_id=test_site.id,
page_type="about",
content="<html>Another About</html>"
)
assert "already exists" in str(exc_info.value)
def test_update_page_content(test_site, page_repo, template_service):
pages = generate_site_pages(test_site, page_repo, template_service)
about_page = next(p for p in pages if p.page_type == "about")
original_content = about_page.content
new_content = "<html>Updated About Page</html>"
updated_page = page_repo.update_content(about_page.id, new_content)
assert updated_page.content == new_content
assert updated_page.content != original_content
def test_delete_page(test_site, page_repo, template_service):
pages = generate_site_pages(test_site, page_repo, template_service)
about_page = next(p for p in pages if p.page_type == "about")
result = page_repo.delete(about_page.id)
assert result is True
remaining_pages = page_repo.get_by_site(test_site.id)
assert len(remaining_pages) == 2
def test_multiple_sites_have_separate_pages(site_repo, page_repo, template_service):
site1 = site_repo.create(
site_name="site-1",
storage_zone_id=111,
storage_zone_name="storage-1",
storage_zone_password="pass1",
storage_zone_region="DE",
pull_zone_id=222,
pull_zone_bcdn_hostname="site1.b-cdn.net"
)
site2 = site_repo.create(
site_name="site-2",
storage_zone_id=333,
storage_zone_name="storage-2",
storage_zone_password="pass2",
storage_zone_region="NY",
pull_zone_id=444,
pull_zone_bcdn_hostname="site2.b-cdn.net"
)
pages1 = generate_site_pages(site1, page_repo, template_service)
pages2 = generate_site_pages(site2, page_repo, template_service)
assert len(pages1) == 3
assert len(pages2) == 3
site1_pages = page_repo.get_by_site(site1.id)
site2_pages = page_repo.get_by_site(site2.id)
assert len(site1_pages) == 3
assert len(site2_pages) == 3
assert all(p.site_deployment_id == site1.id for p in site1_pages)
assert all(p.site_deployment_id == site2.id for p in site2_pages)
def test_page_with_custom_domain(site_repo, page_repo, template_service):
site = site_repo.create(
site_name="custom-site",
storage_zone_id=555,
storage_zone_name="custom-storage",
storage_zone_password="pass",
storage_zone_region="DE",
pull_zone_id=666,
pull_zone_bcdn_hostname="custom-site.b-cdn.net",
custom_hostname="www.custom-domain.com"
)
pages = generate_site_pages(site, page_repo, template_service)
assert len(pages) == 3
for page in pages:
assert page.site_deployment_id == site.id
def test_get_specific_page_by_type(test_site, page_repo, template_service):
generate_site_pages(test_site, page_repo, template_service)
about_page = page_repo.get_by_site_and_type(test_site.id, "about")
assert about_page is not None
assert about_page.page_type == "about"
assert about_page.site_deployment_id == test_site.id
def test_check_page_exists(test_site, page_repo, template_service):
assert page_repo.exists(test_site.id, "about") is False
generate_site_pages(test_site, page_repo, template_service)
assert page_repo.exists(test_site.id, "about") is True
assert page_repo.exists(test_site.id, "contact") is True
assert page_repo.exists(test_site.id, "privacy") is True
assert page_repo.exists(test_site.id, "nonexistent") is False