MatchTest.php 2.15 KB
<?php

namespace FootyRoom\Tests\Unit\Match;

use FootyRoom\Core\Comment\Author;
use FootyRoom\Core\Comment\Comment;
use FootyRoom\Core\Comment\CommentApproved;
use FootyRoom\Core\Comment\CommentPosted;
use FootyRoom\Core\Comment\ICommentable;
use FootyRoom\Core\Match\Match;
use FootyRoom\Tests\TestCase;

class MatchTest extends TestCase
{
    public function setup()
    {
        $id = 1;
        $homeTeam = 'A';
        $awayTeam = 'B';

        $this->match = new Match($id, $homeTeam, $awayTeam);
    }

    public function testConstructor()
    {
        $id = 1;
        $homeTeam = 'A';
        $awayTeam = 'B';

        $this->match = new Match($id, $homeTeam, $awayTeam);

        $this->assertEquals($id, $this->match->getId());
        $this->assertEquals($homeTeam, $this->match->getHomeTeam());
        $this->assertEquals($awayTeam, $this->match->getAwayTeam());
    }

    public function testCommentableType()
    {
        $this->assertEquals('match', $this->match->getCommentableType());
    }

    public function testMatchIsCommentable()
    {
        $this->assertTrue($this->match instanceof ICommentable);
    }

    public function testCommentEventsRaised()
    {
        $comment = new Comment('match:1', new Author(41301, 'chanBC'), 'test', '');

        $this->match->comment($comment);

        $events = $this->match->releaseEvents();

        $this->assertTrue($events[0] instanceof CommentPosted);
        $this->assertTrue($events[1] instanceof CommentApproved);
        $this->assertEquals($events[0]->comment, $comment);
        $this->assertEquals($events[0]->commentable, $this->match);
        $this->assertEquals($events[1]->comment, $comment);
    }

    public function testCommentDiscussionIdValidityChecked()
    {
        $comment = new Comment('match:2', new Author(41301, 'chanBC'), 'test', '');

        $this->expectException(\Exception::class);

        $this->match->comment($comment);
    }

    public function testCommentDiscussionIdValidityChecked2()
    {
        $comment = new Comment('other:1', new Author(41301, 'chanBC'), 'test', '');

        $this->expectException(\Exception::class);

        $this->match->comment($comment);
    }
}