# frozen_string_literal: true
describe ESM::Command do
subject(:commands) { described_class }
context "when ESM has commands" do
it do
expect(commands.all).not_to be_empty
end
it "is organized by type" do
expect(commands.by_type[:player]).not_to be_empty
expect(commands.by_type[:admin]).not_to be_empty
end
it "organized by namespace" do
base_class = ESM::Command
territory_commands = base_class::Territory
server_commands = base_class::Server
request_commands = base_class::Request
general_commands = base_class::General
my_commands = base_class::My
community_commands = base_class::Community
expect(commands.by_namespace).to match(
a_hash_including(
territory: {
upgrade: territory_commands::Upgrade,
set_id: territory_commands::SetId,
admin: {
list: territory_commands::ServerTerritories,
restore: territory_commands::Restore
},
remove_player: territory_commands::Remove,
promote_player: territory_commands::Promote,
pay: territory_commands::Pay,
demote_player: territory_commands::Demote,
add_player: territory_commands::Add
},
server: {
uptime: server_commands::Uptime,
my: {
territories: server_commands::Territories,
player: server_commands::Me
},
stuck: server_commands::Stuck,
admin: {
execute_code: server_commands::Sqf,
reset_player: server_commands::Reset,
modify_player: server_commands::Player,
search_logs: server_commands::Logs,
find: server_commands::Info,
broadcast: server_commands::Broadcast
},
details: server_commands::Server,
reward: server_commands::Reward,
gamble: server_commands::Gamble
},
request: {
decline: request_commands::Decline,
accept: request_commands::Accept
},
my: {
steam_uid: my_commands::SteamUid,
requests: my_commands::Requests,
preferences: my_commands::Preferences,
aliases: my_commands::Aliases
},
register: general_commands::Register,
help: general_commands::Help,
community: {
admin: {
find_player: community_commands::Whois,
reset_cooldown: community_commands::ResetCooldown,
change_mode: community_commands::Mode
},
servers: community_commands::Servers,
id: community_commands::Id
}
)
)
end
end
describe ".[]" do
context "when the input is a 'OG command name'" do
it do
expect(commands["help"]).to be(ESM::Command::General::Help)
end
end
context "when the input is a 'slash command'" do
it do
expect(commands["/community servers"]).to be(ESM::Command::Community::Servers)
end
end
context "when the input is a 'slash command' without a slash" do
it do
expect(commands["server my player"]).to be(ESM::Command::Server::Me)
end
end
context "when the input is the end of a 'slash command'" do
it do
expect(commands["promote_player"]).to be(ESM::Command::Territory::Promote)
end
end
context "when the input is invalid" do
it do
expect(commands["this command cannot exist"]).to be(nil)
end
end
end
describe ".get" do
it "is aliased correctly" do
expect(commands.get("help")).to be(ESM::Command::General::Help)
end
end
describe ".include?" do
context "when the command exists" do
it do
expect(commands.include?("help")).to be(true)
end
end
context "when the command does not exist" do
it do
expect(commands.include?("This command cannot exist")).to be(false)
end
end
end
end