def test_generate_teams_exactly_12_players(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        voice_channel_mock.members = TestUtils.generate_mock_players_list(12)

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        client_mock = MagicMock()
        client_mock.global_variables.bench = list()
        client_mock.get_channel.return_value = voice_channel_mock

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        self.assertEqual(6, len(client_mock.global_variables.teams[0]))
        self.assertEqual(6, len(client_mock.global_variables.teams[1]))
        self.assertFalse(
            ListUtils.contains_duplicates(
                client_mock.global_variables.teams[0]))
        self.assertFalse(
            ListUtils.contains_duplicates(
                client_mock.global_variables.teams[1]))
        self.assertEqual(0, len(voice_channel_mock.members))
    def test_generate_teams_from_bench(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        voice_channel_mock.members = TestUtils.generate_mock_players_list(22)

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        client_mock = MagicMock()
        client_mock.get_channel.return_value = voice_channel_mock
        benched_players = TestUtils.generate_mock_players_list(5)
        client_mock.global_variables.bench = benched_players.copy()

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        team0 = client_mock.global_variables.teams[0]
        team1 = client_mock.global_variables.teams[1]
        bench = client_mock.global_variables.bench
        self.assertEqual(6, len(team0))
        self.assertEqual(6, len(team1))
        self.assertEqual(10, len(bench))
        self.assertTrue(
            verify_benched_players_play(benched_players, team0, team1))
        self.assertTrue(
            verify_bench_does_not_contain_players(bench, team0, team1))
        self.assertFalse(ListUtils.contains_duplicates(team0))
        self.assertFalse(ListUtils.contains_duplicates(team1))
        self.assertFalse(ListUtils.contains_duplicates(bench))
        self.assertEqual(0, len(voice_channel_mock.members))
    def test_generate_teams_with_spectators(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        online_players = TestUtils.generate_mock_players_list(15)
        idle_players = TestUtils.generate_mock_players_list(10, UserUtils.IDLE)
        all_players = list()
        all_players.extend(online_players)
        all_players.extend(idle_players)
        voice_channel_mock.members = all_players

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        print(voice_channel_mock)

        client_mock = MagicMock()
        client_mock.get_channel.return_value = voice_channel_mock
        client_mock.global_variables.bench = list()

        print(client_mock.get_channel.return_value)

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        team0 = client_mock.global_variables.teams[0]
        team1 = client_mock.global_variables.teams[1]

        bench = client_mock.global_variables.bench
        spectators = client_mock.global_variables.spectators
        self.assertEqual(6, len(team0))
        self.assertEqual(6, len(team1))
        self.assertEqual(3, len(bench))
        self.assertEqual(10, len(spectators))
        self.assertTrue(
            verify_bench_does_not_contain_players(bench, team0, team1))
        self.assertFalse(ListUtils.contains_duplicates(team0))
        self.assertFalse(ListUtils.contains_duplicates(team1))
        self.assertFalse(ListUtils.contains_duplicates(bench))
        self.assertEqual(0, len(voice_channel_mock.members))