# frozen_string_literal: true
describe ESM::Command::Server::Me, category: "command" do
include_context "command"
include_examples "validate_command"
describe "V1" do
describe "#execute" do
include_context "connection_v1"
context "when the command is executed" do
it "returns information about the player" do
execute!(arguments: {server_id: server.server_id})
expect(connection.requests).to be_blank
expect(ESM.discord_bot.test_outbox).not_to be_blank
embed = ESM.discord_bot.test_outbox.first.content
expect(embed.title).to match(/.+'s stats on `#{server.server_id}`/)
expect(embed.fields.size).to be >= 3
if response.territories.present?
expect(embed.fields.size).to eq(4)
expect(embed.fields[3].name).to eq("__Territories__")
expect(embed.fields[3].value).not_to be_blank
end
end
end
end
end
describe "V2", v2: true do
it "is an player command" do
expect(command.type).to eq(:player)
end
describe "#on_execute/#on_response", :requires_connection do
include_context "connection"
before do
user.exile_account
user.exile_player
end
context "when the user has an account on the server" do
it "returns the user's stats" do
execute!(arguments: {server_id: server.server_id})
wait_for { ESM.discord_bot.test_outbox }.not_to be_empty
embed = ESM.discord_bot.test_outbox.first.content
expect(embed.title).to match(/.+'s stats on `#{server.server_id}`/)
expect(embed.fields.size).to eq(3)
end
end
context "when the user owns territories on the server" do
let!(:territories) do
owner_uid = user.steam_uid
create_list(
:exile_territory, 2,
owner_uid: owner_uid,
moderators: [owner_uid],
build_rights: [owner_uid],
server_id: server.id
)
end
it "includes territories in the embed" do
execute!(arguments: {server_id: server.server_id})
wait_for { ESM.discord_bot.test_outbox }.not_to be_empty
embed = ESM.discord_bot.test_outbox.first.content
expect(embed.fields.size).to eq(4)
expect(embed.fields[3].name).to eq("__Territories__")
territories.each do |territory|
expect(embed.fields[3].value).to include(territory.encoded_id, territory.name)
end
end
end
context "when the user's player is dead" do
it "displays account information only" do
player = ESM::ExilePlayer.from(user)
expect(player).not_to be_nil
player.kill!
execute!(arguments: {server_id: server.server_id})
wait_for { ESM.discord_bot.test_outbox }.not_to be_empty
embed = ESM.discord_bot.test_outbox.first.content
general_field = embed.fields.first
expect(general_field.name).to match("General")
expect(general_field.value).to match("You are dead")
end
end
context "when the user does not have an account on the server" do
it "returns an error" do
player = ESM::ExilePlayer.from(user)
player.kill!
account = ESM::ExileAccount.from(user)
account.delete
execute!(arguments: {server_id: server.server_id})
wait_for { ESM.discord_bot.test_outbox }.not_to be_empty
embed = ESM.discord_bot.test_outbox.first.content
expect(embed.description).to match(
"Hey #{user.mention}, you **need to join** `#{server.server_id}` first before you can run commands on it"
)
end
end
end
end
end