✅(backend) fix migration test using model factory
Migration tests should not import and use factories or models directly from the code because they would not be in sync with the database in the state that each state needs to test it. Instead the migrator object passed as argument allows us to retrieve a minimal version of the models in sync with the state of the database that we are testing. What we get is a minimal model and we need to simulate all the methods that we could have on the real model and that are needed for testing.
This commit is contained in:
committed by
Manuel Raynaud
parent
621393165f
commit
6976bb7c78
@@ -1,35 +0,0 @@
|
||||
import pytest
|
||||
|
||||
from core import factories
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_update_blank_title_migration(migrator):
|
||||
"""
|
||||
Test that the migration fixes the titles of documents that are
|
||||
"Untitled document", "Unbenanntes Dokument" or "Document sans titre"
|
||||
"""
|
||||
migrator.apply_initial_migration(("core", "0017_add_fields_for_soft_delete"))
|
||||
|
||||
english_doc = factories.DocumentFactory(title="Untitled document")
|
||||
german_doc = factories.DocumentFactory(title="Unbenanntes Dokument")
|
||||
french_doc = factories.DocumentFactory(title="Document sans titre")
|
||||
other_doc = factories.DocumentFactory(title="My document")
|
||||
|
||||
assert english_doc.title == "Untitled document"
|
||||
assert german_doc.title == "Unbenanntes Dokument"
|
||||
assert french_doc.title == "Document sans titre"
|
||||
assert other_doc.title == "My document"
|
||||
|
||||
# Apply the migration
|
||||
migrator.apply_tested_migration(("core", "0018_update_blank_title"))
|
||||
|
||||
english_doc.refresh_from_db()
|
||||
german_doc.refresh_from_db()
|
||||
french_doc.refresh_from_db()
|
||||
other_doc.refresh_from_db()
|
||||
|
||||
assert english_doc.title == None
|
||||
assert german_doc.title == None
|
||||
assert french_doc.title == None
|
||||
assert other_doc.title == "My document"
|
||||
@@ -0,0 +1,47 @@
|
||||
import pytest
|
||||
|
||||
from core import models
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_update_blank_title_migration(migrator):
|
||||
"""
|
||||
Test that the migration fixes the titles of documents that are
|
||||
"Untitled document", "Unbenanntes Dokument" or "Document sans titre"
|
||||
"""
|
||||
old_state = migrator.apply_initial_migration(
|
||||
("core", "0017_add_fields_for_soft_delete")
|
||||
)
|
||||
OldDocument = old_state.apps.get_model("core", "Document")
|
||||
|
||||
old_english_doc = OldDocument.objects.create(
|
||||
title="Untitled document", depth=1, path="0000001"
|
||||
)
|
||||
old_german_doc = OldDocument.objects.create(
|
||||
title="Unbenanntes Dokument", depth=1, path="0000002"
|
||||
)
|
||||
old_french_doc = OldDocument.objects.create(
|
||||
title="Document sans titre", depth=1, path="0000003"
|
||||
)
|
||||
old_other_doc = OldDocument.objects.create(
|
||||
title="My document", depth=1, path="0000004"
|
||||
)
|
||||
|
||||
assert old_english_doc.title == "Untitled document"
|
||||
assert old_german_doc.title == "Unbenanntes Dokument"
|
||||
assert old_french_doc.title == "Document sans titre"
|
||||
assert old_other_doc.title == "My document"
|
||||
|
||||
# Apply the migration
|
||||
new_state = migrator.apply_tested_migration(("core", "0018_update_blank_title"))
|
||||
NewDocument = new_state.apps.get_model("core", "Document")
|
||||
|
||||
new_english_doc = NewDocument.objects.get(pk=old_english_doc.pk)
|
||||
new_german_doc = NewDocument.objects.get(pk=old_german_doc.pk)
|
||||
new_french_doc = NewDocument.objects.get(pk=old_french_doc.pk)
|
||||
new_other_doc = NewDocument.objects.get(pk=old_other_doc.pk)
|
||||
|
||||
assert new_english_doc.title == None
|
||||
assert new_german_doc.title == None
|
||||
assert new_french_doc.title == None
|
||||
assert new_other_doc.title == "My document"
|
||||
Reference in New Issue
Block a user