def test_cmd_policy_exception_for_player_too_short(self): admin_player = fake_player(123, "Admin Player") connected_players(admin_player) return_code = self.plugin.cmd_policy_exception(admin_player, ["!except"], minqlx.CHAT_CHANNEL) assert_that(return_code, is_(minqlx.RET_USAGE))
def test_cmd_discordbot_reconnect_when_disconnected(self): when(self.discord).is_discord_logged_in().thenReturn(False) triggering_player = fake_player(1, "Triggering Player") chat_channel = mock(spec=minqlx.AbstractChannel, strict=False) self.plugin.cmd_discordbot(triggering_player, ["!discordbot", "reconnect"], chat_channel) verify(chat_channel).reply("Reconnecting to Discord...") verify(self.discord, times=0).stop() verify(self.discord).run()
def test_cmd_policy_exception_for_no_matching_player(self): admin_player = fake_player(123, "Admin Player") connected_players(admin_player) self.plugin.cmd_policy_exception(admin_player, ["!except", "except"], minqlx.CHAT_CHANNEL) assert_player_was_told(admin_player, matches(".*Could not find player.*"))
def test_handle_team_switch_attempt_player_has_exception_to_join(self): switching_player = fake_player(123, "Joining Player") connected_players(switching_player) self.plugin.exceptions.add(switching_player.steam_id) return_code = self.plugin.handle_team_switch_attempt( switching_player, "spectator", "any") assert_that(return_code, is_(minqlx.RET_NONE))
def test_handle_team_switch_attempt_plugin_disabled(self): self.plugin.plugin_enabled = False switching_player = fake_player(123, "Joining Player") connected_players(switching_player) return_code = self.plugin.handle_team_switch_attempt( switching_player, "spectator", "any") assert_that(return_code, is_(minqlx.RET_NONE))
def test_relay_team_chat_message_with_asterisks_in_playername(self): relay_channel = self.relay_teamchat_channel() player = fake_player(steam_id=1, name="*Chatting* player") minqlx_channel = "" self.discord.relay_team_chat_message(player, minqlx_channel, "QL is great!") assert_text_was_sent_to_discord_channel(relay_channel, r"**\*Chatting\* player**: QL is great!")
def test_handle_team_switch_attempt_no_balance_plugin(self): minqlx.Plugin._loaded_plugins.pop("balance") # pylint: disable=protected-access switching_player = fake_player(123, "Joining Player") connected_players(switching_player) self.plugin.handle_team_switch_attempt(switching_player, "spectator", "any") assert_that(self.plugin.plugin_enabled, is_(False))
def test_handle_death_on_own_death_does_nothing(self): victim = fake_player(123, "Fragged Player", team="red") connected_players(victim) self.plugin.handle_death(victim, victim, {"MOD": "ROCKET"}) assert_that(self.plugin.frag_log, not_(contains_exactly(victim.steam_id))) # type: ignore
def test_relay_team_chat_message_simple_message(self): relay_channel = self.relay_teamchat_channel() player = fake_player(steam_id=1, name="Chatting player") minqlx_channel = "" self.discord.relay_team_chat_message(player, minqlx_channel, "QL is great!") assert_text_was_sent_to_discord_channel(relay_channel, "**Chatting player**: QL is great!")
def test_process_vote_player_votes_on_an_untracked_vote(self): self.setup_vote_in_progress() self.plugin.track_vote = False self.current_vote_count_is(1, 5) self.plugin.process_vote(fake_player(123, "Any Player"), False) assert_that(self.plugin.track_vote, is_(False)) verify(Plugin, times=0).force_vote(any_)
def test_process_vote_current_vote_count_not_available(self): self.setup_vote_in_progress() self.plugin.track_vote = True when2(Plugin.current_vote_count).thenReturn(None) self.plugin.process_vote(fake_player(123, "Any Player"), False) assert_that(self.plugin.track_vote, is_(True)) verify(Plugin, times=0).force_vote(any_)
def test_cmd_switch_plugin_moves_anonymous_players_to_spec(self): self.plugin.plugin_enabled = False reply_channel = mocked_channel() red_player = fake_player(123, "Red Player", "red") blue_player = fake_player(456, "Blue Player", "blue") connected_players(red_player, blue_player) self.setup_balance_playerprivacy([(red_player, "public"), (blue_player, "private")]) self.plugin.cmd_switch_plugin(None, ["!policy"], reply_channel) assert_player_was_put_on(red_player, "spectator", times=0) assert_player_was_told(red_player, any, times=0) assert_player_was_put_on(blue_player, "spectator") assert_player_was_told(blue_player, matches(".*Open qlstats.net.*")) assert_player_received_center_print(blue_player, matches(".*Join not allowed.*")) assert_plugin_sent_to_console(matches(".*not allowed to join.*"))
def test_cmd_soulz_for_another_non_existent_player(self): player = fake_player(123, "Issuing Player", team="red") connected_players(player) self.plugin.cmd_soulz(player, ["!soulz", "Non-existent"], self.reply_channel) assert_player_was_told(player, matches(".*no players matched.*"))
def test_cmd_mapreaperz_with_no_fragger(self): player = fake_player(123, "Issuing Player", team="red") connected_players(player) self.plugin.cmd_mapreaperz(player, ["!mapreaperz"], self.reply_channel) assert_channel_was_replied( self.reply_channel, matches("Issuing Player.*'s soul was not reaped by anyone, yet."))
def test_triggered_message_no_triggered_channels_configured(self): setup_cvar("qlx_discordTriggeredChannelIds", "") self.discord = SimpleAsyncDiscord("version information", self.logger) self.setup_discord_library() player = fake_player(steam_id=1, name="Chatting player") self.discord.triggered_message(player, "QL is great, @member #mention !") verify(self.triggered_channel(), times=0).send(any)
def test_handle_team_switch_attempt_player_has_no_ratings(self): switching_player = fake_player(123, "Joining Player") connected_players(switching_player) return_code = self.plugin.handle_team_switch_attempt( switching_player, "spectator", "any") assert_player_was_told(switching_player, matches("We couldn't fetch your ratings.*")) assert_that(return_code, is_(minqlx.RET_STOP_ALL))
def test_process_vote_threshold_player_votes_no_and_hits_vote_threshold( self): self.setup_vote_in_progress() self.plugin.track_vote = True self.current_vote_count_is(1, 5) self.plugin.process_vote(fake_player(123, "Any Player"), False) assert_that(self.plugin.track_vote, is_(False)) verify(Plugin).force_vote(False)
def test_process_vote_threshold_player_votes_no_and_does_not_meet_threashold( self): self.setup_vote_in_progress() self.plugin.track_vote = True self.current_vote_count_is(1, 2) self.plugin.process_vote(fake_player(123, "Any Player"), False) assert_that(self.plugin.track_vote, is_(True)) verify(Plugin, times=0).force_vote(any_)
def test_cmd_soulz_for_acid_deaths(self): player = fake_player(123, "Issuing Player", team="red") fragged_player = fake_player(456, "Fragged Player", team="red") killer1 = fake_player(4, "Killer1", team="blue") connected_players(player, fragged_player, killer1) when(self.db).zrevrangebyscore("minqlx:players:acid:soulz", "+INF", "-INF", start=0, num=10, withscores=True)\ .thenReturn([ (fragged_player.steam_id, 1) ]) self.plugin.cmd_soulz(player, ["!soulz", "!acid"], self.reply_channel) assert_channel_was_replied( self.reply_channel, matches(r"Top 10 reaped soulz for acid.*: " r"Fragged Player.* \(1\)"))
def test_handle_team_switch_attempt_no_game_running(self): setup_no_game() self.plugin = qlstats_privacy_policy() switching_player = fake_player(123, "Joining Player") connected_players(switching_player) return_code = self.plugin.handle_team_switch_attempt( switching_player, "spectator", "any") assert_that(return_code, is_(minqlx.RET_NONE))
def test_find_channel_match_more_than_one_channel_found_and_player_informed(): sending_player = fake_player(steam_id=1, name="Player") matched_channel = SimpleAsyncDiscord.find_channel_that_matches("general", [mocked_channel(name="matched_general"), mocked_channel(name="another-matched-general")], sending_player) verify(sending_player).tell("Found ^62^7 matching discord channels for #general:") verify(sending_player).tell("#matched_general #another-matched-general ") assert_that(matched_channel, is_(None))
def test_cmd_soulz_for_another_non_existent_lava_player(self): player = fake_player(123, "Issuing Player", team="red") connected_players(player) self.plugin.cmd_soulz(player, ["!soulz", "lava"], self.reply_channel) assert_player_was_told(player, matches(".*no players matched.*")) assert_channel_was_replied(self.reply_channel, any_, times=0) # type: ignore
def test_find_user_match_more_than_one_user_found_and_player_informed(): sending_player = fake_player(steam_id=1, name="Player") matched_user = SimpleAsyncDiscord.find_user_that_matches("user", [mocked_user(name="matched_user"), mocked_user(name="another-matched-uSEr")], sending_player) verify(sending_player).tell("Found ^62^7 matching discord users for @user:"******"@matched_user @another-matched-uSEr ") assert_that(matched_user, is_(None))
def test_cmd_mapreaperz_with_lava_backflips(self): player = fake_player(123, "Issuing Player", team="red") fragged_player = fake_player(456, "Fragged Player", team="red") killer1 = fake_player(4, "Killer1", team="blue") connected_players(player, fragged_player, killer1) self.plugin.frag_log = [(killer1.steam_id, player.steam_id), ("lava", fragged_player.steam_id), ("lava", fragged_player.steam_id), ("void", fragged_player.steam_id)] self.plugin.cmd_mapreaperz(player, ["!mapreaperz", "Fragged"], self.reply_channel) assert_channel_was_replied( self.reply_channel, matches(r"Top 10 reaperz of Fragged Player.*'s soul: " r"lava.* \(2\), void.* \(1\)"))
def test_cmd_mapsoulz_with_no_frags(self): player = fake_player(123, "Issuing Player", team="red") connected_players(player) self.plugin.cmd_mapsoulz(player, ["!mapsoulz"], self.reply_channel) assert_channel_was_replied( self.reply_channel, matches("Issuing Player.* didn't reap any soulz, yet."))
def test_handle_team_switch_attempt_first_player_joins(self): self.setup_balance_ratings([]) player = fake_player(42, "Fake Player") connected_players(player) return_code = self.plugin.handle_team_switch_attempt( player, "spectator", "red") assert_that(return_code, is_(minqlx.RET_NONE)) assert_that(self.plugin.last_new_player_id, is_(player.steam_id))
def test_handle_team_switch_attempt_no_balance_plugin_loaded(self): self.setup_no_balance_plugin() player = fake_player(42, "Fake Player") connected_players(player) return_code = self.plugin.handle_team_switch_attempt( player, "spectator", "red") assert_that(return_code, is_(minqlx.RET_NONE)) assert_plugin_sent_to_console(matches(".*not possible.*"))
def test_handle_team_switch_attempt_unsupported_gametype(self): setup_game_in_progress(game_type="rr") self.setup_balance_ratings([]) player = fake_player(42, "Fake Player") connected_players(player) return_code = self.plugin.handle_team_switch_attempt( player, "spectator", "red") assert_that(return_code, is_(minqlx.RET_NONE))
def test_handle_team_switch_attempt_fourth_player_joins_not_to_better_balanced_team( self): red_player = fake_player(123, "Red Player", "red") blue_player = fake_player(246, "Blue Player", "blue") new_blue_player = fake_player(41, "New Red Player", "blue") new_player = fake_player(42, "New Player", "spectator") connected_players(red_player, blue_player, new_blue_player, new_player) self.setup_balance_ratings([(red_player, 1200), (blue_player, 1400), (new_blue_player, 1400), (new_player, 1200)]) self.plugin.last_new_player_id = new_blue_player.steam_id return_code = self.plugin.handle_team_switch_attempt( new_player, "spectator", "blue") assert_that(return_code, is_(minqlx.RET_NONE)) assert_player_was_put_on(new_player, "blue", times=0) assert_player_was_put_on(new_blue_player, "red") assert_that(self.plugin.last_new_player_id, is_(None))
def test_evaluate_participation_vote_vote_draw(self): connected_players(fake_player(123, "Player1"), fake_player(456, "Player2"), fake_player(789, "Player3"), fake_player(321, "Player4"), fake_player(654, "Player5"), fake_player(987, "Player6"), fake_player(135, "Player7"), fake_player(246, "Player8")) result = self.strategy.evaluate_votes(3, 3) assert_that(result, is_(None))