CommentVoterTest.php 2.67 KB
<?php

namespace FootyRoom\Tests\Integration\Comment;

use FootyRoom\Core\Comment\CommentVoter;
use FootyRoom\Core\Comment\UpDownVote;
use FootyRoom\Core\Vote\VotingManager;
use FootyRoom\Queries\Vote\VoteQueryHandler;
use FootyRoom\Repositories\CommentRepository;
use FootyRoom\Tests\TestCase;

class CommentVoterTest extends TestCase
{
    public function setUp()
    {
        $this->mockVotingManager = $this->getMockBuilder(VotingManager::class)
                            ->disableOriginalConstructor()
                            ->setMethods(['vote'])
                            ->getMock();

        $this->mockVoteQueryHandler = $this->getMockBuilder(VoteQueryHandler::class)
                            ->disableOriginalConstructor()
                            ->setMethods(['voteCount'])
                            ->getMock();

        $this->mockCommentRepository = $this->getMockBuilder(CommentRepository::class)
                            ->disableOriginalConstructor()
                            ->setMethods(['incrementKarma', 'decrementKarma'])
                            ->getMock();

        $this->commentVoter = new CommentVoter($this->mockVotingManager, $this->mockVoteQueryHandler, $this->mockCommentRepository);
    }

    /**
     * @expectedException        \FootyRoom\Core\CoreException
     */
    public function testCanNotVoteIfVoteTodayHaveBeenCountedMoreThanTwenty()
    {
        $commentId = 1234;
        $voteValue = -1;
        $tracker = '1234abcde';
        $userId = 41301;

        $this->mockVoteQueryHandler->method('voteCount')
                                   ->will($this->returnValue(21));

        $this->commentVoter->vote(
            $commentId,
            new UpDownVote($voteValue),
            $tracker,
            $userId
        );
    }

    public function testIncrementKarmaWasCalledIfVotingIsUp()
    {
        $commentId = 1234;
        $voteValue = 1;
        $tracker = '1234abcde';
        $userId = 41301;

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

        $this->commentVoter->vote(
            $commentId,
            new UpDownVote($voteValue),
            $tracker,
            $userId
        );
    }

    public function testDecrementKarmaWasCalledIfVotingIsDown()
    {
        $commentId = 1234;
        $voteValue = -1;
        $tracker = '1234abcde';
        $userId = 41301;

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

        $this->commentVoter->vote(
            $commentId,
            new UpDownVote($voteValue),
            $tracker,
            $userId
        );
    }
}