class TournamentMissionsTests(AppSimulatingTest):

    tourn_1 = 'test_missions'

    def setUp(self):
        super(TournamentMissionsTests, self).setUp()

        self.injector.inject(self.tourn_1)
        self.tourn = Tournament(self.tourn_1)
        self.tourn.update({'rounds': 2})

    # pylint: disable=protected-access
    def test_add_missions(self):
        self.tourn.update({'missions': ['foo', 'bar']})

        self.assertRaises(ValueError, self.tourn._set_missions, [])
        self.assertRaises(ValueError, self.tourn.update, {'missions': []})
        self.assertRaises(ValueError, self.tourn._set_missions, ['1'])
        self.assertRaises(ValueError, self.tourn.update, {'missions': ['1']})
        self.assertRaises(ValueError, self.tourn._set_missions, ['1', '2', '3'])
        self.assertRaises(ValueError, self.tourn.update,
                          {'missions': ['1', '2', '3']})

    def test_get_missions(self):
        compare(self.tourn.get_missions(), ['TBA', 'TBA'])

        self.tourn.update({'missions': ['foo', 'bar']})
        compare(self.tourn.get_missions(), ['foo', 'bar'])

    def test_round_change(self):
        self.tourn.update({'rounds': 0})
        self.tourn.update({'rounds': 1})

        compare(self.tourn.get_round(1).get_dao().get_mission(), 'TBA')
    def test_get_round(self):
        """Test the round getter"""
        name = 'test_get_round'
        self.injector.inject(name)

        tourn = Tournament(name)
        tourn.update({'rounds': 2})

        self.assertTrue(tourn.get_round(1).get_dao().ordering == 1)
        self.assertTrue(tourn.get_round(2).get_dao().ordering == 2)

        self.assertRaises(ValueError, tourn.get_round, 3)
        self.assertRaises(ValueError, tourn.get_round, -1)
        self.assertRaises(ValueError, tourn.get_round, 'a')
        self.assertRaises(ValueError, tourn.get_round, 0)
    def test_get_missions(self):
        """get missions for the rounds"""
        name = 'test_get_missions'
        self.injector.inject(name)
        tourn = Tournament(name)
        tourn.update({
            'rounds': 3,
            'missions': ['mission_1', 'mission_2', 'mission_3']
        })


        tourn.update({'rounds': 4})
        compare(tourn.get_round(1).get_dao().mission, 'mission_1')
        compare(tourn.get_round(4).get_dao().mission, None)

        compare(Tournament(name).get_missions(),
                ['mission_1', 'mission_2', 'mission_3', 'TBA'])