import unittest

from mastermind import Mastermind


class MastermindTestCase(unittest.TestCase):

    def setUp(self):
        self.game = Mastermind(10, 4, 6)

    def test_check_code_len(self):
        self.assertFalse(self.game.check_code([1, 1, 1]))
        self.assertTrue(self.game.check_code([1, 1, 1, 1]))
        self.assertFalse(self.game.check_code([1, 1, 1, 1, 1]))

    def test_check_code_range(self):
        self.assertFalse(self.game.check_code([1, 1, 1, -3]))
        self.assertFalse(self.game.check_code([1, 1, -2, 1]))
        self.assertFalse(self.game.check_code([1, -1, 1, 1]))
        self.assertFalse(self.game.check_code([0, 1, 1, 1]))
        self.assertTrue(self.game.check_code([1, 2, 3, 4]))
        self.assertTrue(self.game.check_code([6, 5, 4, 3]))
        self.assertFalse(self.game.check_code([7, 6, 6, 6]))
        self.assertFalse(self.game.check_code([6, 8, 6, 6]))
        self.assertFalse(self.game.check_code([6, 6, 9, 6]))
        self.assertFalse(self.game.check_code([6, 6, 6, 10]))

    def test_has_remaining_attempts(self):
        self.game.__chances__ = 0
        self.assertFalse(self.game.has_remaining_attempts())
        self.game.__chances__ = 1
        self.assertTrue(self.game.has_remaining_attempts())

    def test_is_right_answer(self):
        self.assertTrue(self.game.is_right_answer((4, 0)))
        self.assertFalse(self.game.is_right_answer((0, 4)))
        self.assertFalse(self.game.is_right_answer((0, 0)))
        self.assertFalse(self.game.is_right_answer((4, 1)))

    def test_guess_pattern(self):
        code = [6, 5, 1, 4]
        self.assertEqual((0, 1), self.game.provide_hints(code, [1, 1, 2, 2]))
        self.assertEqual((1, 1), self.game.provide_hints(code, [6, 1, 2, 3]))
        self.assertEqual((1, 0), self.game.provide_hints(code, [1, 1, 1, 1]))
        self.assertEqual((1, 0), self.game.provide_hints(code, [6, 6, 6, 6]))
        self.assertEqual((4, 0), self.game.provide_hints(code, [6, 5, 1, 4]))


if __name__ == '__main__':
    unittest.main()
