rex/spec/server/message_parser_spec.rb

155 lines
3.8 KiB
Ruby
Raw Permalink Normal View History

2024-02-14 19:33:05 +01:00
# require "eventmachine"
RSpec.describe Rex::Server::MessageParser do
subject(:instance) { described_class.new }
describe "#parse" do
subject { instance.parse(message) }
context "when message is not valid json" do
let(:message) do
"{{}}"
end
it { is_expected.to eq([false, [{error: :json_parse_error}]]) }
end
context "when message is not a valid message type" do
let(:message) do
{
name: "unknown.request_type"
}.to_json
end
it "returns an error" do
expect(subject[0]).to be(false)
expect(subject.dig(1, 0, :fragment)).to eq("#/name")
end
end
context "when message does not match the schema" do
let(:message) do
{
request_id: "-1",
name: "order.create",
type: "request",
args: "test"
}.to_json
end
it "returns an error" do
expect(subject[0]).to be(false)
expect(subject[1].length).to eq(2)
expect(subject[1].map { _1[:fragment] }).to match_array(["#/request_id", "#/args"])
end
end
context "when message is a order create request" do
let(:message) do
{
request_id: 1,
name: "order.create",
type: "request",
args: {
quantity: 100,
price: 10,
side: :buy
}
}.to_json
end
it "returns a order create request" do
expect(subject).to be_instance_of(Rex::Server::Messages::CreateOrderRequest)
expect(subject.user_id).to eq(nil)
2024-02-18 19:31:32 +01:00
expect(subject.side).to eq(:buy)
2024-02-14 19:33:05 +01:00
expect(subject.price).to eq(10)
expect(subject.quantity).to eq(100)
end
end
context "when message is a order cancel request" do
let(:message) do
{
request_id: 1,
name: "order.cancel",
type: "request",
args: {
id: 123
}
}.to_json
end
it "returns a order cancel request" do
expect(subject).to be_instance_of(Rex::Server::Messages::CancelOrderRequest)
expect(subject.user_id).to eq(nil)
expect(subject.order_id).to eq(123)
end
end
context "when message is a order book request" do
let(:message) do
{
request_id: 1,
name: "orderbook.fetch",
type: "request",
args: {}
}.to_json
end
it "returns a fetch order book request" do
expect(subject).to be_instance_of(Rex::Server::Messages::FetchOrderBookRequest)
expect(subject.user_id).to eq(nil)
end
end
context "when message is a fetch orders request" do
let(:message) do
{
request_id: 1,
name: "orders.fetch",
type: "request",
args: {}
}.to_json
end
it "returns a fetch orders request" do
expect(subject).to be_instance_of(Rex::Server::Messages::FetchOrdersRequest)
expect(subject.user_id).to eq(nil)
end
end
context "when message is a fetch trades request" do
let(:message) do
{
request_id: 1,
name: "trades.fetch",
type: "request",
args: {}
}.to_json
end
it "returns a fetch trades request" do
expect(subject).to be_instance_of(Rex::Server::Messages::FetchTradesRequest)
expect(subject.user_id).to eq(nil)
end
end
context "when message is an authenticate request" do
let(:message) do
{
request_id: 1,
name: "authenticate",
type: "request",
args: {
user_id: "1"
}
}.to_json
end
it "returns a authenticate request" do
expect(subject).to be_instance_of(Rex::Server::Messages::AuthenticateRequest)
expect(subject.user_id).to eq("1")
end
end
end
end