test django FileField метод rename_to - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы протестировать метод, вызываемый при присвоении имени загруженному файлу в модели 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)

...