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

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>")