CreateRevisionWhenCommentEditedTest.php 2.26 KB
<?php

namespace FootyRoom\Tests\Integration\Comment;

use FootyRoom\Core\Comment\Author;
use FootyRoom\Core\Comment\Comment;
use FootyRoom\Core\Comment\CommentEdited;
use FootyRoom\Core\Comment\CreateRevisionWhenCommentEdited;
use FootyRoom\User\User;
use FootyRoom\Repositories\CommentRepository;
use FootyRoom\Tests\TestCase;

class CreateRevisionWhenCommentEditedTest extends TestCase
{
    public function setUp()
    {
        $this->mockCommentRepository = $this->getMockBuilder(CommentRepository::class)
                            ->disableOriginalConstructor()
                            ->setMethods(['createRevision', 'createChange'])
                            ->getMock();

        $this->createRevisionWhenCommentEdited = new CreateRevisionWhenCommentEdited($this->mockCommentRepository);
    }

    public function testCreateChangeWasCalledIfAuthorAndEditorAreNotTheSame()
    {
        $postId = 1;
        $author = new Author(41301, 'chanBC');
        $content = 'test content';
        $html = '';

        $oldContent = 'old content';
        $oldHtml = 'old html';

        $comment = new Comment(
            $postId,
            $author,
            $content,
            $html
        );

        $editor = new User(['user_id' => 1, 'username' => 'admin']);

        $commentEdited = new CommentEdited($comment, $oldContent, $oldHtml, $editor);

        $this->mockCommentRepository->expects($this->once())
                                    ->method('createChange');

        $this->createRevisionWhenCommentEdited->handle($commentEdited);
    }

    public function testCreateChangeWasCalled()
    {
        $postId = 1;
        $author = new Author(41301, 'chanBC');
        $content = 'test content';
        $html = '';

        $oldContent = 'old content';
        $oldHtml = 'old html';

        $comment = new Comment(
            $postId,
            $author,
            $content,
            $html
        );

        $editor = new User(['user_id' => 41301, 'username' => 'admin']);

        $commentEdited = new CommentEdited($comment, $oldContent, $oldHtml, $editor);

        $this->mockCommentRepository->expects($this->once())
                                    ->method('createRevision');

        $this->createRevisionWhenCommentEdited->handle($commentEdited);
    }
}