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

186 lines
5.3 KiB
Python

"""
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="<html>About Page</html>"
)
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="<html>About Page</html>"
)
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="<html>Old</html>")
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, "<html>New</html>")
assert updated_page.content == "<html>New</html>"
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, "<html>New</html>")
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