""" 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="About Us" ) assert page.id is not None assert page.site_deployment_id == sample_site.id assert page.page_type == "about" assert page.content == "About Us" 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", "About") site_page_repo.create(sample_site.id, "contact", "Contact") 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", "About") site_page_repo.create(sample_site.id, "contact", "Contact") 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", "Original") updated = site_page_repo.update_content(page.id, "Updated") assert updated.content == "Updated" retrieved = site_page_repo.get_by_site_and_type(sample_site.id, "about") assert retrieved.content == "Updated" 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", "About") 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", "About") 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", "About") with pytest.raises(ValueError): site_page_repo.create(sample_site.id, "about", "Another About")