Repository: zestedesavoir/zds-site

Issue:
[beta 15.9] erreur 500 lors de l'ajout d'une image a mon tutoriel
Scénario : 
- je crée un tutoriel avec un titre et une catégorie
- je vais sur "editer" pour mettre une image a mon tutoriel
- je rajoute l'image ci-dessous (qui ne fait que 176Ko)
- pouff **erreur 500**

Au vu de la fonctionnalité cassé, je poserait bien un tag bloquant par ici. A vous de voir

![erreor500](https://cloud.githubusercontent.com/assets/6066015/10488859/f5c83d9c-729a-11e5-9d0d-0c0e0b0a2adf.PNG)



Discussion:
c'est bloquant et la faute est un peu bête : 

``` python
img.slug = slugify(self.request.FILES["image"])
```

manque un path quelquepart...


Resolving patch:
diff --git a/zds/tutorialv2/views/views_contents.py b/zds/tutorialv2/views/views_contents.py
--- a/zds/tutorialv2/views/views_contents.py
+++ b/zds/tutorialv2/views/views_contents.py
@@ -107,7 +107,7 @@ def form_valid(self, form):
             img.physical = self.request.FILES["image"]
             img.gallery = gal
             img.title = self.request.FILES["image"]
-            img.slug = slugify(self.request.FILES["image"])
+            img.slug = slugify(self.request.FILES["image"].name)
             img.pubdate = datetime.now()
             img.save()
             self.content.image = img
@@ -288,7 +288,7 @@ def form_valid(self, form):
             img.physical = self.request.FILES["image"]
             img.gallery = publishable.gallery
             img.title = self.request.FILES["image"]
-            img.slug = slugify(self.request.FILES["image"])
+            img.slug = slugify(self.request.FILES["image"].name)
             img.pubdate = datetime.now()
             img.save()
             publishable.image = img


Test patch:
diff --git a/zds/tutorialv2/tests/tests_views.py b/zds/tutorialv2/tests/tests_views.py
--- a/zds/tutorialv2/tests/tests_views.py
+++ b/zds/tutorialv2/tests/tests_views.py
@@ -256,6 +256,7 @@ def test_basic_tutorial_workflow(self):
                 'type': u'TUTORIAL',
                 'licence': self.licence.pk,
                 'subcategory': self.subcategory.pk,
+                'image': open('{}/fixtures/noir_black.png'.format(settings.BASE_DIR))
             },
             follow=False)
         self.assertEqual(result.status_code, 302)
@@ -266,6 +267,9 @@ def test_basic_tutorial_workflow(self):
         slug = tuto.slug
         versioned = tuto.load_version()
 
+        self.assertEqual(Gallery.objects.filter(pk=tuto.gallery.pk).count(), 1)
+        self.assertEqual(Image.objects.filter(gallery__pk=tuto.gallery.pk).count(), 1)  # icon is uploaded
+
         # access to tutorial
         result = self.client.get(
             reverse('content:edit', args=[pk, slug]),
@@ -285,11 +289,14 @@ def test_basic_tutorial_workflow(self):
                 'type': u'TUTORIAL',
                 'licence': new_licence.pk,
                 'subcategory': self.subcategory.pk,
-                'last_hash': versioned.compute_hash()
+                'last_hash': versioned.compute_hash(),
+                'image': open('{}/fixtures/logo.png'.format(settings.BASE_DIR))
             },
             follow=False)
         self.assertEqual(result.status_code, 302)
 
+        self.assertEqual(Image.objects.filter(gallery__pk=tuto.gallery.pk).count(), 2)  # new icon is uploaded
+
         tuto = PublishableContent.objects.get(pk=pk)
         self.assertEqual(tuto.title, random)
         self.assertEqual(tuto.description, random)