def setUp(self):
        init_DB(status="development", folder=db_path)
        self.assertTrue(os.path.exists(db_path))

        load_env_vars()

        self.db_challenges_manager = ChallengesController(db_path)
class Test_challenges_manager_ranking(unittest.TestCase):
    def setUp(self):
        init_DB(status="development", folder=db_path)
        self.assertTrue(os.path.exists(db_path))

        load_env_vars()

        self.db_challenges_manager = ChallengesController(db_path)

    def tearDown(self):
        shutil.rmtree(db_path)
        self.assertFalse(os.path.exists(db_path))

    def test_get_ranking(self):
        expected_winners = [["David Lawrence", "Nuno"], ["Mathieu"]]
        ranking = self.db_challenges_manager.get_ranking()

        self.assertEqual(expected_winners, ranking)
class Test_challenges_manager_handling_challenges(unittest.TestCase):
    def setUp(self):
        init_DB(status="development", folder=db_path)
        self.assertTrue(os.path.exists(db_path))

        load_env_vars()

        self.db_challenges_manager = ChallengesController(db_path)

    def tearDown(self):
        shutil.rmtree(db_path)
        self.assertFalse(os.path.exists(db_path))

    def test_add_new_challenge(self):
        title = "Tournoi"
        challenger = "Mathieu"
        contestant = "David"
        game = "Mario 64"
        description = "Desc1"
        time_limit = 60
        self.db_challenges_manager.new_challenge(title=title,
                                                 challenger=challenger,
                                                 contestant=contestant,
                                                 game_name=game,
                                                 description=description,
                                                 time_limit=time_limit)

        challenge = self.db_challenges_manager.get_challenge_details(title)

        self.assertEqual('new', challenge.status)
        self.assertEqual(challenger, challenge.user1)
        self.assertEqual(contestant, challenge.user2)
        self.assertEqual(description, challenge.content)
        self.assertEqual(title, challenge.title)
        self.assertEqual(game, challenge.game)

    def test_change_status_to_accepted(self):
        title = "Tournoi"
        self.test_add_new_challenge()

        self.db_challenges_manager.accept_challenge(title, "David")

        challenge = self.db_challenges_manager.get_challenge_details(title)
        self.assertEqual('accepted', challenge.status)

    def test_change_status_to_declined(self):
        title = "Tournoi"
        self.test_add_new_challenge()

        self.db_challenges_manager.accept_challenge(title, "David")

        self.db_challenges_manager.decline_challenge(title, "David")

        challenge = self.db_challenges_manager.get_challenge_details(title)
        self.assertEqual('declined', challenge.status)

    def test_change_status_to_successful(self):
        title = "Tournoi"
        self.test_add_new_challenge()

        self.db_challenges_manager.accept_challenge(title, "David")

        self.db_challenges_manager.succeed_challenge(title, "Mathieu")

        challenge = self.db_challenges_manager.get_challenge_details(title)
        self.assertEqual('won', challenge.status)

    def test_change_status_to_failed(self):
        title = "Tournoi"
        self.test_add_new_challenge()

        self.db_challenges_manager.accept_challenge(title, "David")

        self.db_challenges_manager.fail_challenge(title, "Mathieu")

        challenge = self.db_challenges_manager.get_challenge_details(title)
        self.assertEqual('lost', challenge.status)
class Test_challenges_manager_get_challenges(unittest.TestCase):
    def setUp(self):
        init_DB(status="development", folder=db_path)
        self.assertTrue(os.path.exists(db_path))

        load_env_vars()

        self.db_challenges_manager = ChallengesController(db_path)

    def tearDown(self):
        shutil.rmtree(db_path)
        self.assertFalse(os.path.exists(db_path))

    def test_get_last_n_challenges(self):
        challenges1 = self.db_challenges_manager.get_last_n_challenges(1)

        self.assertEqual(1, len(challenges1))

        challenges3 = self.db_challenges_manager.get_last_n_challenges(3)

        self.assertEqual(3, len(challenges3))

        challenges10 = self.db_challenges_manager.get_last_n_challenges(10)
        self.assertNotEqual(10, len(challenges10))
        self.assertEqual(4, len(challenges10))

    def test_get_challenge_details(self):
        existing_challenge_name = "Challenge 1"
        existing_one = self.db_challenges_manager.get_challenge_details(
                existing_challenge_name)

        self.assertIsNotNone(existing_one)
        self.assertEqual(existing_challenge_name, existing_one.title)

        non_existing_challenge_name = "Horse thingy stuffs"
        non_existing_one = self.db_challenges_manager.get_challenge_details(
                non_existing_challenge_name)

        self.assertIsNone(non_existing_one)

    def test_get_your_challenges(self):
        usr = "******"
        challenges = self.db_challenges_manager.get_your_challenges(usr)
        self.assertNotEqual([], challenges)

        usr = "******"
        challenges = self.db_challenges_manager.get_your_challenges(usr)
        self.assertEqual([], challenges)

    def test_get_all_challenges(self):
        all_challenges = self.db_challenges_manager.get_all_challenges()
        self.assertEqual(4, len(all_challenges))

    def test_get_number_unseen_challenges(self):
        usr = "******"
        nb1 = self.db_challenges_manager.get_number_unseen_challenges(usr)
        self.assertEqual(2, nb1)

        usr = "******"
        nb2 = self.db_challenges_manager.get_number_unseen_challenges(usr)
        self.assertEqual(0, nb2)