# encoding: utf-8
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe BraspagPagador::Connection do
let(:merchant_id) { "{12345678-1234-1234-1234-123456789000}" }
let(:connection) { BraspagPagador::Connection.new(:merchant_id => merchant_id, :environment => :homologation)}
context ".generate_billet" do
it "should return response" do
generate_billet = {
:status => "1",
:message => "BLA",
:number => "12345"
}
connection.should_receive(:post).and_return(generate_billet)
response = connection.generate_billet(mock, mock)
response.success?.should eq(false)
response.message.should eq(generate_billet[:message])
response.authorization.should eq(generate_billet[:number])
response.params.should eq({"status"=>"1", "message"=>"BLA", "number"=>"12345"})
response.test.should eq(true)
end
it "should return success when status is zero" do
generate_billet = {
:status => "0",
:message => "BLA",
:number => "12345"
}
connection.should_receive(:post).and_return(generate_billet)
response = connection.generate_billet(mock, mock)
response.success?.should eq(true)
end
end
end
describe BraspagPagador::Billet do
context "on generate" do
it "should allow blank for id" do
subject.id = ''
subject.valid?(:generate)
subject.errors.messages[:id].should be(nil)
end
it "should validate maximum 255 length of id" do
subject.id = '*' * 260
subject.valid?(:generate)
subject.errors.messages[:id].should include("is too long (maximum is 255 characters)")
end
it "should allow blank for instructions" do
subject.instructions = ''
subject.valid?(:generate)
subject.errors.messages[:instructions].should be(nil)
end
it "should validate maximum 512 length of instructions" do
subject.instructions = '*' * 520
subject.valid?(:generate)
subject.errors.messages[:instructions].should include("is too long (maximum is 512 characters)")
end
it "should not allow blank for due_date_on" do
subject.due_date_on = ''
subject.valid?(:generate)
subject.errors.messages[:due_date_on].should include("can't be blank")
end
it "should not allow invalid date for due_date_on" do
subject.due_date_on = '12345'
subject.valid?(:generate)
subject.errors.messages[:due_date_on].should include("invalid date")
end
it "should allow date for due_date_on" do
subject.due_date_on = Date.parse('07/03/1988')
subject.valid?(:generate)
subject.errors.messages[:due_date_on].should be(nil)
end
end
context "on generate billet" do
let(:merchant_id) { "{12345678-1234-1234-1234-123456789000}" }
let(:connection) { BraspagPagador::Connection.new(:merchant_id => merchant_id, :environment => :homologation)}
let(:customer) do
BraspagPagador::Customer.new(
:document => '21473696240', # (OPTIONAL)
:name => 'Bob Dela Bobsen',
:email => 'bob@mailinator.com' # send email to consumer (OPTIONAL)
)
end
let(:order) do
BraspagPagador::Order.new(
:id => "um order id",
:amount => 100.00,
:payment_method => BraspagPagador::PAYMENT_METHOD[:billet_bradesco],
:customer => customer
)
end
let(:billet) do
BraspagPagador::Billet.new(
:id => '123456',
:instructions => 'does not accepted after due date',
:due_date_on => Date.parse('2012-01-01')
)
end
let(:url) { "https://homologacao.pagador.com.br/pagador/reenvia.asp?Id_Transacao=722934be-6756-477a-87ab-42115ee1424d" }
let(:valid_xml) do
<<-EOXML
3.00
123123
2012-01-08T00:00:00
https://homologacao.pagador.com.br/pagador/reenvia.asp?Id_Transacao=722934be-6756-477a-87ab-42115ee1424d
0
0
EOXML
end
let(:invalid_xml) do
<<-EOXML
1
Invalid merchantId
EOXML
end
it "should convert objects to hash" do
BraspagPagador::Billet.to_generate_billet(connection, order, billet).should eq({
"merchantId" => connection.merchant_id,
"boletoNumber" => billet.id.to_s,
"instructions" => billet.instructions.to_s,
"expirationDate" => billet.due_date_on.strftime("%d/%m/%y"),
"customerName" => order.customer.name.to_s,
"customerIdNumber" => order.customer.document.to_s,
"emails" => order.customer.email.to_s,
"orderId" => order.id.to_s,
"amount" => BraspagPagador::Converter::decimal_to_string(order.amount),
"paymentMethod" => order.payment_method
})
end
it "should convert response from xml" do
resp = BraspagPagador::Billet.from_generate_billet(connection, order, billet, mock(:body => valid_xml))
billet.url.should eq(url)
order.gateway_return_code.should eq('0')
order.gateway_status.should eq('0')
order.gateway_amount.should eq(3.00)
resp.should eq({
:url => url,
:amount => "3.00",
:number => "123123",
:expiration_date => Date.parse('2012-01-08'),
:return_code => "0",
:status => "0",
:message => nil
})
end
it "should convert response from xml with invalid date" do
resp = BraspagPagador::Billet.from_generate_billet(connection, order, billet, mock(:body => invalid_xml))
billet.url.should eq(nil)
order.gateway_return_code.should eq('1')
order.gateway_status.should eq(nil)
order.gateway_amount.should eq(nil)
resp.should eq({
:url => nil,
:amount => nil,
:number => nil,
:expiration_date => nil,
:return_code => "1",
:status => nil,
:message => "Invalid merchantId"
})
end
end
end