class CheckForCheatingTest(unittest.TestCase):
    """Tests if cheat will re-roll for you if you try to hold a six"""

    def setUp(self):
        self.angry_game = Angry_dice()

    def tearDown(self):
        del self.angry_game

    def test_check_cheating_six_and_six(self):
        self.angry_game.die_a.currentValue = "6"
        self.angry_game.die_b.currentValue = "6"
        self.angry_game.roll = ''
        self.angry_game.current_stage = 3

        self.angry_game.is_cheat(self.angry_game.roll)

        self.assertTrue(self.angry_game.is_cheat, True)

    def test_check_cheating_two_and_six(self):
        self.angry_game.die_a.currentValue = "2"
        self.angry_game.die_b.currentValue = "6"
        self.angry_game.roll = ''
        self.angry_game.current_stage = 3

        self.angry_game.is_cheat(self.angry_game.roll)

        self.assertTrue(self.angry_game.is_cheat, True)

    def test_check_cheating_two_and_five(self):
        self.angry_game.die_a.currentValue = "2"
        self.angry_game.die_b.currentValue = "5"
        self.angry_game.roll = ''
        self.angry_game.current_stage = 3

        self.angry_game.is_cheat(self.angry_game.roll)

        self.assertTrue(self.angry_game.is_cheat, False)
class CheckAngryTest(unittest.TestCase):
    """Test if current stage changes if both die values are 'ANGRY' """

    def setUp(self):
        self.angry_game = Angry_dice()

    def tearDown(self):
        del self.angry_game

    @patch('sys.stdout', new_callable=StringIO)
    def test_check_stage_one_angry_angry(self, mock_stdout):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = 'ANGRY'
        self.angry_game.current_stage = 1
        angry_text = "You're very angry, you need to calm down\n"

        self.angry_game.check_angry()

        self.assertEqual(mock_stdout.getvalue(), angry_text)
        self.assertEqual(self.angry_game.current_stage, 1)

    def test_check_stage_one_angry_two(self):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 1

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 1)

    def test_check_stage_one_angry_five_two(self):
        self.angry_game.die_a.currentValue = '5'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 1

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 1)

    # Part two
    def test_check_stage_two_angry_angry(self):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = 'ANGRY'
        self.angry_game.current_stage = 2

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 1)

    def test_check_stage_two_angry_two(self):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 2

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 2)

    def test_check_stage_two_angry_five_two(self):
        self.angry_game.die_a.currentValue = '5'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 2

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 2)

    # Part three

    def test_check_stage_three_angry_angry(self):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = 'ANGRY'
        self.angry_game.current_stage = 3

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 1)

    def test_check_stage_three_angry_two(self):
        self.angry_game.die_a.currentValue = 'ANGRY'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 3

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 3)

    def test_check_stage_three_angry_five_two(self):
        self.angry_game.die_a.currentValue = '5'
        self.angry_game.die_b.currentValue = '2'
        self.angry_game.current_stage = 3

        self.angry_game.check_angry()

        self.assertEqual(self.angry_game.current_stage, 3)
 def setUp(self):
     self.angry_game = Angry_dice()
class CheckStageTest(unittest.TestCase):
    """Tests if current stage changes if given different die values"""

    def setUp(self):
        self.angry_game = Angry_dice()

    def tearDown(self):
        del self.angry_game

    #Both dies are equal and both are in stage one goals
    def test_stage_one_both_dice_equal(self):
        self.angry_game.die_a.currentValue = '1'
        self.angry_game.die_b.currentValue = '1'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 1)

    #One is in stage one goals and one is not
    def test_stage_one_with_one_and_three(self):
        self.angry_game.die_a.currentValue = '1'
        self.angry_game.die_b.currentValue = '3'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 1)

    #Both are in stage goals and they are not equal
    def test_stage_one_with_two_and_one(self):
        self.angry_game.die_a.currentValue = '2'
        self.angry_game.die_b.currentValue = '1'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 2)

    #Both are in stage goals and they are not equal but reverse
    def test_stage_one_with_one_and_two(self):
        self.angry_game.die_a.currentValue = '1'
        self.angry_game.die_b.currentValue = '2'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 2)

#Part two

    #Both dies are equal and both are in stage goals
    def test_stage_two_both_dice_four_ANGRY(self):
        self.angry_game.current_stage = 2
        self.angry_game.die_a.currentValue = '4'
        self.angry_game.die_b.currentValue = '4'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 2)

    #One is in stage goals and one is not
    def test_stage_two_with_one_and_three(self):
        self.angry_game.current_stage = 2
        self.angry_game.die_a.currentValue = '1'
        self.angry_game.die_b.currentValue = 'ANGRY'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 2)

    #Both are in stage goals and they are not equal
    def test_stage_two_with_four_and_one(self):
        self.angry_game.current_stage = 2
        self.angry_game.die_a.currentValue = '4'
        self.angry_game.die_b.currentValue = 'ANGRY'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 3)

    #Both are in stage goals and they are not equal but reverse
    def test_stage_two_with_one_and_four(self):
        self.angry_game.current_stage = 2
        self.angry_game.die_a.currentValue = '4'
        self.angry_game.die_b.currentValue = 'ANGRY'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 3)

#Part three

    #Both dies are equal and both are in stage goals
    def test_stage_three_die_six_six(self):
        self.angry_game.current_stage = 3
        self.angry_game.die_a.currentValue = '6'
        self.angry_game.die_b.currentValue = '6'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 3)

    #One is in stage goals and one is not
    def test_stage_three_with_five_and_one(self):
        self.angry_game.current_stage = 3
        self.angry_game.die_a.currentValue = '5'
        self.angry_game.die_b.currentValue = '1'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 3)

    #Both are in stage goals and they are not equal
    def test_stage_three_with_five_and_six(self):
        self.angry_game.current_stage = 3
        self.angry_game.die_a.currentValue = '5'
        self.angry_game.die_b.currentValue = '6'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 4)

    #Both are in stage goals and they are not equal but reverse
    def test_stage_three_with_fix_and_five(self):
        self.angry_game.current_stage = 3
        self.angry_game.die_a.currentValue = '6'
        self.angry_game.die_b.currentValue = '5'

        self.angry_game.check_stage()

        self.assertEqual(self.angry_game.current_stage, 4)