Browse Source

Evolution #124: Du tessst et encore du test: Modification et suppression element.

bastien 13 years ago
parent
commit
358583dfcd

+ 14 - 1
src/Muzich/CoreBundle/Controller/ElementController.php View File

@@ -105,6 +105,19 @@ class ElementController extends Controller
105 105
       }
106 106
     }
107 107
     
108
+    /**
109
+     * Bug lors des tests: L'user n'est pas 'lié' a celui en base par doctrine.
110
+     * Docrine le voit si on faire une requete directe.
111
+     */
112
+    $user = $this->getUser();
113
+    if ($this->container->getParameter('env') == 'test')
114
+    {
115
+      $user = $this->getDoctrine()->getRepository('MuzichCoreBundle:User')->findOneById(
116
+        $this->container->get('security.context')->getToken()->getUser()->getId(),
117
+        array()
118
+      )->getSingleResult();
119
+    }
120
+    
108 121
     $element = $this->checkExistingAndOwned($element_id);
109 122
     // Si il y a un groupe on le retire pour le bind
110 123
     $group = $element->getGroup();
@@ -119,7 +132,7 @@ class ElementController extends Controller
119 132
       $status = 'success';
120 133
       $em = $this->getDoctrine()->getEntityManager();
121 134
       $factory = new ElementManager($element, $em, $this->container);
122
-      $factory->proceedFill($this->getUser());
135
+      $factory->proceedFill($user);
123 136
       // Si il y avais un groupe on le remet
124 137
       $element->setGroup($group);
125 138
       $em->persist($element);

+ 110 - 0
src/Muzich/CoreBundle/Tests/Controller/ElementControllerTest.php View File

@@ -214,4 +214,114 @@ class ElementControllerTest extends FunctionalTest
214 214
     
215 215
   }
216 216
   
217
+  public function testUpdateElement()
218
+  {
219
+    $this->client = self::createClient();
220
+    $this->connectUser('bux', 'toor');
221
+    
222
+    $bux = $this->getUser();
223
+    
224
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
225
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
226
+    ;
227
+    
228
+    // On est sur la page home, on peut voir le lien de modification de l'élément
229
+    $this->exist('a[href="'.($url = $this->generateUrl('element_edit', array('element_id' => $element->getId()))).'"]');
230
+  
231
+    // On effectue la demande ajax d'edition
232
+    $crawler = $this->client->request(
233
+      'GET', 
234
+      $url, 
235
+      array(), 
236
+      array(), 
237
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
238
+    );
239
+    
240
+    $this->isResponseSuccess();
241
+    
242
+    $response = json_decode($this->client->getResponse()->getContent(), true);
243
+    $this->assertEquals($response['status'], 'success');
244
+    $this->assertEquals($response['form_name'], 'element_'.$element->getId());
245
+    $this->assertTrue(strpos($response['html'], '<form novalidate class="edit_element"') !== false);
246
+    
247
+    // Il faut que l'on récupère le token
248
+    preg_match("#name=\"element_add\[_token\]\" value=\"([a-zA-Z0-9]+)\" />#", $response['html'], $chaines);
249
+    $csrf = $chaines[1];
250
+    
251
+    // On effectue la modification en ajax
252
+    $url = $this->generateUrl('element_update', array('element_id' => $element->getId()));
253
+    
254
+    $crawler = $this->client->request(
255
+      'POST', 
256
+      $url, 
257
+      array(
258
+          'element_add' => array(
259
+              '_token' => $csrf,
260
+              'name'   => $element->getName().'555',
261
+              'url'    => $element->getUrl(),
262
+              'tags'   => $element->getTagsIdsJson()
263
+          )
264
+        
265
+      ), 
266
+      array(), 
267
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
268
+    );
269
+    
270
+    $this->outputDebug();
271
+    $this->isResponseSuccess();
272
+    
273
+    $response = json_decode($this->client->getResponse()->getContent(), true);
274
+    $this->assertEquals($response['status'], 'success');
275
+    $this->assertTrue(strpos($response['html'], $element->getName().'555') !== false);
276
+    
277
+    $this->crawler = $this->client->request('GET', $this->generateUrl('home'));
278
+    $this->exist('span.element_name:contains("'.$element->getName().'555'.'")');
279
+    
280
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
281
+      ->findOneByName($element->getName().'555')
282
+    ;
283
+    $this->assertTrue(!is_null($element));
284
+  }
285
+  
286
+  public function testDeleteElement()
287
+  {
288
+    $this->client = self::createClient();
289
+    $this->connectUser('bux', 'toor');
290
+    
291
+    $bux = $this->getUser();
292
+    
293
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
294
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
295
+    ;
296
+    
297
+    // On est sur la page home, on peut voir le lien de suppression l'élément
298
+    $this->exist('a[href="'.($url = $this->generateUrl('element_remove', array(
299
+        'element_id' => $element->getId()
300
+    ))).'"]');
301
+  
302
+    // Suppression de l'élément
303
+ 
304
+    // On effectue la demande ajax d'edition
305
+    $crawler = $this->client->request(
306
+      'GET', 
307
+      $url, 
308
+      array(), 
309
+      array(), 
310
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
311
+    );
312
+    
313
+    $this->isResponseSuccess();
314
+    
315
+    $response = json_decode($this->client->getResponse()->getContent(), true);
316
+    $this->assertEquals($response['status'], 'success');
317
+    
318
+    $this->crawler = $this->client->request('GET', $this->generateUrl('home'));
319
+    $this->notExist('span.element_name:contains("'.$element->getName().'")');
320
+    
321
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
322
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
323
+    ;
324
+    $this->assertTrue(is_null($element));
325
+  }
326
+  
217 327
 }