Browse Source

Tests de moderation des éléments renfocré: teste les compteur de contenu modéré et de mauvais signalements.

bastien 13 years ago
parent
commit
b8222743e3

+ 0 - 181
src/Muzich/CoreBundle/Tests/Controller/CommentControllerTest.php View File

@@ -207,186 +207,5 @@ class CommentControllerTest extends FunctionalTest
207 207
     $this->assertEquals($response['status'], 'error');
208 208
   }
209 209
   
210
-  /**
211
-   * Test du signalement de commentaires non appropriés
212
-   * Puis de leurs modérations
213
-   */
214
-  public function testAlertAndModerate()
215
-  {
216
-    // Première chose: dans ce test on a besoin de tester la modération.
217
-    // Du coup bux doit être promus admin
218
-    $this->client = self::createClient();
219
-    $output = $this->runCommand(
220
-      $this->client, 
221
-      "fos:user:promote bux ROLE_ADMIN"
222
-    );
223
-
224
-    /**
225
-     * Scénario: joelle signale deux commentaires: un de bux et un de paul
226
-     * sur l'élément d'ed cox.
227
-     * En moderation 
228
-     * * un commentaire (bux) est effectivement refusé: 
229
-     *   (TODO dans le code) Le compteur de mauvaise attitude augmente
230
-     * * un commentaire (paul) est considéré comme ok, le compteur (faux signalement) 
231
-     *   de joelle s'incrémente de 1.
232
-     */
233
-    
234
-    $em = $this->client->getKernel()->getContainer()->get('doctrine')->getEntityManager();
235
-    $this->connectUser('joelle', 'toor');
236
-    $joelle = $this->getUser();
237
-    $joelle_fake_alerts = $joelle->getBadReportCount();
238
-    
239
-    // On récupère les deux commentaires
240
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
241
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
242
-    ;
243
-    $cm = new CommentsManager($element->getComments());
244
-    $comment_bux  = $cm->get(0);
245
-    $comment_paul = $cm->get(1);
246
-    
247
-    // En base rien n'a encore été touché
248
-    $this->assertEquals(0, $cm->countCommentAlert());
249
-    $this->assertEquals(null, $element->getCountCommentReport());
250
-    
251
-    // joelle signale deux éléments
252
-    $this->crawler = $this->client->request(
253
-      'GET', 
254
-      $this->generateUrl('ajax_alert_comment', array(
255
-        'element_id' => $element->getId(),
256
-        'date'       => $comment_bux['d'],
257
-        'token'      => $joelle->getPersonalHash()
258
-      )),
259
-      array(), 
260
-      array(), 
261
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
262
-    );
263
-    
264
-    $this->isResponseSuccess();
265
-    
266
-    $response = json_decode($this->client->getResponse()->getContent(), true);
267
-    $this->assertEquals($response['status'], 'success');
268
-    
269
-    // Les données en bases ont évolués
270
-    // On récupère les deux commentaires
271
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
272
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
273
-    ;
274
-    $cm = new CommentsManager($element->getComments());
275
-    $comment_bux  = $cm->get(0);
276
-    $comment_paul = $cm->get(1);
277
-    
278
-    $this->assertEquals(1, $cm->countCommentAlert());
279
-    $this->assertEquals(1, $element->getCountCommentReport());
280
-    
281
-    // deuxième signalement
282
-    $this->crawler = $this->client->request(
283
-      'GET', 
284
-      $this->generateUrl('ajax_alert_comment', array(
285
-        'element_id' => $element->getId(),
286
-        'date'       => $comment_paul['d'],
287
-        'token'      => $joelle->getPersonalHash()
288
-      )),
289
-      array(), 
290
-      array(), 
291
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
292
-    );
293
-    
294
-    $this->isResponseSuccess();
295
-    
296
-    $response = json_decode($this->client->getResponse()->getContent(), true);
297
-    $this->assertEquals($response['status'], 'success');
298
-    
299
-    // Les données en bases ont évolués
300
-    // On récupère les deux commentaires
301
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
302
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
303
-    ;
304
-    $cm = new CommentsManager($element->getComments());
305
-    $comment_bux  = $cm->get(0);
306
-    $comment_paul = $cm->get(1);
307
-    
308
-    $this->assertEquals(2, $cm->countCommentAlert());
309
-    $this->assertEquals(2, $element->getCountCommentReport());
310
-    
311
-    /**
312
-     * On passe maintenant a la modération
313
-     */
314
-    
315
-    $this->disconnectUser();
316
-    $this->connectUser('bux', 'toor');
317
-    $bux = $this->getUser();
318
-    
319
-    // bux ouvre la page de modération des commentaires
320
-    $this->crawler = $this->client->request('GET', $this->generateUrl('moderate_comments_index'));
321
-    
322
-    // On voit les deux commentaires signalés dans la liste
323
-    $this->exist('li.comment:contains("C\'est trop bon hein ?")');
324
-    $this->exist('li.comment:contains("C\'est pas mal en effet")');
325
-    
326
-    // Refus de celui de bux
327
-    $this->crawler = $this->client->request(
328
-      'GET', 
329
-      $this->generateUrl('moderate_comment_refuse', array(
330
-        'element_id' => $element->getId(),
331
-        'date'       => $comment_bux['d']
332
-      )),
333
-      array(), 
334
-      array(), 
335
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
336
-    );
337
-    
338
-    $this->isResponseSuccess();
339
-    
340
-    $response = json_decode($this->client->getResponse()->getContent(), true);
341
-    $this->assertEquals($response['status'], 'success');
342
-    
343
-    // TODO: check du compteur de mauvais comportements de bux
344
-    
345
-    // la base est a jour
346
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
347
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
348
-    ;
349
-    $cm = new CommentsManager($element->getComments());
350
-    
351
-    $this->assertEquals(1, $cm->countCommentAlert());
352
-    $this->assertEquals(1, $element->getCountCommentReport());
353
-    
354
-    // Clean de celui de paul
355
-    $this->crawler = $this->client->request(
356
-      'GET', 
357
-      $this->generateUrl('moderate_comment_clean', array(
358
-        'element_id' => $element->getId(),
359
-        'date'       => $comment_paul['d']
360
-      )),
361
-      array(), 
362
-      array(), 
363
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
364
-    );
365
-    
366
-    $this->isResponseSuccess();
367
-    
368
-    $response = json_decode($this->client->getResponse()->getContent(), true);
369
-    $this->assertEquals($response['status'], 'success');
370
-    
371
-    // la base est a jour
372
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
373
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
374
-    ;
375
-    $cm = new CommentsManager($element->getComments());
376
-    
377
-    $this->assertEquals(0, $cm->countCommentAlert());
378
-    $this->assertEquals(0, $element->getCountCommentReport());
379
-    
380
-    // Mais comme joelle a signalé un commentaire considéré comme ok par la modération
381
-    // joelle vois son compteur de faux signalement incrémenté
382
-    $joelle = $this->getUser('joelle');
383
-    $this->assertEquals($joelle_fake_alerts+1, $joelle->getBadReportCount());
384
-    
385
-    // Et si on se rend sur la page home, le commentaire de bux a disparu
386
-    $this->crawler = $this->client->request('GET', $this->generateUrl('home'));
387
-    
388
-    $this->exist('li.comment:contains("C\'est pas mal en effet")');
389
-    $this->notExist('li.comment:contains("C\'est trop bon hein ?")');
390
-  }
391 210
   
