Files
x-stake/spec/graphql/mutations/create_sell_crypto_order_spec.rb
2021-08-28 01:31:04 -03:00

103 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
RSpec.describe(Mutations::CreateSellCryptoOrder, type: :mutation) do
let(:query_string) do
<<~GQL
mutation($amount: String!) {
createSellCryptoOrder(input: {
order: {
amount: $amount,
}
}) {
errors {
fullMessages
fieldName
messages
path
}
order {
status
paidAmount
receivedAmountCents
}
}
}
GQL
end
context "when the user has enough balance" do
it "withdraws from his account and creates a buy order" do
user = create(
:user,
balance: build(:balance, amount: 1.0034)
)
variables = {
"amount": "0.80",
}
context = { current_user: user }
result = XStakeSchema.execute(
query_string,
variables: variables,
context: context
).to_h.with_indifferent_access
expect(result).to(eq({
"data" => {
"createSellCryptoOrder" => {
"errors" => nil,
"order" => {
"status" => "PROCESSING",
"paidAmount" => "0.8",
"receivedAmountCents" => 0,
},
},
},
}))
expect(user.balance.reload.amount.to_s).to(eq("0.2034"))
end
end
context "when the user does not have enough balance" do
it "returns withdrawl error" do
user = create(
:user,
balance: build(:balance, amount: 0.0034)
)
variables = {
"amount": "0.80",
}
context = { current_user: user }
result = XStakeSchema.execute(
query_string,
variables: variables,
context: context
).to_h.with_indifferent_access
expect(result).to(eq({
"data" => {
"createSellCryptoOrder" => {
"errors" => [{
"fullMessages" => ["Quantia saldo insuficiente"],
"fieldName" => "amount",
"messages" => ["saldo insuficiente"],
"path" => ["attributes", "amount"],
}],
"order" => nil,
},
},
}))
expect(user.balance.reload.amount.to_s).to(eq("0.0034"))
end
end
end