<?php

namespace Mos\Guess;

use PHPUnit\Framework\TestCase;

/**
 * Test cases for class Guess.
 */
class GuessTest extends TestCase
{
    /**
     * Test case to construct object and verify that the object
     * has the expected properties due various ways of constructing
     * it.
     */
    public function testCreateObject()
    {
        $guess = new Guess();
        $this->assertInstanceOf("\Mos\Guess\Guess", $guess);
        $this->assertEquals(6, $guess->tries());

        $guess = new Guess(42);
        $this->assertInstanceOf("\Mos\Guess\Guess", $guess);
        $this->assertEquals(6, $guess->tries());
        $this->assertEquals(42, $guess->number());

        $guess = new Guess(42, 7);
        $this->assertInstanceOf("\Mos\Guess\Guess", $guess);
        $this->assertEquals(7, $guess->tries());
        $this->assertEquals(42, $guess->number());
    }


    /**
     * Test case to initiate through re-randomze an object.
     */
    public function testRandom()
    {
        $guess = new Guess();
        $guess->random();
        $this->assertEquals(6, $guess->tries());

        $guess->random(7);
        $this->assertEquals(7, $guess->tries());
    }

    /**
     * Test case to make guess.
     */
    public function testMakeGuess()
    {
        $guess = new Guess(50, 0);
        $this->assertInstanceOf("\Mos\Guess\Guess", $guess);
        $this->assertEquals("no guesses left.", $guess->makeGuess(50));

        $guess = new Guess(50, 3);
        $this->assertInstanceOf("\Mos\Guess\Guess", $guess);
        $this->assertEquals("to low...", $guess->makeGuess(25));
        $this->assertEquals("to high...", $guess->makeGuess(75));
        $this->assertEquals("correct!!!", $guess->makeGuess(50));
    }
}