392 211
 }

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

@@ -326,139 +326,6 @@ class ElementControllerTest extends FunctionalTest
326 326
     $this->assertTrue(is_null($element));
327 327
   }
328 328
   
329
-  public function testReportElement()
330
-  {
331
-    $this->client = self::createClient();
332
-    $this->connectUser('paul', 'toor');
333
-    
334
-    $paul = $this->getUser();
335
-    
336
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
337
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
338
-    ;
339
-    
340
-    // Paul signale cet élément comme pas bien
341
-    $url = $this->generateUrl('ajax_report_element', array(
342
-      'element_id' => $element->getId(),
343
-      'token'      => $paul->getPersonalHash()
344
-    ));
345
-    
346
-    $crawler = $this->client->request(
347
-      'GET', 
348
-      $url, 
349
-      array(), 
350
-      array(), 
351
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
352
-    );
353
-    
354
-    $this->isResponseSuccess();
355
-    
356
-    $response = json_decode($this->client->getResponse()->getContent(), true);
357
-    $this->assertEquals($response['status'], 'success');
358
-    
359
-    // On check en base
360
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
361
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
362
-    ;
363
-    
364
-    $this->assertEquals($element->getCountReport(), 1);
365
-    $this->assertEquals($element->getReportIds(), array((string)$paul->getId()));
366
-    
367
-    // Si il effectue le signalement une deuxième fois sur le même element
368
-    // Ca ne doit pas bouger puisqu'il l'a déjà fait
369
-    $url = $this->generateUrl('ajax_report_element', array(
370
-      'element_id' => $element->getId(),
371
-      'token'      => $paul->getPersonalHash()
372
-    ));
373
-    
374
-    $crawler = $this->client->request(
375
-      'GET', 
376
-      $url, 
377
-      array(), 
378
-      array(), 
379
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
380
-    );
381
-    
382
-    $this->isResponseSuccess();
383
-    
384
-    $response = json_decode($this->client->getResponse()->getContent(), true);
385
-    $this->assertEquals($response['status'], 'success');
386
-    
387
-    // On check en base
388
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
389
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
390
-    ;
391
-    
392
-    $this->assertEquals($element->getCountReport(), 1);
393
-    $this->assertEquals($element->getReportIds(), array((string)$paul->getId()));
394
-    
395
-    $this->disconnectUser();
396
-    // On connecte joelle pour faire le même test sur le même élément
397
-    $this->connectUser('joelle', 'toor');
398
-    
399
-    $joelle = $this->getUser();
400
-    
401
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
402
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
403
-    ;
404
-    
405
-    // Paul signale cet élément comme pas bien
406
-    $url = $this->generateUrl('ajax_report_element', array(
407
-      'element_id' => $element->getId(),
408
-      'token'      => $joelle->getPersonalHash()
409
-    ));
410
-    
411
-    $crawler = $this->client->request(
412
-      'GET', 
413
-      $url, 
414
-      array(), 
415
-      array(), 
416
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
417
-    );
418
-    
419
-    $this->isResponseSuccess();
420
-    
421
-    $response = json_decode($this->client->getResponse()->getContent(), true);
422
-    $this->assertEquals($response['status'], 'success');
423
-    
424
-    // On check en base
425
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
426
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
427
-    ;
428
-    
429
-    $this->assertEquals($element->getCountReport(), 2);
430
-    $this->assertEquals($element->getReportIds(), array((string)$paul->getId(), (string)$joelle->getId()));
431
-    
432
-    // Si il effectue le signalement une deuxième fois sur le même element
433
-    // Ca ne doit pas bouger puisqu'il l'a déjà fait
434
-    $url = $this->generateUrl('ajax_report_element', array(
435
-      'element_id' => $element->getId(),
436
-      'token'      => $joelle->getPersonalHash()
437
-    ));
438
-    
439
-    $crawler = $this->client->request(
440
-      'GET', 
441
-      $url, 
442
-      array(), 
443
-      array(), 
444
-      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
445
-    );
446
-    
447
-    $this->isResponseSuccess();
448
-    
449
-    $response = json_decode($this->client->getResponse()->getContent(), true);
450
-    $this->assertEquals($response['status'], 'success');
451
-    
452
-    // On check en base
453
-    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
454
-      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
455
-    ;
456
-    
457
-    $this->assertEquals($element->getCountReport(), 2);
458
-    $this->assertEquals($element->getReportIds(), array((string)$paul->getId(), (string)$joelle->getId()));
459
-    
460
-  }
461
-  
462 329
   /**
463 330
    * Procédure de vote
464 331
    */

