Friday, September 20, 2024 2:32:47 AM
> settings

Customize


Authenticate

> server_request_spec.rb
# frozen_string_literal: true

describe ESM::Websocket::ServerRequest do
  include_context "command" do
    let!(:command_class) { ESM::Command::Test::BaseV1 }

    # This test needs esm_community/esm_server in order to function
    let!(:community) { create(:esm_community) }
    let!(:server) { create(:esm_malden, community_id: community.id) }
  end

  let!(:client) { WebsocketClient.new(server) }
  let!(:channel) { ESM.bot.channel(ESM::Community::ESM::SPAM_CHANNEL) }

  # Wait before pulling this value
  let(:connection) { ESM::Websocket.connections[server.server_id] }

  let(:request) do
    request = ESM::Websocket::Request.new(
      command: previous_command,
      user: user,
      channel: channel,
      parameters: [],
      timeout: 15
    )

    connection.requests << request

    request
  end

  before do
    wait_for { client.connected? }.to be(true)

    # Wait for the client to connect before executing the command
    execute!(
      channel: channel,
      arguments: {
        community_id: community.community_id,
        server_id: server.server_id,
        target: user.discord_id,
        _integer: "1",
        _preserve: "PRESERVE",
        _display_as: "display_name",
        _default: "default"
      }
    )
  end

  after do
    client.disconnect!
  end

  describe "#process" do
    it "should do nothing (server command request)" do
      message = OpenStruct.new(command: "TESTING")
      expect { ESM::Websocket::ServerRequest.new(connection: connection, message: message).process }.not_to raise_error
    end

    it "should remove the request" do
      message = OpenStruct.new(commandID: request.id, parameters: [])

      expect { ESM::Websocket::ServerRequest.new(connection: connection, message: message).process }.not_to raise_error
      expect(connection.requests.size).to eq(0)
    end

    it "should send the error (server error)" do
      message = OpenStruct.new(commandID: request.id, error: "This is an error")

      expect { ESM::Websocket::ServerRequest.new(connection: connection, message: message).process }.not_to raise_error
      wait_for { ESM::Test.messages.size }.to eq(1)

      embed = ESM::Test.messages.first.second
      expect(embed.description).to match(/this is an error/i)
    end

    it "should send the error (server command error)" do
      message = {commandID: request.id, error: "", parameters: [{error: "This is an error"}]}.to_ostruct

      expect { ESM::Websocket::ServerRequest.new(connection: connection, message: message).process }.not_to raise_error
      wait_for { ESM::Test.messages.size }.to eq(1)

      embed = ESM::Test.messages.first.second
      expect(embed.description).to match(/this is an error/i)
    end

    it "should send the error (command error)" do
      # Set a flag so our command raises an error
      previous_command.instance_variable_set(:@raise_error, true)

      message = {commandID: request.id, parameters: []}.to_ostruct

      expect { ESM::Websocket::ServerRequest.new(connection: connection, message: message).process }.not_to raise_error
      wait_for { ESM::Test.messages.size }.to eq(1)

      embed = ESM::Test.messages.first.second
      expect(embed.description).to match(/this failed a check/i)
    end
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8