require "spec_helper" RSpec.describe PortalConnectors::ArbitrageClient do def client @client ||= PortalConnectors::ArbitrageClient.singleton end def order_params( remi_offer_id:, order_type:, fiat_currency:, fiat_amount:, coin_currency:, coin_amount:, remi_trade_id: ) { remi_offer_id: remi_offer_id, order_type: order_type, coin_currency: coin_currency, coin_amount: coin_amount, fiat_currency: fiat_currency, fiat_amount: fiat_amount, remi_trade_id: remi_trade_id } end describe ".sign" do it "returns signature of request" do params = order_params( remi_offer_id: 1, order_type: "buy", coin_currency: "btc", coin_amount: 0.5, fiat_currency: "VES", fiat_amount: 1_500_000_000, remi_trade_id: 1 ) expect(client.sign(params)).to be_present end end describe "#submit_order", vcr: true do context "order success" do it "return pending status" do params = order_params( remi_offer_id: 1, order_type: "buy", coin_currency: "btc", coin_amount: 0.5, fiat_currency: "VES", fiat_amount: 1_500_000_000, remi_trade_id: 1 ) data, ok = client.submit_order(params) expect(ok).to eq true expect(data["status"]).to eq("pending") end end context "order failed" do it "return error" do params = order_params( remi_offer_id: 1, order_type: "buy", coin_currency: "btc", coin_amount: 0.5, fiat_currency: "VES", fiat_amount: 1_500_000_000, remi_trade_id: 1 ) data, ok = client.submit_order(params) expect(ok).to eq false expect(data["error"]).to eq("Trade id has already been taken") end end end describe "#sync_arbitrage_offer", vcr: true do context "disable success" do it "returns disabled arbitrage offer" do params = { remi_offer_id: 1, disabled: true } data, ok = client.sync_arbitrage_offer(params) expect(ok).to eq true expect(data["enabled"]).to be_falsy end end context "enable success" do it "returns enabled arbitrage offer" do params = { remi_offer_id: 1, disabled: false } data, ok = client.sync_arbitrage_offer(params) expect(ok).to eq true expect(data["enabled"]).to be_truthy end end context "sync failed" do it "returns error" do params = { remi_offer_id: 11, disabled: true } data, ok = client.sync_arbitrage_offer(params) expect(ok).to be_falsy expect(data["error"]).to eq("Invalid response") end end end end