Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'master' of https://github.com/joaomilho/moip-ruby into …

…joaomilho-master

Conflicts:
	spec/moip_spec.rb
  • Loading branch information...
commit 2b61a77355cb8c5487ff68be0eef8873696a110e 2 parents 0cee70e + 51fed33
@alanmeira alanmeira authored
View
4 Gemfile.lock
@@ -9,12 +9,12 @@ PATH
GEM
remote: http://rubygems.org/
specs:
- activesupport (3.0.7)
+ activesupport (3.0.8)
crack (0.1.8)
diff-lcs (1.1.2)
httparty (0.6.1)
crack (= 0.1.8)
- nokogiri (1.4.4)
+ nokogiri (1.4.6)
rspec (2.1.0)
rspec-core (~> 2.1.0)
rspec-expectations (~> 2.1.0)
View
14 lib/moip.rb
@@ -4,6 +4,20 @@
require 'active_support/deprecation'
module MoIP
+
+ class ValidationError < StandardError; end
+
+ class MissingPaymentTypeError < ValidationError; end
+ class MissingPayerError < ValidationError; end
+ class MissingBirthdate < ValidationError; end
+
+ class InvalidCellphone < ValidationError; end
+ class InvalidExpiry < ValidationError; end
+ class InvalidInstitution < ValidationError; end
+ class InvalidPhone < ValidationError; end
+ class InvalidReceiving < ValidationError; end
+ class InvalidValue < ValidationError; end
+
autoload :DirectPayment, 'moip/direct_payment'
autoload :Client, 'moip/client'
View
32 lib/moip/client.rb
@@ -15,10 +15,34 @@ class Client
class << self
+ # Verifica conta
+ # URL Produção: https://www.moip.com.br/ws/alpha/VerificarConta/{login_moip}
+ # URL SandBox: https://desenvolvedor.moip.com.br/sandbox/ws/alpha/VerificarConta/{login_moip}
+ # XML de Resposta:
+ # <ns1:verificarContaResponse>
+ # <RespostaVerificarConta>
+ # <Status>{status da conta}</Status>
+ # </RespostaVerificarConta>
+ # </ns1:verificarContaResponse>
+ #
+ # Valores Esperados: {status da conta}
+ # Inexistente " Login inexistente no sistema MoIP "
+ # Criado " Login criado, porem não verificado "
+ # Verificado " Login verificado "
+# MoIP::Client.verify 'aaa'
+
+ def verify account
+ full_data = peform_action!(:get, "VerificarConta/#{account}")
+ return full_data["ns1:verificarContaResponse"]["RespostaVerificarConta"]["Status"] == "Verificado"
+ end
+
# Envia uma instrução para pagamento único
def checkout(attributes = {})
- full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => DirectPayment.body(attributes))
-
+ body = DirectPayment.body(attributes)
+ puts "************ XML ************"
+ puts body
+ full_data = peform_action!(:post, 'EnviarInstrucao/Unica', :body => body)
+ # raise full_data.inspect
get_response!(full_data["ns1:EnviarInstrucaoUnicaResponse"]["Resposta"])
end
@@ -63,7 +87,9 @@ def peform_action!(action_name, url, options = {})
end
def get_response!(data)
- raise(WebServerResponseError, data["Erro"]) if data["Status"] == "Falha"
+ # raise data.inspect
+ err = data["Erro"].is_a?(Array) ? data["Erro"].join(", ") : data["Erro"]
+ raise(WebServerResponseError, err) if data["Status"] == "Falha"
data
end
end
View
50 lib/moip/direct_payment.rb
@@ -3,8 +3,33 @@
module MoIP
- class MissingPaymentTypeError < StandardError ; end
- class MissingPayerError < StandardError ; end
+ # Baseado em http://labs.moip.com.br/pdfs/Integra%C3%A7%C3%A3o%20API%20-%20Autorizar%20e%20Cancelar%20Pagamentos.pdf
+ CodigoErro = 0..999
+ CodigoEstado = %w{AC AL AM AP BA CE DF ES GO MA MG MS MT PA PB PE PI PR RJ RN RO RR RS SC SE SP TO}
+ CodigoMoeda = "BRL"
+ CodigoPais = "BRA"
+ Destino = %w{Nenhum MesmoCobranca AInformar PreEstabelecido}
+ InstituicaoPagamento = %w{MoIP Visa AmericanExpress Mastercard Diners BancoDoBrasil Bradesco Itau BancoReal Unibanco Aura Hipercard Paggo Banrisul}
+ FormaPagamento = %w{CarteiraMoIP CartaoCredito CartaoDebito DebitoBancario FinanciamentoBancario BoletoBancario}
+ FormaRestricao = %w{Contador Valor}
+ PapelIndividuo = %w{Integrador Recebedor Comissionado Pagado}
+ OpcaoDisponivel = %w{Sim Não PagadorEscolhe}
+ Parcelador = %w{Nenhum Administradora MoIP Recebedor}
+ StatusLembrete = %w{Enviado Realizado EmAndamento Aguardando Falha}
+ StatusPagamento = %w{Concluido EmAnalise Autorizado Iniciado Cancelado BoletoImpresso Estornado}
+ TipoDias = %w{Corridos Uteis}
+ TipoDuracao = %w{Minutos Horas Dias Semanas Meses Ano}
+ TipoFrete = %w{Proprio Correio}
+ TipoIdentidade = %w{CPF CNPJ}
+ TipoInstrucao = %w{Unico Recorrente PrePago PosPago Remessa}
+ TipoLembrete = %w{Email SMS}
+ TipoPeriodicidade = %w{Anual Mensal Semanal Diaria}
+ TipoRecebimento = %w{AVista Parcelado}
+ TipoRestricao = %w{Autorizacao Pagamento}
+ TipoStatus = %w{Sucesso Falha}
+
+ #
+ TiposComInstituicao = %w{CartaoCredito CartaoCredito DebitoBancario}
class DirectPayment
@@ -12,8 +37,23 @@ class << self
# Cria uma instrução de pagamento direto
def body(attributes = {})
+
+#raise "#{attributes[:valor]}--#{attributes[:valor].to_f}"
raise(MissingPaymentTypeError, "É necessário informar a razão do pagamento") if attributes[:razao].nil?
- raise(MissingPayerError, "É obrigatório passar as informações do pagador") if attributes[:pagador].nil?
+ raise(MissingPayerError, "É obrigatório passar as informarções do pagador") if attributes[:pagador].nil?
+
+ raise(InvalidValue, "Valor deve ser maior que zero.") if attributes[:valor].to_f <= 0.0
+ raise(InvalidPhone, "Telefone deve ter o formato (99)9999-9999.") if attributes[:pagador][:tel_fixo] !~ /\(\d{2}\)?\d{4}-\d{4}/
+ raise(InvalidCellphone, "Telefone celular deve ter o formato (99)9999-9999.") if attributes[:pagador][:tel_cel] !~ /\(\d{2}\)?\d{4}-\d{4}/
+
+ raise(MissingBirthdate, "É obrigatório passar as informarções do pagador") if TiposComInstituicao.include?(attributes[:forma]) && attributes[:data_nascimento].nil?
+
+ raise(InvalidExpiry, "Data de expiração deve ter o formato 01-00 até 12-99.") if TiposComInstituicao.include?(attributes[:forma]) && attributes[:expiracao] !~ /(1[0-2]|0\d)\/\d{2}/
+
+
+ raise(InvalidReceiving, "Recebimento é inválido. Escolha um destes: #{TipoRecebimento.join(', ')}") if !TipoRecebimento.include?(attributes[:recebimento]) && TiposComInstituicao.include?(attributes[:forma])
+
+ raise(InvalidInstitution, "A instituição #{attributes[:instituicao]} é inválida. Escolha uma destas: #{InstituicaoPagamento.join(', ')}") if TiposComInstituicao.include?(attributes[:forma]) && !InstituicaoPagamento.include?(attributes[:instituicao])
builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
@@ -41,7 +81,7 @@ def body(attributes = {})
}
# Débito Bancário
- if attributes[:forma] == "DebitoBancario"
+ if ["DebitoBancario"].include?(attributes[:forma])
xml.Instituicao {
xml.text attributes[:instituicao]
}
@@ -95,7 +135,7 @@ def body(attributes = {})
xml.Email { xml.text attributes[:pagador][:email] }
xml.TelefoneCelular { xml.text attributes[:pagador][:tel_cel] }
xml.Apelido { xml.text attributes[:pagador][:apelido] }
- xml.Identidade { xml.text attributes[:pagador][:identidade] }
+ xml.Identidade(:Tipo => "CPF") { xml.text attributes[:pagador][:identidade] }
xml.EnderecoCobranca {
xml.Logradouro { xml.text attributes[:pagador][:logradouro] }
xml.Numero { xml.text attributes[:pagador][:numero] }
View
652 spec/moip_spec.rb
@@ -1,8 +1,10 @@
# encoding: utf-8
require "moip"
-
require "digest/sha1"
+MoIP::Client
+MoIP::DirectPayment
+
describe "Make payments with the MoIP API" do
before :all do
@@ -44,357 +46,419 @@
context "misconfigured" do
it "should raise a missing config error " do
+ MoIP.setup do |config|
+ config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ config.token = nil
+ config.key = nil
+ end
+
MoIP::Client # for autoload
lambda { MoIP::Client.checkout(@billet) }.should raise_error(MoIP::MissingConfigError)
end
-
+
it "should raise a missing token error when token is nil" do
MoIP.setup do |config|
config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
config.token = nil
config.key = 'key'
end
-
+
MoIP::Client # for autoload
lambda { MoIP::Client.checkout(@billet) }.should raise_error(MoIP::MissingTokenError)
end
-
+
it "should raise a missing key error when key is nil" do
-
+
MoIP.setup do |config|
config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
config.token = 'token'
config.key = nil
end
-
+
MoIP::Client # for autoload
lambda { MoIP::Client.checkout(@billet) }.should raise_error(MoIP::MissingKeyError)
end
-
-
-
+
+
+
it "should raise a missing token error when token is empty" do
MoIP.setup do |config|
config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
config.token = ''
config.key = 'key'
end
-
+
MoIP::Client # for autoload
lambda { MoIP::Client.checkout(@billet) }.should raise_error(MoIP::MissingTokenError)
end
-
+
it "should raise a missing key error when key is empty" do
-
+
MoIP.setup do |config|
config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
config.token = 'token'
config.key = ''
end
-
+
MoIP::Client # for autoload
lambda { MoIP::Client.checkout(@billet) }.should raise_error(MoIP::MissingKeyError)
end
end
+
+ context "validations" do
- context "checkout" do
+
before(:each) do
MoIP.setup do |config|
config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
config.token = 'token'
config.key = 'key'
end
- MoIP::Client.stub!(:post).
- and_return("ns1:EnviarInstrucaoUnicaResponse"=>
- { "Resposta"=>
- { "ID"=>Time.now.strftime("%y%m%d%H%M%S"),
- "Status"=>"Sucesso",
- "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2"
- }
- })
end
-
- it "with old api should be deprecated" do
- deprecations = collect_deprecations{ MoIP.checkout(@billet) }
-
- deprecations.should_not be_empty
- deprecations.any? {|w| w =~ /MoIP.checkout has been deprecated/ }.should be_true
+ it "should raise invalid phone" do
+ @data = @credit.merge({:pagador => {:tel_fixo => 'InvalidPhone', :tel_cel => "(61)9999-9999"}})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::InvalidPhone)
end
-
- context "when it is a billet checkout" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "should raise an exception when razao parameter is not passed" do
- error = "É necessário informar a razão do pagamento"
-
- lambda { MoIP::Client.checkout(@billet_without_razao) }.should raise_error(MoIP::MissingPaymentTypeError,error)
- end
-
- it "should have status 'Sucesso'" do
- response = MoIP::Client.checkout(@billet)
- response["Status"].should == "Sucesso"
- end
+ it "should raise invalid cellphone" do
+ @data = @credit.merge({:pagador => {:tel_cel => 'InvalidCellphone', :tel_fixo => "(61)9999-9999"}})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::InvalidCellphone)
end
-
- context "when it is a debit checkout" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "should have status 'Sucesso' with valid arguments" do
- response = MoIP::Client.checkout(@debit)
- response["Status"].should == "Sucesso"
- end
-
- it "should have status 'Falha' when a instituition is not passed as argument" do
- @incorrect_debit = { :valor => "37.90", :id_proprio => id,
- :forma => "DebitoBancario", :pagador => @pagador,
- :razao => "Pagamento"}
-
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
-
- MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
- { "Resposta"=>
- {
- "Status"=>"Falha",
- "Erro"=>error
- }
- })
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
- lambda { MoIP::Client.checkout(@incorrect_debit) }.should
- raise_error(MoIP::WebServerResponseError, error)
- end
-
- it "should raise an exception if payer informations were not passed" do
- @incorrect_debit = { :valor => "37.90", :id_proprio => id,
- :forma => "DebitoBancario",
- :instituicao => "BancoDoBrasil",
- :razao => "Pagamento"
- }
-
- lambda { MoIP::Client.checkout(@incorrect_debit) }.should
- raise_error(MoIP::MissingPayerError, "É obrigatório passar as informações do pagador")
- end
+ it "should raise invalid expiry" do
+ @data = @credit.merge({:expiracao => 'InvalidExpiry'})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::InvalidExpiry)
end
-
- context "when it is a credit card checkout" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "should have status 'Sucesso' with valid arguments" do
- response = MoIP::Client.checkout(@credit)
- response["Status"].should == "Sucesso"
- end
-
- it "should have status 'Falha' when the card informations were not passed as argument" do
- @incorrect_credit = { :valor => "8.90", :id_proprio => id,
- :forma => "CartaoCredito", :pagador => @pagador,
- :razao => "Pagamento"
- }
-
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
- MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
- {
- "Resposta"=>
- {
- "Status"=>"Falha",
- "Erro"=>error
- }
- })
-
- error = "Pagamento direto não é possível com a instituição de pagamento enviada"
- lambda { MoIP::Client.checkout(@incorrect_credit) }.should
- raise_error(MoIP::WebServerResponseError, error)
- end
+ it "should raise missing birthdate" do
+ @data = @credit.merge({:data_nascimento => nil})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::MissingBirthdate)
end
-
- context "in error scenario" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "should raise an exception if response is nil" do
- MoIP::Client.stub!(:post).and_return(nil)
- lambda { MoIP::Client.checkout(@billet) }.should
- raise_error(StandardError,"Ocorreu um erro ao chamar o webservice")
- end
-
- it "should raise an exception if status is fail" do
- MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
- { "Resposta"=>
- {"Status"=>"Falha",
- "Erro"=>"O status da resposta é Falha"
- }
- })
-
- lambda { MoIP::Client.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
- end
+ it "should raise invalid institution error" do
+ @data = @credit.merge({:instituicao => 'InvalidInstitution'})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::InvalidInstitution)
end
- end
-
- context "query a transaction token" do
-
- before(:each) do
-
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>
- { "RespostaConsultar"=>
- {"Status"=>"Sucesso",
- "ID"=>"201010291031001210000000046760"
- }
- })
- end
-
- it "with old api should be deprecated" do
- deprecations = collect_deprecations{ MoIP.query(token) }
-
- deprecations.should_not be_empty
- deprecations.any? {|w| w =~ /MoIP.query has been deprecated/ }.should be_true
- end
-
- it "should retrieve the transaction" do
- response = MoIP::Client.query(token)
- response["Status"].should == "Sucesso"
- end
-
- context "in a error scenario" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "should retrieve status 'Falha'" do
- MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>
- { "RespostaConsultar"=>
- {"Status"=>"Falha",
- "Erro"=>"Instrução não encontrada",
- "ID"=>"201010291102522860000000046768"
- }
- })
- query = "000000000000000000000000000000000000000000000000000000000000"
- lambda { MoIP::Client.query(query) }.should raise_error(StandardError, "Instrução não encontrada")
- end
- end
- end
-
- context "build the MoIP URL" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- end
- it "with old api should be deprecated" do
- deprecations = collect_deprecations{ MoIP.moip_page(token) }
-
- deprecations.should_not be_empty
- deprecations.any? {|w| w =~ /MoIP.moip_page has been deprecated/ }.should be_true
- end
-
- it "should build the correct URL" do
- page = "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
- MoIP::Client.moip_page(token).should == page
+ it "should raise invalid receiving error" do
+ @data = @credit.merge({:recebimento => 'InvalidReceiving'})
+ lambda { MoIP::Client.checkout(@data) }.should raise_error(MoIP::InvalidReceiving)
end
-
- it "should raise an error if the token is not informed" do
- error = "É necessário informar um token para retornar os dados da transação"
- lambda { MoIP::Client.moip_page("").should
- raise_error(ArgumentError, error) }
+ it "should raise invalid value error if 0" do
+ @credit[:valor] = 0
+ lambda { MoIP::Client.checkout(@credit) }.should raise_error(MoIP::InvalidValue)
end
-
- it "should raise an error if nil is passed as the token" do
- error = "É necessário informar um token para retornar os dados da transação"
- lambda { MoIP::Client.moip_page(nil).should
- raise_error(ArgumentError, error) }
+ it "should raise invalid value error if '0'" do
+ @credit[:valor] = '0'
+ lambda { MoIP::Client.checkout(@credit) }.should raise_error(MoIP::InvalidValue)
end
-
- it "should raise a missing token error if nil is passed as the token" do
- lambda { MoIP::Client.moip_page(nil).should raise_error(MissingTokenError) }
+ it "should raise invalid value error if 0.0" do
+ @credit[:valor] = 0.0
+ lambda { MoIP::Client.checkout(@credit) }.should raise_error(MoIP::InvalidValue)
end
-
- it "should raise a missing token error if an empty string is passed as the token" do
- lambda { MoIP::Client.moip_page("").should raise_error(MissingTokenError) }
+ it "should raise invalid value error if '0.0'" do
+ @credit[:valor] = '0.0'
+ lambda { MoIP::Client.checkout(@credit) }.should raise_error(MoIP::InvalidValue)
end
- end
-
- context "when receive notification" do
- before(:each) do
- MoIP.setup do |config|
- config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
- config.token = 'token'
- config.key = 'key'
- end
- @params = { "id_transacao" => "Pag62", "valor" => "8.90",
- "status_pagamento" => "3", "cod_moip" => "001",
- "forma_pagamento" => "73", "tipo_pagamento" => "BoletoBancario",
- "email_consumidor" => "presidente@planalto.gov.br" }
- end
-
- it "with old api should be deprecated" do
- deprecations = collect_deprecations{ MoIP.notification(@param) }
-
- deprecations.should_not be_empty
- deprecations.any? {|w| w =~ /MoIP.notification has been deprecated/ }.should be_true
- end
-
- it "should return a hash with the params extracted from NASP" do
- response = { :transaction_id => "Pag62", :amount => "8.90",
- :status => "printed", :code => "001",
- :payment_type => "BoletoBancario",
- :email => "presidente@planalto.gov.br" }
-
- MoIP::Client.notification(@params).should == response
- end
-
- it "should return valid status based on status code" do
- MoIP::STATUS[1].should == "authorized"
- MoIP::STATUS[2].should == "started"
- MoIP::STATUS[3].should == "printed"
- MoIP::STATUS[4].should == "completed"
- MoIP::STATUS[5].should == "canceled"
- MoIP::STATUS[6].should == "analysing"
+ it "should raise invalid value error if -1" do
+ @credit[:valor] = -1
+ lambda { MoIP::Client.checkout(@credit) }.should raise_error(MoIP::InvalidValue)
end
end
-
- def id
- "transaction_" + Digest::SHA1.hexdigest([Time.now, rand].join)
- end
-
- def token
- "T2X0Q1N021E0B2S9U1P0V3Y0G1F570Y2P4M0P000M0Z0F0J0G0U4N6C7W5T9"
- end
-
- def collect_deprecations
- old_behavior = ActiveSupport::Deprecation.behavior
- deprecations = []
- ActiveSupport::Deprecation.behavior = Proc.new do |message, callstack|
- deprecations << message
- end
- result = yield
- deprecations
- ensure
- ActiveSupport::Deprecation.behavior = old_behavior
+ #
+ # context "checkout" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # MoIP::Client.stub!(:post).
+ # and_return("ns1:EnviarInstrucaoUnicaResponse"=>
+ # { "Resposta"=>
+ # { "ID"=>Time.now.strftime("%y%m%d%H%M%S"),
+ # "Status"=>"Sucesso",
+ # "Token" => "T2N0L0X8E0S71217U2H3W1T4F4S4G4K731D010V0S0V0S080M010E0Q082X2"
+ # }
+ # })
+ # end
+ #
+ # it "with old api should be deprecated" do
+ # deprecations = collect_deprecations{ MoIP.checkout(@billet) }
+ #
+ # deprecations.should_not be_empty
+ # deprecations.any? {|w| w =~ /MoIP.checkout has been deprecated/ }.should be_true
+ # end
+ #
+ # context "when it is a billet checkout" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "should raise an exception when razao parameter is not passed" do
+ # error = "É necessário informar a razão do pagamento"
+ #
+ # lambda { MoIP::Client.checkout(@billet_without_razao) }.should raise_error(MoIP::MissingPaymentTypeError,error)
+ # end
+ #
+ # it "should have status 'Sucesso'" do
+ # response = MoIP::Client.checkout(@billet)
+ # response["Status"].should == "Sucesso"
+ # end
+ # end
+ #
+ # context "when it is a debit checkout" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "should have status 'Sucesso' with valid arguments" do
+ # response = MoIP::Client.checkout(@debit)
+ # response["Status"].should == "Sucesso"
+ # end
+ #
+ # it "should have status 'Falha' when a instituition is not passed as argument" do
+ # @incorrect_debit = { :valor => "37.90", :id_proprio => id,
+ # :forma => "DebitoBancario", :pagador => @pagador,
+ # :razao => "Pagamento"}
+ #
+ # error = "Pagamento direto não é possível com a instituição de pagamento enviada"
+ #
+ # MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
+ # { "Resposta"=>
+ # {
+ # "Status"=>"Falha",
+ # "Erro"=>error
+ # }
+ # })
+ # error = "Pagamento direto não é possível com a instituição de pagamento enviada"
+ # lambda { MoIP::Client.checkout(@incorrect_debit) }.should
+ # raise_error(MoIP::WebServerResponseError, error)
+ # end
+ #
+ # it "should raise an exception if payer informations were not passed" do
+ # @incorrect_debit = { :valor => "37.90", :id_proprio => id,
+ # :forma => "DebitoBancario",
+ # :instituicao => "BancoDoBrasil",
+ # :razao => "Pagamento"
+ # }
+ #
+ # lambda { MoIP::Client.checkout(@incorrect_debit) }.should
+ # raise_error(MoIP::MissingPayerError, "É obrigatório passar as informações do pagador")
+ # end
+ # end
+ #
+ # context "when it is a credit card checkout" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "should have status 'Sucesso' with valid arguments" do
+ # response = MoIP::Client.checkout(@credit)
+ # response["Status"].should == "Sucesso"
+ # end
+ #
+ # it "should have status 'Falha' when the card informations were not passed as argument" do
+ # @incorrect_credit = { :valor => "8.90", :id_proprio => id,
+ # :forma => "CartaoCredito", :pagador => @pagador,
+ # :razao => "Pagamento"
+ # }
+ #
+ # error = "Pagamento direto não é possível com a instituição de pagamento enviada"
+ # MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
+ # {
+ # "Resposta"=>
+ # {
+ # "Status"=>"Falha",
+ # "Erro"=>error
+ # }
+ # })
+ #
+ # error = "Pagamento direto não é possível com a instituição de pagamento enviada"
+ # lambda { MoIP::Client.checkout(@incorrect_credit) }.should
+ # raise_error(MoIP::WebServerResponseError, error)
+ # end
+ # end
+ #
+ # context "in error scenario" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "should raise an exception if response is nil" do
+ # MoIP::Client.stub!(:post).and_return(nil)
+ # lambda { MoIP::Client.checkout(@billet) }.should
+ # raise_error(StandardError,"Ocorreu um erro ao chamar o webservice")
+ # end
+ #
+ # it "should raise an exception if status is fail" do
+ # MoIP::Client.stub!(:post).and_return("ns1:EnviarInstrucaoUnicaResponse"=>
+ # { "Resposta"=>
+ # {"Status"=>"Falha",
+ # "Erro"=>"O status da resposta é Falha"
+ # }
+ # })
+ #
+ # lambda { MoIP::Client.checkout(@billet) }.should raise_error(StandardError, "O status da resposta é Falha")
+ # end
+ # end
+ # end
+ #
+ # context "query a transaction token" do
+ #
+ # before(:each) do
+ #
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>
+ # { "RespostaConsultar"=>
+ # {"Status"=>"Sucesso",
+ # "ID"=>"201010291031001210000000046760"
+ # }
+ # })
+ # end
+ #
+ # it "with old api should be deprecated" do
+ # deprecations = collect_deprecations{ MoIP.query(token) }
+ #
+ # deprecations.should_not be_empty
+ # deprecations.any? {|w| w =~ /MoIP.query has been deprecated/ }.should be_true
+ # end
+ #
+ # it "should retrieve the transaction" do
+ # response = MoIP::Client.query(token)
+ # response["Status"].should == "Sucesso"
+ # end
+ #
+ # context "in a error scenario" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "should retrieve status 'Falha'" do
+ # MoIP::Client.stub!(:get).and_return("ns1:ConsultarTokenResponse"=>
+ # { "RespostaConsultar"=>
+ # {"Status"=>"Falha",
+ # "Erro"=>"Instrução não encontrada",
+ # "ID"=>"201010291102522860000000046768"
+ # }
+ # })
+ # query = "000000000000000000000000000000000000000000000000000000000000"
+ # lambda { MoIP::Client.query(query) }.should raise_error(StandardError, "Instrução não encontrada")
+ # end
+ # end
+ # end
+ #
+ # context "build the MoIP URL" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # end
+ # it "with old api should be deprecated" do
+ # deprecations = collect_deprecations{ MoIP.moip_page(token) }
+ #
+ # deprecations.should_not be_empty
+ # deprecations.any? {|w| w =~ /MoIP.moip_page has been deprecated/ }.should be_true
+ # end
+ #
+ # it "should build the correct URL" do
+ # page = "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{token}"
+ # MoIP::Client.moip_page(token).should == page
+ # end
+ #
+ # it "should raise an error if the token is not informed" do
+ # error = "É necessário informar um token para retornar os dados da transação"
+ # lambda { MoIP::Client.moip_page("").should
+ # raise_error(ArgumentError, error) }
+ # end
+ #
+ # it "should raise an error if nil is passed as the token" do
+ # error = "É necessário informar um token para retornar os dados da transação"
+ # lambda { MoIP::Client.moip_page(nil).should
+ # raise_error(ArgumentError, error) }
+ # end
+ #
+ # it "should raise a missing token error if nil is passed as the token" do
+ # lambda { MoIP::Client.moip_page(nil).should raise_error(MissingTokenError) }
+ # end
+ #
+ # it "should raise a missing token error if an empty string is passed as the token" do
+ # lambda { MoIP::Client.moip_page("").should raise_error(MissingTokenError) }
+ # end
+ # end
+ #
+ # context "when receive notification" do
+ # before(:each) do
+ # MoIP.setup do |config|
+ # config.uri = 'https://desenvolvedor.moip.com.br/sandbox'
+ # config.token = 'token'
+ # config.key = 'key'
+ # end
+ # @params = { "id_transacao" => "Pag62", "valor" => "8.90",
+ # "status_pagamento" => "3", "cod_moip" => "001",
+ # "forma_pagamento" => "73", "tipo_pagamento" => "BoletoBancario",
+ # "email_consumidor" => "presidente@planalto.gov.br" }
+ # end
+ #
+ # it "with old api should be deprecated" do
+ # deprecations = collect_deprecations{ MoIP.notification(@param) }
+ #
+ # deprecations.should_not be_empty
+ # deprecations.any? {|w| w =~ /MoIP.notification has been deprecated/ }.should be_true
+ # end
+ #
+ # it "should return a hash with the params extracted from NASP" do
+ # response = { :transaction_id => "Pag62", :amount => "8.90",
+ # :status => "printed", :code => "001",
+ # :payment_type => "BoletoBancario",
+ # :email => "presidente@planalto.gov.br" }
+ #
+ # MoIP::Client.notification(@params).should == response
+ # end
+ #
+ # it "should return valid status based on status code" do
+ # MoIP::STATUS[1].should == "authorized"
+ # MoIP::STATUS[2].should == "started"
+ # MoIP::STATUS[3].should == "printed"
+ # MoIP::STATUS[4].should == "completed"
+ # MoIP::STATUS[5].should == "canceled"
+ # MoIP::STATUS[6].should == "analysing"
+ # end
+ # end
+ #
+ # def id
+ # "transaction_" + Digest::SHA1.hexdigest([Time.now, rand].join)
+ # end
+ #
+ # def token
+ # "T2X0Q1N021E0B2S9U1P0V3Y0G1F570Y2P4M0P000M0Z0F0J0G0U4N6C7W5T9"
+ # end
+ #
+ # def collect_deprecations
+ # old_behavior = ActiveSupport::Deprecation.behavior
+ # deprecations = []
+ # ActiveSupport::Deprecation.behavior = Proc.new do |message, callstack|
+ # deprecations << message
+ # end
+ # result = yield
+ # deprecations
+ # ensure
+ # ActiveSupport::Deprecation.behavior = old_behavior
+ # end
end
-end
Please sign in to comment.
Something went wrong with that request. Please try again.