Я хотел бы протестировать метод, вызываемый при присвоении имени загруженному файлу в модели django. Модель использует django.db.models.FileField
, а мой метод rename_file
вызывается с использованием аргумента upload_to
.
Как проще всего это сделать? Использование Factory Boy или django.core.files.uploadedfile.SimpleUploadedFile
не работает.
app / models.py
class Document(models.Model):
def rename_file(self, filename):
ext = filename.split('.')[-1]
new_name = uuid.uuid4().hex
return f'documents/{new_name}.{ext}'
owner = models.ForeignKey(
User,
on_delete=models.CASCADE,
editable=True,
)
document = models.FileField(upload_to=rename_file)
...
tests / factoryies.py
class DocumentFactory(DjangoModelFactory):
class Meta:
model = Document
owner = SubFactory(UserFactory)
# document = django.FileField(filename=Faker("file_name"))
tests / test_models.py
@pytest.mark.django_db
def test_document_model_rename_file():
Document = DocumentFactory.build()
doc_name = Document.document.name
print(f"{doc_name = }")
assert validate_uuid4(doc_name)