117 lines
4.2 KiB
Python
117 lines
4.2 KiB
Python
"""
|
|
Unit tests for SitePageRepository
|
|
"""
|
|
|
|
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 SitePageRepository, SiteDeploymentRepository
|
|
|
|
|
|
@pytest.fixture
|
|
def in_memory_db():
|
|
"""Create an in-memory SQLite database for testing"""
|
|
engine = create_engine("sqlite:///:memory:")
|
|
Base.metadata.create_all(engine)
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
yield session
|
|
session.close()
|
|
|
|
|
|
@pytest.fixture
|
|
def site_page_repo(in_memory_db):
|
|
"""Create a SitePageRepository with in-memory database"""
|
|
return SitePageRepository(in_memory_db)
|
|
|
|
|
|
@pytest.fixture
|
|
def site_deployment_repo(in_memory_db):
|
|
"""Create a SiteDeploymentRepository with in-memory database"""
|
|
return SiteDeploymentRepository(in_memory_db)
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_site(site_deployment_repo):
|
|
"""Create a sample site deployment for testing"""
|
|
return site_deployment_repo.create(
|
|
site_name="test-site",
|
|
storage_zone_id=123,
|
|
storage_zone_name="test-storage",
|
|
storage_zone_password="password123",
|
|
storage_zone_region="DE",
|
|
pull_zone_id=456,
|
|
pull_zone_bcdn_hostname="test.b-cdn.net",
|
|
custom_hostname="www.test.com"
|
|
)
|
|
|
|
|
|
class TestSitePageRepository:
|
|
"""Tests for SitePageRepository"""
|
|
|
|
def test_create_page(self, site_page_repo, sample_site):
|
|
page = site_page_repo.create(
|
|
site_deployment_id=sample_site.id,
|
|
page_type="about",
|
|
content="<html>About Us</html>"
|
|
)
|
|
|
|
assert page.id is not None
|
|
assert page.site_deployment_id == sample_site.id
|
|
assert page.page_type == "about"
|
|
assert page.content == "<html>About Us</html>"
|
|
assert page.created_at is not None
|
|
assert page.updated_at is not None
|
|
|
|
def test_get_by_site(self, site_page_repo, sample_site):
|
|
site_page_repo.create(sample_site.id, "about", "<html>About</html>")
|
|
site_page_repo.create(sample_site.id, "contact", "<html>Contact</html>")
|
|
|
|
pages = site_page_repo.get_by_site(sample_site.id)
|
|
assert len(pages) == 2
|
|
assert {p.page_type for p in pages} == {"about", "contact"}
|
|
|
|
def test_get_by_site_and_type(self, site_page_repo, sample_site):
|
|
site_page_repo.create(sample_site.id, "about", "<html>About</html>")
|
|
site_page_repo.create(sample_site.id, "contact", "<html>Contact</html>")
|
|
|
|
page = site_page_repo.get_by_site_and_type(sample_site.id, "about")
|
|
assert page is not None
|
|
assert page.page_type == "about"
|
|
|
|
page = site_page_repo.get_by_site_and_type(sample_site.id, "privacy")
|
|
assert page is None
|
|
|
|
def test_update_content(self, site_page_repo, sample_site):
|
|
page = site_page_repo.create(sample_site.id, "about", "<html>Original</html>")
|
|
|
|
updated = site_page_repo.update_content(page.id, "<html>Updated</html>")
|
|
assert updated.content == "<html>Updated</html>"
|
|
|
|
retrieved = site_page_repo.get_by_site_and_type(sample_site.id, "about")
|
|
assert retrieved.content == "<html>Updated</html>"
|
|
|
|
def test_exists(self, site_page_repo, sample_site):
|
|
assert not site_page_repo.exists(sample_site.id, "about")
|
|
|
|
site_page_repo.create(sample_site.id, "about", "<html>About</html>")
|
|
assert site_page_repo.exists(sample_site.id, "about")
|
|
assert not site_page_repo.exists(sample_site.id, "contact")
|
|
|
|
def test_delete(self, site_page_repo, sample_site):
|
|
page = site_page_repo.create(sample_site.id, "about", "<html>About</html>")
|
|
|
|
assert site_page_repo.delete(page.id) is True
|
|
assert site_page_repo.get_by_site_and_type(sample_site.id, "about") is None
|
|
|
|
assert site_page_repo.delete(999) is False
|
|
|
|
def test_unique_constraint(self, site_page_repo, sample_site):
|
|
site_page_repo.create(sample_site.id, "about", "<html>About</html>")
|
|
|
|
with pytest.raises(ValueError):
|
|
site_page_repo.create(sample_site.id, "about", "<html>Another About</html>")
|
|
|
|
|