Модульное тестирование Django - можно ли указать mime-тип для загрузки файла? - PullRequest
0 голосов
/ 25 января 2019

У меня есть сайт Django (1.11), который позволяет загружать медиа-файлы.У меня есть некоторые базовые проверки для типов MIME (например, просто принять файлы 'video / m4v').

Эта проверка работает нормально, когда я использую сайт в браузере (через веб-интерфейс) - через python manage.py runserver.

Сейчас я пишу некоторые модульные тесты, но обнаруживаю, что независимо от типа файла, который я публикую, он всегда выбирается как mime-тип application / octet-stream.

Мой модультестовый код выглядит следующим образом:

media_file = open('sample_video.m4v','rb') 
self.client.login(username='admin', password='password')
response = self.client.post(reverse('oppia_av_upload'), {'media_file': media_file })
self.assertEqual(response.status_code, 200)

В команде self.client.post есть ли способ указать тип mime, чтобы он был правильно выбран?

Для информации,Я знаю, что с типами MIME можно «возиться», поэтому это не будет гарантией того, что файл относится к тому типу, к которому он относится.

Любая помощь, высоко ценимая.

Редактировать: Просто включить код проверки загрузки файла в проверку формы на случай, если что-то здесь я делаю неправильно:

def clean(self):
        cleaned_data = super(UploadMediaForm, self).clean()
        media_file = cleaned_data.get("media_file")
        print(media_file.content_type)
        if media_file is not None and media_file.content_type not in settings.OPPIA_MEDIA_FILE_TYPES:
            raise forms.ValidationError(_(u"You may only upload a media file which is one of the following types: %s" % ', '.join(settings.OPPIA_MEDIA_FILE_TYPES)))

1 Ответ

0 голосов
/ 25 января 2019

Возможно, вы могли бы использовать SimpleUploadedFile Джанго.Это позволяет вам прикрепить тип содержимого к файлу.Например:

from django.core.files.uploadedfile import SimpleUploadedFile

filename = 'sample_video.m4v'
with open(filename,'rb') as f:
    media_file =  SimpleUploadedFile(filename, f, content_type="video/m4v")
    self.client.login(username='admin', password='password')
    response = self.client.post(reverse('oppia_av_upload'), {'media_file': media_file })
    self.assertEqual(response.status_code, 200)
...