def test_lobby_password(self):
        game_manager = GameManager()
        game_manager.create_lobby("TEST", password="******")

        lobbies = game_manager.get_lobbies_list()

        self.assertTrue(lobbies[0]["hasPassword"])
    def test_lobby_password_encrypted(self):
        game_manager = GameManager()
        lobby_key = game_manager.create_lobby("TEST", password="******")

        lobby: Lobby = game_manager.get_lobby(lobby_key)

        self.assertNotEqual(lobby.password_encrypted, "test")
        self.assertTrue(lobby.check_password_correct("test"))
    def test_lobby_create(self):
        game_manager = GameManager()
        lobby_key = game_manager.create_lobby("TEST")

        lobbies = game_manager.get_lobbies_list()

        self.assertTrue(len(lobbies) == 1)
        self.assertEqual(lobbies[0]["key"], lobby_key)
        self.assertEqual(lobbies[0]["name"], "TEST")
    def test_lobby_random_salt(self):
        game_manager = GameManager()
        all_keys = []

        for i in range(10):
            lobby_key = game_manager.create_lobby("TEST{}".format(i))
            all_keys.append(lobby_key)

        # remove duplicates with set, it should be equal
        removed_duplicates = list(set(all_keys))
        self.assertEqual(sorted(all_keys), sorted(removed_duplicates))
    def test_check_password_correct(self):
        game_manager = GameManager()
        lobby_key = game_manager.create_lobby("TEST", password="******")
        lobby: Lobby = game_manager.get_lobby(lobby_key)

        # password is encrypted
        self.assertNotEqual(lobby.password_encrypted, "test")

        # correct password is working and others are not
        self.assertTrue(lobby.check_password_correct("test"))
        self.assertFalse(lobby.check_password_correct("test1"))
        self.assertFalse(lobby.check_password_correct("1234"))
    def test_lobby_random_salt(self):
        game_manager = GameManager()
        lobby_key1 = game_manager.create_lobby("TEST1", password="******")
        lobby_key2 = game_manager.create_lobby("TEST2", password="******")

        lobby1: Lobby = game_manager.get_lobby(lobby_key1)
        lobby2: Lobby = game_manager.get_lobby(lobby_key2)

        # each lobby has different salt, passwords are the same but encrypted values are not
        self.assertNotEqual(lobby1.salt, lobby2.salt)
        self.assertNotEqual(lobby1.password_encrypted,
                            lobby2.password_encrypted)

        # both lobbies have same password
        self.assertTrue(lobby1.check_password_correct("test"))
        self.assertTrue(lobby2.check_password_correct("test"))