from io import StringIO import pytest from django.contrib.admin.models import CHANGE, LogEntry from django.contrib.contenttypes.models import ContentType from django.core.management import call_command from apps.content.current import AboutContent, HomeContent, ListingContent from apps.users.models import User pytestmark = [pytest.mark.django_db, pytest.mark.integration] def test_command_replaces_unedited_migration_copy_with_mock_content_idempotently(): call_command("seed_mock_content", stdout=StringIO()) home = HomeContent.objects.get(pk=1) about = AboutContent.objects.get(pk=1) events = ListingContent.objects.get(pk="events") blog = ListingContent.objects.get(pk="blog") assert home.hero_heading == "عنوان نمونه صفحه اصلی" assert about.title == "عنوان نمونه صفحه درباره ما" assert about.items.filter(title="کمیته نمونه").exists() assert not about.items.filter(title="انجمن علمی مهندسی کامپیوتر دانشکده‌ی فنی").exists() assert events.title == "عنوان نمونه رویدادها" assert blog.title == "عنوان نمونه بلاگ" call_command("seed_mock_content", stdout=StringIO()) assert HomeContent.objects.get(pk=1).hero_heading == "عنوان نمونه صفحه اصلی" def test_command_preserves_content_with_an_admin_change_log(): editor = User.objects.create_user( username="mock-editor", mobile="09120000001", password="TestPass123!", is_staff=True, ) home = HomeContent.objects.get(pk=1) home.hero_heading = "Admin's real heading" home.save(update_fields=["hero_heading"]) LogEntry.objects.create( user=editor, content_type=ContentType.objects.get_for_model(HomeContent), object_id="1", object_repr=str(home), action_flag=CHANGE, change_message="Changed through admin", ) call_command("seed_mock_content", stdout=StringIO()) assert HomeContent.objects.get(pk=1).hero_heading == "Admin's real heading" assert ListingContent.objects.get(slug="events").title == "عنوان نمونه رویدادها" def test_dry_run_does_not_change_seeded_content(): output = StringIO() call_command("seed_mock_content", dry_run=True, stdout=output) assert HomeContent.objects.get(pk=1).hero_heading == "انجمن علمی کامپیوتر دانشگاه گیلان" assert "dry run" in output.getvalue().lower()