test/unit/validations_test.rb in cieloz-0.0.16 vs test/unit/validations_test.rb in cieloz-0.0.17

- old
+ new

@@ -15,14 +15,10 @@ it { must_ensure_length_of :nome_portador, is_at_most: 50 } let(:invalid_number) { I18n.t 'activemodel.errors.models.cieloz/requisicao_transacao/dados_portador.attributes.numero.invalid' } - it { must_allow_value :numero, 1234567890123456 } - it { wont_allow_value :numero, 123456789012345, message: invalid_number } - it { wont_allow_value :numero, 12345678901234567, message: invalid_number } - it { wont_allow_value :numero, "ABC4567890123456", message: invalid_number } it { (100..9999).step(123).each {|val| must_allow_value :codigo_seguranca, val } @@ -391,7 +387,45 @@ .class::FormaPagamento.new.parcelado Cieloz::Bandeiras::VISA, 3 refute subject.valid? msg = "Installment should be greater than or equal to R$ 5,00" assert_equal msg, subject.dados_pedido.errors[:valor].first + end + + describe "validates credit card number format" do + after do + Cieloz::Configuracao.reset! + end + + def self.validate_number_of_credit_card_digits_for(flag, digits) + describe flag do + let(:pg) { subject.class::FormaPagamento.new.credito flag } + + before do + Cieloz::Configuracao.store_mode! + subject.forma_pagamento = pg + end + + it "accepts credit card numbers with #{digits} digits" do + subject.dados_portador = subject.class::DadosPortador.new numero: '1' * digits + subject.valid? + subject.dados_portador.errors[:numero].must_be_empty + end + + it "rejects credit card numbers with other formats" do + ['1' * (digits - 1), '1' * (digits + 1), 'ABC4567890123456'].each do |number| + subject.dados_portador = subject.class::DadosPortador.new numero: number + subject.valid? + subject.dados_portador.errors[:numero].wont_be_empty + end + end + end + end + + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::DINERS, 14 + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::AMEX, 15 + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::VISA, 16 + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::MASTERCARD, 16 + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::ELO, 16 + validate_number_of_credit_card_digits_for Cieloz::Bandeiras::DISCOVER, 16 end end