+ 455 - 0
src/Muzich/CoreBundle/Tests/Controller/ModerateControllerTest.php View File

@@ -0,0 +1,455 @@
1
+<?php
2
+
3
+namespace Muzich\CoreBundle\Tests\Controller;
4
+
5
+use Muzich\CoreBundle\lib\FunctionalTest;
6
+use Muzich\CoreBundle\Managers\CommentsManager;
7
+
8
+/**
9
+ * Test des procédure de modérations
10
+ * 
11
+ * 
12
+ */
13
+class ModerateControllerTest extends FunctionalTest
14
+{
15
+ 
16
+  public function testReportElement()
17
+  {
18
+    $this->client = self::createClient();
19
+    $this->connectUser('paul', 'toor');
20
+    
21
+    $paul = $this->getUser();
22
+    $paul_bad_reports_count = $paul->getBadReportCount();
23
+    $bux_moderated_element_count = $this->getUser('bux')->getModeratedElementCount();
24
+    
25
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
26
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
27
+    ;
28
+    
29
+    // Paul signale cet élément comme pas bien
30
+    $url = $this->generateUrl('ajax_report_element', array(
31
+      'element_id' => $element_ed->getId(),
32
+      'token'      => $paul->getPersonalHash()
33
+    ));
34
+    
35
+    $crawler = $this->client->request(
36
+      'GET', 
37
+      $url, 
38
+      array(), 
39
+      array(), 
40
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
41
+    );
42
+    
43
+    $this->isResponseSuccess();
44
+    
45
+    $response = json_decode($this->client->getResponse()->getContent(), true);
46
+    $this->assertEquals($response['status'], 'success');
47
+    
48
+    // On check en base
49
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
50
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
51
+    ;
52
+    
53
+    $this->assertEquals($element_ed->getCountReport(), 1);
54
+    $this->assertEquals($element_ed->getReportIds(), array((string)$paul->getId()));
55
+    
56
+    // Si il effectue le signalement une deuxième fois sur le même element
57
+    // Ca ne doit pas bouger puisqu'il l'a déjà fait
58
+    $url = $this->generateUrl('ajax_report_element', array(
59
+      'element_id' => $element_ed->getId(),
60
+      'token'      => $paul->getPersonalHash()
61
+    ));
62
+    
63
+    $crawler = $this->client->request(
64
+      'GET', 
65
+      $url, 
66
+      array(), 
67
+      array(), 
68
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
69
+    );
70
+    
71
+    $this->isResponseSuccess();
72
+    
73
+    $response = json_decode($this->client->getResponse()->getContent(), true);
74
+    $this->assertEquals($response['status'], 'success');
75
+    
76
+    // On check en base
77
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
78
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
79
+    ;
80
+    
81
+    $this->assertEquals($element_ed->getCountReport(), 1);
82
+    $this->assertEquals($element_ed->getReportIds(), array((string)$paul->getId()));
83
+    
84
+    // Paul va ausi signaler un autre élément
85
+    // Babylon Pression - Des Tasers et des Pauvres
86
+    
87
+    // On check en base
88
+    $element_bab = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
89
+      ->findOneByName('Babylon Pression - Des Tasers et des Pauvres')
90
+    ;
91
+    
92
+    $this->assertEquals($element_bab->getCountReport(), 0);
93
+    $this->assertEquals($element_bab->getReportIds(), null);
94
+    
95
+    // Si il effectue le signalement une deuxième fois sur le même element
96
+    // Ca ne doit pas bouger puisqu'il l'a déjà fait
97
+    $url = $this->generateUrl('ajax_report_element', array(
98
+      'element_id' => $element_bab->getId(),
99
+      'token'      => $paul->getPersonalHash()
100
+    ));
101
+    
102
+    $crawler = $this->client->request(
103
+      'GET', 
104
+      $url, 
105
+      array(), 
106
+      array(), 
107
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
108
+    );
109
+    
110
+    $this->isResponseSuccess();
111
+    
112
+    $response = json_decode($this->client->getResponse()->getContent(), true);
113
+    $this->assertEquals($response['status'], 'success');
114
+    
115
+    // On check en base
116
+    $element_bab = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
117
+      ->findOneByName('Babylon Pression - Des Tasers et des Pauvres')
118
+    ;
119
+    
120
+    $this->assertEquals($element_bab->getCountReport(), 1);
121
+    $this->assertEquals($element_bab->getReportIds(), array((string)$paul->getId()));
122
+    
123
+    // On passe a joelle
124
+    
125
+    $this->disconnectUser();
126
+    // On connecte joelle pour faire le même test sur le même élément
127
+    $this->connectUser('joelle', 'toor');
128
+    
129
+    $joelle = $this->getUser();
130
+    $joelle_bad_reports_count = $joelle->getBadReportCount();
131
+    
132
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
133
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
134
+    ;
135
+    
136
+    // Paul signale cet élément comme pas bien
137
+    $url = $this->generateUrl('ajax_report_element', array(
138
+      'element_id' => $element_ed->getId(),
139
+      'token'      => $joelle->getPersonalHash()
140
+    ));
141
+    
142
+    $crawler = $this->client->request(
143
+      'GET', 
144
+      $url, 
145
+      array(), 
146
+      array(), 
147
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
148
+    );
149
+    
150
+    $this->isResponseSuccess();
151
+    
152
+    $response = json_decode($this->client->getResponse()->getContent(), true);
153
+    $this->assertEquals($response['status'], 'success');
154
+    
155
+    // On check en base
156
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
157
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
158
+    ;
159
+    
160
+    $this->assertEquals($element_ed->getCountReport(), 2);
161
+    $this->assertEquals($element_ed->getReportIds(), array((string)$paul->getId(), (string)$joelle->getId()));
162
+    
163
+    // Si elle effectue le signalement une deuxième fois sur le même element
164
+    // Ca ne doit pas bouger puisqu'elle l'a déjà fait
165
+    $url = $this->generateUrl('ajax_report_element', array(
166
+      'element_id' => $element_ed->getId(),
167
+      'token'      => $joelle->getPersonalHash()
168
+    ));
169
+    
170
+    $crawler = $this->client->request(
171
+      'GET', 
172
+      $url, 
173
+      array(), 
174
+      array(), 
175
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
176
+    );
177
+    
178
+    $this->isResponseSuccess();
179
+    
180
+    $response = json_decode($this->client->getResponse()->getContent(), true);
181
+    $this->assertEquals($response['status'], 'success');
182
+    
183
+    // On check en base
184
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
185
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
186
+    ;
187
+    
188
+    $this->assertEquals($element_ed->getCountReport(), 2);
189
+    $this->assertEquals($element_ed->getReportIds(), array((string)$paul->getId(), (string)$joelle->getId()));
190
+    
191
+    /*
192
+     * Maintenant on va aller modérer ça coté modération.
193
+     */
194
+    
195
+    // On donne le status d'admin a bob
196
+    $output = $this->runCommand(
197
+      $this->client, 
198
+      "fos:user:promote bob ROLE_ADMIN"
199
+    );
200
+    
201
+    // On connecte bob
202
+    $this->disconnectUser();
203
+    $this->connectUser('bob', 'toor');
204
+    
205
+    // Sur la page de modération d'élément on peux voir l'élément dans la liste
206
+    $this->crawler = $this->client->request('GET', $this->generateUrl('moderate_elements_index'));
207
+    $this->isResponseSuccess();
208
+    
209
+    $this->exist('li#mod_element_'.$element_ed->getId());
210
+    $this->exist('li#mod_element_'.$element_bab->getId());
211
+    
212
+    // Première action, effectivement le partage ed cox doit être refusé par la modération
213
+    $this->crawler = $this->client->request(
214
+      'GET', 
215
+      $this->generateUrl('moderate_element_delete', array(
216
+        'element_id' => $element_ed->getId()
217
+      )),
218
+      array(), 
219
+      array(), 
220
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
221
+    );
222
+    
223
+    $this->isResponseSuccess();
224
+    
225
+    $response = json_decode($this->client->getResponse()->getContent(), true);
226
+    $this->assertEquals($response['status'], 'success');
227
+    
228
+    $element_ed = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
229
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
230
+    ;
231
+    $this->assertEquals(true, is_null($element_ed));
232
+    // Condéquences, le proprio (bux) vois son compteur d'élément modéré augmenter
233
+    $this->assertEquals($bux_moderated_element_count+1, $this->getUser('bux')->getModeratedElementCount());
234
+    // Le compteur de mauvai signalemetn de paul n'a pas bougé par contre.
235
+    $this->assertEquals($paul_bad_reports_count, $this->getUser('paul')->getBadReportCount());
236
+    // Ni celui de joelle
237
+    $this->assertEquals($joelle_bad_reports_count, $this->getUser('joelle')->getBadReportCount());
238
+    
239
+    // Deuxième action on considère que l'autre élément n'a pas a être refusé
240
+    $this->crawler = $this->client->request(
241
+      'GET', 
242
+      $this->generateUrl('moderate_element_clean', array(
243
+        'element_id' => $element_bab->getId()
244
+      )),
245
+      array(), 
246
+      array(), 
247
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
248
+    );
249
+    
250
+    $this->isResponseSuccess();
251
+    
252
+    $response = json_decode($this->client->getResponse()->getContent(), true);
253
+    $this->assertEquals($response['status'], 'success');
254
+    
255
+    $element_bab = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
256
+      ->findOneByName('Babylon Pression - Des Tasers et des Pauvres')
257
+    ;
258
+    
259
+    $this->assertEquals(false, is_null($element_bab));
260
+    $this->assertEquals($element_bab->getCountReport(), 0);
261
+    $this->assertEquals($element_bab->getReportIds(), null);
262
+    
263
+    // Condéquences, le proprio (bux) ne vois pas son compteur d'élément modéré augmenter encore
264
+    //                                              +1 car c'est pour la modo juste avant
265
+    $this->assertEquals($bux_moderated_element_count+1, $this->getUser('bux')->getModeratedElementCount());
266
+    // Le compteur de mauvais signalemetn de paul a augmenter d'un
267
+    $this->assertEquals($paul_bad_reports_count+1, $this->getUser('paul')->getBadReportCount());
268
+    // Celui de joelle non, elle n'a rien a voir avec ce signalement
269
+    $this->assertEquals($joelle_bad_reports_count, $this->getUser('joelle')->getBadReportCount());
270
+  }
271
+  
272
+  /**
273
+   * Test du signalement de commentaires non appropriés
274
+   * Puis de leurs modérations
275
+   */
276
+  public function testCommentAlertAndModerate()
277
+  {
278
+    // Première chose: dans ce test on a besoin de tester la modération.
279
+    // Du coup bux doit être promus admin
280
+    $this->client = self::createClient();
281
+    $output = $this->runCommand(
282
+      $this->client, 
283
+      "fos:user:promote bux ROLE_ADMIN"
284
+    );
285
+
286
+    /**
287
+     * Scénario: joelle signale deux commentaires: un de bux et un de paul
288
+     * sur l'élément d'ed cox.
289
+     * En moderation 
290
+     * * un commentaire (bux) est effectivement refusé: 
291
+     *   (TODO dans le code) Le compteur de mauvaise attitude augmente
292
+     * * un commentaire (paul) est considéré comme ok, le compteur (faux signalement) 
293
+     *   de joelle s'incrémente de 1.
294
+     */
295
+    
296
+    $em = $this->client->getKernel()->getContainer()->get('doctrine')->getEntityManager();
297
+    $this->connectUser('joelle', 'toor');
298
+    $joelle = $this->getUser();
299
+    $joelle_fake_alerts = $joelle->getBadReportCount();
300
+    
301
+    // On récupère les deux commentaires
302
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
303
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
304
+    ;
305
+    $cm = new CommentsManager($element->getComments());
306
+    $comment_bux  = $cm->get(0);
307
+    $comment_paul = $cm->get(1);
308
+    
309
+    // En base rien n'a encore été touché
310
+    $this->assertEquals(0, $cm->countCommentAlert());
311
+    $this->assertEquals(null, $element->getCountCommentReport());
312
+    
313
+    // joelle signale deux éléments
314
+    $this->crawler = $this->client->request(
315
+      'GET', 
316
+      $this->generateUrl('ajax_alert_comment', array(
317
+        'element_id' => $element->getId(),
318
+        'date'       => $comment_bux['d'],
319
+        'token'      => $joelle->getPersonalHash()
320
+      )),
321
+      array(), 
322
+      array(), 
323
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
324
+    );
325
+    
326
+    $this->isResponseSuccess();
327
+    
328
+    $response = json_decode($this->client->getResponse()->getContent(), true);
329
+    $this->assertEquals($response['status'], 'success');
330
+    
331
+    // Les données en bases ont évolués
332
+    // On récupère les deux commentaires
333
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
334
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
335
+    ;
336
+    $cm = new CommentsManager($element->getComments());
337
+    $comment_bux  = $cm->get(0);
338
+    $comment_paul = $cm->get(1);
339
+    
340
+    $this->assertEquals(1, $cm->countCommentAlert());
341
+    $this->assertEquals(1, $element->getCountCommentReport());
342
+    
343
+    // deuxième signalement
344
+    $this->crawler = $this->client->request(
345
+      'GET', 
346
+      $this->generateUrl('ajax_alert_comment', array(
347
+        'element_id' => $element->getId(),
348
+        'date'       => $comment_paul['d'],
349
+        'token'      => $joelle->getPersonalHash()
350
+      )),
351
+      array(), 
352
+      array(), 
353
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
354
+    );
355
+    
356
+    $this->isResponseSuccess();
357
+    
358
+    $response = json_decode($this->client->getResponse()->getContent(), true);
359
+    $this->assertEquals($response['status'], 'success');
360
+    
361
+    // Les données en bases ont évolués
362
+    // On récupère les deux commentaires
363
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
364
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
365
+    ;
366
+    $cm = new CommentsManager($element->getComments());
367
+    $comment_bux  = $cm->get(0);
368
+    $comment_paul = $cm->get(1);
369
+    
370
+    $this->assertEquals(2, $cm->countCommentAlert());
371
+    $this->assertEquals(2, $element->getCountCommentReport());
372
+    
373
+    /**
374
+     * On passe maintenant a la modération
375
+     */
376
+    
377
+    $this->disconnectUser();
378
+    $this->connectUser('bux', 'toor');
379
+    $bux = $this->getUser();
380
+    
381
+    // bux ouvre la page de modération des commentaires
382
+    $this->crawler = $this->client->request('GET', $this->generateUrl('moderate_comments_index'));
383
+    $this->isResponseSuccess();
384
+    
385
+    // On voit les deux commentaires signalés dans la liste
386
+    $this->exist('li.comment:contains("C\'est trop bon hein ?")');
387
+    $this->exist('li.comment:contains("C\'est pas mal en effet")');
388
+    
389
+    // Refus de celui de bux
390
+    $this->crawler = $this->client->request(
391
+      'GET', 
392
+      $this->generateUrl('moderate_comment_refuse', array(
393
+        'element_id' => $element->getId(),
394
+        'date'       => $comment_bux['d']
395
+      )),
396
+      array(), 
397
+      array(), 
398
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
399
+    );
400
+    
401
+    $this->isResponseSuccess();
402
+    
403
+    $response = json_decode($this->client->getResponse()->getContent(), true);
404
+    $this->assertEquals($response['status'], 'success');
405
+    
406
+    // TODO: check du compteur de mauvais comportements de bux
407
+    
408
+    // la base est a jour
409
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
410
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
411
+    ;
412
+    $cm = new CommentsManager($element->getComments());
413
+    
414
+    $this->assertEquals(1, $cm->countCommentAlert());
415
+    $this->assertEquals(1, $element->getCountCommentReport());
416
+    
417
+    // Clean de celui de paul
418
+    $this->crawler = $this->client->request(
419
+      'GET', 
420
+      $this->generateUrl('moderate_comment_clean', array(
421
+        'element_id' => $element->getId(),
422
+        'date'       => $comment_paul['d']
423
+      )),
424
+      array(), 
425
+      array(), 
426
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
427
+    );
428
+    
429
+    $this->isResponseSuccess();
430
+    
431
+    $response = json_decode($this->client->getResponse()->getContent(), true);
432
+    $this->assertEquals($response['status'], 'success');
433
+    
434
+    // la base est a jour
435
+    $element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
436
+      ->findOneByName('Ed Cox - La fanfare des teuffeurs (Hardcordian)')
437
+    ;
438
+    $cm = new CommentsManager($element->getComments());
439
+    
440
+    $this->assertEquals(0, $cm->countCommentAlert());
441
+    $this->assertEquals(0, $element->getCountCommentReport());
442
+    
443
+    // Mais comme joelle a signalé un commentaire considéré comme ok par la modération
444
+    // joelle vois son compteur de faux signalement incrémenté
445
+    $joelle = $this->getUser('joelle');
446
+    $this->assertEquals($joelle_fake_alerts+1, $joelle->getBadReportCount());
447
+    
448
+    // Et si on se rend sur la page home, le commentaire de bux a disparu
449
+    $this->crawler = $this->client->request('GET', $this->generateUrl('home'));
450
+    
451
+    $this->exist('li.comment:contains("C\'est pas mal en effet")');
452
+    $this->notExist('li.comment:contains("C\'est trop bon hein ?")');
453
+  }
454
+  
455
+}