Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Comments/tests/TestCase/Controller/CommentsControllerTest.php
<?php
namespace Croogo\Comments\Test\TestCase\Controller;

use
Comments\Controller\CommentsController;
use
Croogo\TestSuite\CroogoControllerTestCase;
use
Croogo\TestSuite\CroogoTestFixture;

class
CommentsControllerTest extends CroogoControllerTestCase
{

    public
$fixtures = [
       
'plugin.Croogo/Users.Aco',
       
'plugin.Croogo/Users.Aro',
       
'plugin.Croogo/Users.ArosAco',
       
'plugin.Croogo/Blocks.Block',
       
'plugin.Croogo/Comments.Comment',
       
'plugin.Croogo/Contacts.Contact',
       
'plugin.Croogo/Translate.I18n',
       
'plugin.Croogo/Settings.Language',
       
'plugin.Croogo/Menus.Link',
       
'plugin.Croogo/Menus.Menu',
       
'plugin.Croogo/Contacts.Message',
       
'plugin.Croogo/Meta.Meta',
       
'plugin.Croogo/Nodes.Node',
       
'plugin.Croogo/Taxonomy.ModelTaxonomy',
       
'plugin.Croogo/Blocks.Region',
       
'plugin.Croogo/Users.Role',
       
'plugin.Croogo/Settings.Setting',
       
'plugin.Croogo/Taxonomy.Taxonomy',
       
'plugin.Croogo/Taxonomy.Term',
       
'plugin.Croogo/Taxonomy.Type',
       
'plugin.Croogo/Taxonomy.TypesVocabulary',
       
'plugin.Croogo/Users.User',
       
'plugin.Croogo/Taxonomy.Vocabulary',
    ];

    protected
$_level;

   
/**
     * setUp
     *
     * @return void
     */
   
public function setUp()
    {
       
parent::setUp();
       
$this->_level = Configure::write('Comment.level');
       
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
       
$_SERVER['SERVER_NAME'] = 'localhost';
       
$this->CommentsController = $this->generate('Comments.Comments', [
           
'methods' => [
               
'redirect',
            ],
           
'components' => [
               
'Auth' => ['user'],
               
'Session',
            ],
        ]);
       
$this->CommentsController->Auth
           
->staticExpects($this->any())
            ->
method('user')
            ->
will($this->returnCallback([$this, 'authUserCallback']));
    }

   
/**
     * tearDown
     *
     * @return void
     */
   
public function tearDown()
    {
       
parent::tearDown();
       
Configure::write('Comment.level', $this->_level);
        unset(
$this->CommentsController);
    }

   
/**
     * testAdminIndex
     *
     * @return void
     */
   
public function testAdminIndex()
    {
       
$this->testAction('/admin/comments/index');
       
$this->assertNotEmpty($this->vars['comments']);
    }

   
/**
     * testAdminEdit
     *
     * @return void
     */
   
public function testAdminEdit()
    {
       
$this->expectFlashAndRedirect('The Comment has been saved');
       
$this->testAction('/admin/comments/comments/edit/1', [
           
'data' => [
               
'Comment' => [
                   
'id' => 1, // Mr Croogo
                   
'name' => 'Mr Croogo [modified]',
                   
'email' => 'contact@example.com',
                   
'body' => 'lots of text...',
                ],
            ],
        ]);
       
$result = $this->CommentsController->Comment->findById(1);
       
$this->assertEquals('Mr Croogo [modified]', $result['Comment']['name']);
    }

   
/**
     * testAdminDelete
     *
     * @return void
     */
   
public function testAdminDelete()
    {
       
$this->expectFlashAndRedirect('Comment deleted');
       
$this->testAction('/admin/comments/comments/delete/1');
       
$hasAny = $this->CommentsController->Comment->hasAny([
           
'Comment.id' => 1,
        ]);
       
$this->assertFalse($hasAny);
    }

   
/**
     * testAdminProcessDelete
     *
     * @return void
     */
   
public function testAdminProcessDelete()
    {
       
$this->expectFlashAndRedirect('Comments deleted');
       
$this->testAction('/admin/comments/comments/process', [
           
'data' => [
               
'Comment' => [
                   
'action' => 'delete',
                   
'1' => ['id' => 1],
                ],
            ],
        ]);
       
$list = $this->CommentsController->Comment->find('list', [
           
'fields' => [
               
'id',
               
'name',
            ],
           
'order' => 'Comment.lft ASC',
        ]);
       
$this->assertEqual($list, [2 => 'Mrs Croogo']);
    }

   
/**
     * testAdminProcessPublish
     *
     * @return void
     */
   
public function testAdminProcessPublish()
    {
       
// unpublish a Comment for testing
       
$this->CommentsController->Comment->id = 1;
       
$this->CommentsController->Comment->saveField('status', 0);
       
$this->CommentsController->Comment->id = false;
       
$comment = $this->CommentsController->Comment->hasAny([
           
'id' => 1,
           
'status' => 0,
        ]);
       
$relevantNode = $this->CommentsController->Comment->Node->findById(1);
       
$this->assertTrue($comment);
       
//Ensure that the counterCache field has been updated for the rest of the test
       
$this->assertEqual($relevantNode['Node']['comment_count'], 0);

       
$this->expectFlashAndRedirect('Comments published');

       
$this->testAction('/admin/comments/comments/process', [
           
'data' => [
               
'Comment' => [
                   
'action' => 'publish',
                   
'1' => ['id' => 1],
                ],
            ],
        ]);

       
$list = $this->CommentsController->Comment->find('list', [
           
'conditions' => [
               
'Comment.status' => 1,
            ],
           
'fields' => [
               
'id',
               
'name',
            ],
           
'order' => 'Comment.lft ASC',
        ]);
       
$this->assertEqual($list, [
           
'1' => 'Mr Croogo',
        ]);

       
$relevantNode = $this->CommentsController->Comment->Node->findById(1);
       
$this->assertEqual($relevantNode['Node']['comment_count'], 1);
    }

   
/**
     * testAdminProcessUnpublish
     *
     * @return void
     */
   
public function testAdminProcessUnpublish()
    {
       
$this->expectFlashAndRedirect('Comments unpublished');
       
$this->testAction('/admin/comments/comments/process', [
           
'data' => [
               
'Comment' => [
                   
'action' => 'unpublish',
                   
'1' => ['id' => 1],
                ],
            ],
        ]);
       
$list = $this->CommentsController->Comment->find('list', [
           
'conditions' => [
               
'Comment.status' => 1,
            ],
           
'fields' => [
               
'id',
               
'name',
            ],
           
'order' => 'Comment.lft ASC',
        ]);
       
$this->assertEqual($list, []);

       
$relevantNode = $this->CommentsController->Comment->Node->findById(1);
       
$this->assertEqual($relevantNode['Node']['comment_count'], 0);
    }

   
/**
     * testAdd
     */
   
public function testAdd()
    {
       
Configure::write('Comment.email_notification', 1);
       
$Comments = $this->generate('Comments', [
           
'methods' => [
               
'_sendEmail',
            ],
           
'components' => [
               
'Session',
            ],
        ]);
       
$Comments->plugin = 'Comments';
       
$Comments
           
->expects($this->once())
            ->
method('_sendEmail')
            ->
will($this->returnValue(true));
       
$Comments->request->params['action'] = 'add';
       
$Comments->request->params['url']['url'] = 'comments/comments/add';
       
$Comments->Components->trigger('initialize', [&$Comments]);

       
$Comments->Components->trigger('startup', [&$Comments]);
       
$Comments->request->data['Comment'] = [
           
'name' => 'John Smith',
           
'email' => 'john.smith@example.com',
           
'website' => 'http://example.com',
           
'body' => 'text here...',
        ];
       
$node = $Comments->Comment->Node->findBySlug('hello-world');
       
$Comments->add('Node', $node['Node']['id']);

       
$comments = $Comments->Comment->generateTreeList(['Comment.foreign_key' => $node['Node']['id'], 'Comment.model' => 'Node'], '{n}.Comment.id', '{n}.Comment.name');
       
$commenters = array_values($comments);
       
$this->assertEqual($commenters, ['Mr Croogo', 'Mrs Croogo', 'John Smith']);

       
$Comments->testView = true;
       
$model = 'Node';
       
$data = $node;
       
$Comments->set(compact('model', 'data'));
       
$output = $Comments->render('add');
       
$this->assertFalse(strpos($output, '<pre class="cake-debug">'));
    }

   
/**
     * testAddWithParent
     */
   
public function testAddWithParent()
    {
       
Configure::write('Comment.email_notification', 1);
       
$Comments = $this->generate('Comments', [
           
'methods' => ['_sendEmail'],
        ]);
       
$Comments->plugin = 'Comments';
       
$Comments
           
->expects($this->once())
            ->
method('_sendEmail')
            ->
will($this->returnValue(true));
       
$Comments->request->params['action'] = 'add';
       
$Comments->request->params['url']['url'] = 'comments/comments/add';
       
$Comments->Components->trigger('initialize', [&$Comments]);
       
$Comments->Components->trigger('startup', [&$Comments]);

       
$Comments->request->data['Comment'] = [
           
'name' => 'John Smith',
           
'email' => 'john.smith@example.com',
           
'website' => 'http://example.com',
           
'body' => 'text here...',
        ];
       
$node = $Comments->Comment->Node->findBySlug('hello-world');

       
Configure::write('Comment.level', 2);
       
$Comments->add('Node', $node['Node']['id'], 1); // under the comment by Mr Croogo

       
$comments = $Comments->Comment->generateTreeList(['Comment.foreign_key' => $node['Node']['id'], 'Comment.model' => 'Node'], '{n}.Comment.id', '{n}.Comment.name');
       
$commenters = array_values($comments);
       
$this->assertEqual($commenters, ['Mr Croogo', '_John Smith', 'Mrs Croogo']);

       
$Comments->testView = true;
       
$model = 'Node';
       
$data = $node;
       
$Comments->set(compact('model', 'data'));
       
$output = $Comments->render('add');
       
$this->assertFalse(strpos($output, '<pre class="cake-debug">'));
    }

   
/**
     * testAddWithoutEmailNotification
     */
   
public function testAddWithoutEmailNotification()
    {
       
Configure::write('Comment.email_notification', 0);
       
$Comments = $this->generate('Comments', [
           
'components' => [
               
'Session',
            ],
        ]);
       
$Comments->plugin = 'Comments';
       
$Comments->request->params['action'] = 'add';
       
$Comments->request->params['url']['url'] = 'comments/comments/add';
       
$Comments->startupProcess();
       
$Comments->request->data['Comment'] = [
           
'name' => 'John Smith',
           
'email' => 'john.smith@example.com',
           
'website' => 'http://example.com',
           
'body' => 'text here...',
        ];
       
$node = $Comments->Comment->Node->findBySlug('hello-world');
       
$Comments->add('Node', $node['Node']['id']);

       
$comments = $Comments->Comment->generateTreeList(['Comment.foreign_key' => $node['Node']['id'], 'Comment.model' => 'Node'], '{n}.Comment.id', '{n}.Comment.name');
       
$commenters = array_values($comments);
       
$this->assertEqual($commenters, ['Mr Croogo', 'Mrs Croogo', 'John Smith']);

       
$Comments->testView = true;
       
$model = 'Node';
       
$data = $node;
       
$Comments->set(compact('model', 'data'));
       
$output = $Comments->render('add');
       
$this->assertFalse(strpos($output, '<pre class="cake-debug">'));
    }

   
/**
     * testAddNotAllowedByType
     */
   
public function testAddNotAllowedByType()
    {
       
$Type = ClassRegistry::init('Taxonomy.Type');
       
$Type->id = 2;
       
$Type->saveField('comment_status', 0);

       
$this->CommentsController->Session
           
->expects($this->once())
            ->
method('setFlash')
            ->
with(
               
$this->equalTo('Comments are not allowed.'),
               
$this->equalTo('flash'),
               
$this->equalTo(['class' => 'error'])
            );
       
$this->CommentsController->request->params['action'] = 'add';
       
$this->CommentsController->request->params['url']['url'] = 'comments/add';

       
$this->CommentsController->request->data['Comment'] = [
           
'name' => 'John Smith',
           
'email' => 'john.smith@example.com',
           
'website' => 'http://example.com',
           
'body' => 'text here...',
        ];
       
$this->CommentsController->add('Node', 1);
    }

   
/**
     * testAddShouldWorkWhenLoggedIn
     */
   
public function testAddShouldWorkWhenLoggedIn()
    {
       
Configure::write('Comment.email_notification', 0);
       
$this->CommentsController->request->params['action'] = 'add';
       
$this->CommentsController->request->params['url']['url'] = 'comments/add';
       
$this->expectFlashAndRedirect('Your comment has been added successfully.');

       
$this->CommentsController->request->data['Comment'] = [
           
'name' => 'John Smith',
           
'email' => 'john.smith@example.com',
           
'website' => 'http://example.com',
           
'body' => 'text here...',
        ];
       
$this->CommentsController->add('Node', 1);
    }
}