Skip to content

Commit

Permalink
More tests in suite
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrofurtado committed Jun 23, 2021
1 parent 132efe4 commit 957908d
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 20 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pix.merchant_name = 'William Costa'
pix.merchant_city = 'SAO PAULO'
pix.transaction_id = 'WDEV1234'
pix.amount = '100.00'
pix.repeatable = false

puts pix.payload
puts pix.base64
Expand Down
24 changes: 18 additions & 6 deletions lib/qrcode_pix_ruby/payload.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
module QrcodePixRuby
class Payload
ID_PAYLOAD_FORMAT_INDICATOR = '00'.freeze
ID_POINT_OF_INITIATION_METHOD = '01'.freeze
ID_MERCHANT_ACCOUNT_INFORMATION = '26'.freeze
ID_MERCHANT_ACCOUNT_INFORMATION_GUI = '00'.freeze
ID_MERCHANT_ACCOUNT_INFORMATION_KEY = '01'.freeze
Expand All @@ -13,12 +14,17 @@ class Payload
ID_COUNTRY_CODE = '58'.freeze
ID_MERCHANT_NAME = '59'.freeze
ID_MERCHANT_CITY = '60'.freeze
ID_POSTAL_CODE = '61'.freeze
ID_ADDITIONAL_DATA_FIELD_TEMPLATE = '62'.freeze
ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID = '05'.freeze
ID_CRC16 = '63'.freeze

attr_accessor :pix_key,
:repeatable,
:currency,
:country_code,
:description,
:postal_code,
:merchant_name,
:merchant_city,
:transaction_id,
Expand All @@ -28,13 +34,15 @@ def payload
p = ''

p += emv(ID_PAYLOAD_FORMAT_INDICATOR, '01')
p += emv_repeatable
p += emv_merchant
p += emv(ID_MERCHANT_CATEGORY_CODE, '0000')
p += emv(ID_TRANSACTION_CURRENCY, '986')
p += emv(ID_TRANSACTION_AMOUNT, amount)
p += emv(ID_COUNTRY_CODE, 'BR')
p += emv(ID_TRANSACTION_CURRENCY, currency || '986')
p += emv(ID_TRANSACTION_AMOUNT, amount) if amount
p += emv(ID_COUNTRY_CODE, country_code || 'BR')
p += emv(ID_MERCHANT_NAME, merchant_name)
p += emv(ID_MERCHANT_CITY, merchant_city)
p += emv(ID_POSTAL_CODE, postal_code) if postal_code
p += emv_additional_data

p + crc16(p)
Expand All @@ -51,16 +59,20 @@ def emv(id, value)
"#{id}#{size}#{value}"
end

def emv_repeatable
emv(ID_POINT_OF_INITIATION_METHOD, repeatable ? '12' : '11')
end

def emv_merchant
merchant_gui = emv ID_MERCHANT_ACCOUNT_INFORMATION_GUI, 'br.gov.bcb.pix'
merchant_gui = emv ID_MERCHANT_ACCOUNT_INFORMATION_GUI, 'BR.GOV.BCB.PIX'
merchant_pix_key = emv ID_MERCHANT_ACCOUNT_INFORMATION_KEY, pix_key
merchant_description = emv ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION, description
merchant_description = emv(ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION, description) if description

emv ID_MERCHANT_ACCOUNT_INFORMATION, "#{merchant_gui}#{merchant_pix_key}#{merchant_description}"
end

def emv_additional_data
txid = emv(ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID, transaction_id)
txid = emv(ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID, transaction_id || '***')
emv ID_ADDITIONAL_DATA_FIELD_TEMPLATE, txid
end

Expand Down
92 changes: 78 additions & 14 deletions spec/qrcode_pix_ruby_spec.rb
Original file line number Diff line number Diff line change
@@ -1,28 +1,92 @@
# frozen_string_literal: true

RSpec.describe QrcodePixRuby do
it 'has a valid version number' do
expect(QrcodePixRuby::VERSION).not_to be nil
expect(QrcodePixRuby::VERSION).to match /^[0-9]+\.[0-9]+\.[0-9]+$/
it 'QRCode - Base64'

it 'QRCode - Payload - 01 - Basic' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO62070503***6304BCD7'
end

it 'QRCode - Payload - 02 - Currency' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.currency = '986'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO62070503***6304BCD7'
end

it 'QRCode - Payload - 03 - Value' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.amount = '100.99'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865406100.995802BR5913Fulano de Tal6009SAO PAULO62070503***6304B432'
end

it 'QRCode - Payload - 04 - Country code' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.country_code = 'BR'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO62070503***6304BCD7'
end

it 'QRCode - Payload - 05 - Postal code' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.postal_code = '85000100'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO61088500010062070503***6304558C'
end

it 'generates default payload and base64, when nothing is defined' do
it 'QRCode - Payload - 06 - Transaction ID' do
pix = QrcodePixRuby::Payload.new
expect(pix.payload).to eq '00020126260014br.gov.bcb.pix0100020052040000530398654005802BR5900600062040500630462E0'
expect(pix.base64).to eq ''

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.transaction_id = 'my_transaction_id'

expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO62210517my_transaction_id63046247'
end

it 'QRCode - Payload - 07 - Description' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.description = 'is my message :)'

expect(pix.payload).to eq '[email protected] my message :)5204000053039865802BR5913Fulano de Tal6009SAO PAULO62070503***6304A39D'
end

it 'generates valids payloads and base64' do
it 'QRCode - Payload - 08 - Repeatable' do
pix = QrcodePixRuby::Payload.new

pix.pix_key = '12345678900'
pix.description = 'Pagamento do pedido 123456'
pix.merchant_name = 'William Costa'
pix.pix_key = '[email protected]'
pix.merchant_name = 'Fulano de Tal'
pix.merchant_city = 'SAO PAULO'
pix.transaction_id = 'WDEV1234'
pix.amount = '100.00'
pix.repeatable = false

expect(pix.payload).to eq '00020126630014br.gov.bcb.pix0111123456789000226Pagamento do pedido 1234565204000053039865406100.005802BR5913William Costa6009SAO PAULO62120508WDEV12346304E9BF'
expect(pix.base64).to eq ''
expect(pix.payload).to eq '00020101021126380014BR.GOV.BCB.PIX0116test@mail.com.br5204000053039865802BR5913Fulano de Tal6009SAO PAULO62070503***6304BCD7'
end
end

0 comments on commit 957908d

Please sign in to comment.