""" Unit tests for SitePageRepository """ import pytest from unittest.mock import Mock, MagicMock from sqlalchemy.exc import IntegrityError from src.database.repositories import SitePageRepository from src.database.models import SitePage @pytest.fixture def mock_session(): return Mock() @pytest.fixture def site_page_repo(mock_session): return SitePageRepository(mock_session) def test_create_site_page_success(site_page_repo, mock_session): mock_session.add = Mock() mock_session.commit = Mock() mock_session.refresh = Mock() page = site_page_repo.create( site_deployment_id=1, page_type="about", content="About Page" ) assert mock_session.add.called assert mock_session.commit.called assert mock_session.refresh.called def test_create_site_page_duplicate_raises_error(site_page_repo, mock_session): mock_session.add = Mock() mock_session.commit = Mock(side_effect=IntegrityError("", "", "")) mock_session.rollback = Mock() with pytest.raises(ValueError) as exc_info: site_page_repo.create( site_deployment_id=1, page_type="about", content="About Page" ) assert "already exists" in str(exc_info.value) assert mock_session.rollback.called def test_get_by_site(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_pages = [ Mock(spec=SitePage, id=1, page_type="about"), Mock(spec=SitePage, id=2, page_type="contact"), Mock(spec=SitePage, id=3, page_type="privacy") ] mock_filter.all = Mock(return_value=mock_pages) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) pages = site_page_repo.get_by_site(1) assert len(pages) == 3 assert mock_session.query.called def test_get_by_site_and_type(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_page = Mock(spec=SitePage, id=1, page_type="about") mock_filter.first = Mock(return_value=mock_page) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) page = site_page_repo.get_by_site_and_type(1, "about") assert page == mock_page assert mock_session.query.called def test_get_by_site_and_type_not_found(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=None) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) page = site_page_repo.get_by_site_and_type(1, "about") assert page is None def test_update_content_success(site_page_repo, mock_session): mock_page = Mock(spec=SitePage, id=1, content="Old") mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=mock_page) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) mock_session.commit = Mock() mock_session.refresh = Mock() updated_page = site_page_repo.update_content(1, "New") assert updated_page.content == "New" assert mock_session.commit.called def test_update_content_page_not_found(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=None) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) with pytest.raises(ValueError) as exc_info: site_page_repo.update_content(1, "New") assert "not found" in str(exc_info.value) def test_exists_returns_true(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_page = Mock(spec=SitePage) mock_filter.first = Mock(return_value=mock_page) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) exists = site_page_repo.exists(1, "about") assert exists is True def test_exists_returns_false(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=None) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) exists = site_page_repo.exists(1, "about") assert exists is False def test_delete_success(site_page_repo, mock_session): mock_page = Mock(spec=SitePage, id=1) mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=mock_page) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) mock_session.delete = Mock() mock_session.commit = Mock() result = site_page_repo.delete(1) assert result is True assert mock_session.delete.called assert mock_session.commit.called def test_delete_page_not_found(site_page_repo, mock_session): mock_query = Mock() mock_filter = Mock() mock_filter.first = Mock(return_value=None) mock_query.filter = Mock(return_value=mock_filter) mock_session.query = Mock(return_value=mock_query) result = site_page_repo.delete(1) assert result is False