J'ai essayé de faire fonctionner les tests sur les formulaires de téléchargement. Mais chaque fois que je lance les tests, il dit que le fichier est du mauvais type.
Le formulaire de téléchargement enregistre le fichier avec un nom de fichier généré aléatoirement :
classe Vidéo(models.Model):
def get_generated_path(self):
# Génère un chemin aléatoire pour le téléchargement du fichier vidéo
original_file = models.CharField(null=True)
uploaded_file = models.FileField(storage=FileSystemStorage(location=
settings.MEDIA_ROOT), upload_to=get_generated_path)
video_name = models.TextField()
Et le formulaire ressemble à :
class VideoForm(forms.Form):
video_file = forms.FileField()
video_name = forms.CharField()
def clean_video_file(forms.Form):
content = self.cleaned_data['video_file']
content_type = content.content_type.split('/')[0]
if content_type in settings.CONTENT_TYPES:
if content._size > settings.MAX_UPLOAD_SIZE:
raise forms.ValidationError(_('Veuillez garder la taille du fichier sous %s.
Taille actuelle %s') % (filesizeformat(
settings.MAX_UPLOAD_SIZE), filesizeformat(content._size)))
else:
raise forms.ValidationError(_('Le type de fichier n'est pas pris en charge,
le type de contenu est : %s' % content_type))
return content
La plupart de la logique restante se trouve dans les vues :
def upload_video(request):
try:
# Vérifier si l'utilisateur est authentifié
if form.is_valid():
video_file = request.FILES['video_file']
video_name = form.cleaned_data['video_name']
save_video = Video.objects.create(
original_file = 'uploaded_videos' + user.username,
video_name = video_name)
return HTTPResponseRedirect('page-suivante')
except Exception, e:
...
Les tests sont écrits comme suit :
def test_video_form(TestCase):
user = # Créer un utilisateur factice
test_video = SimpleUploadedFile('test_video.flv', open(
'chemin/vers/vidéo/test', 'rb'))
form = VideoForm(user, {'video_name': test_video}, )
self.assertTrue(form.is_valid())
Le test ci-dessus échoue toujours car il dit que le type de fichier de 'test_video.flv' est text/plain. J'ai vérifié que 'test_video.flv' est du bon type. Comment passer ces fichiers au formulaire de téléchargement et les tester.