Skip to content

Instantly share code, notes, and snippets.

@loriculberson
Created December 18, 2014 08:15
Show Gist options
  • Select an option

  • Save loriculberson/05356f2d60ad4176e52d to your computer and use it in GitHub Desktop.

Select an option

Save loriculberson/05356f2d60ad4176e52d to your computer and use it in GitHub Desktop.
class CreditCard
def validate(value)
card_num = value.to_s
if card_num.empty?
false
else
card_num.chars
.map(&:to_i).reverse
.map.with_index {|num, index| index.odd? ? num * 2 : num }
.map {|num| num > 9 ? num - 9 : num }
.reduce(:+) % 10 == 0 ? true : false
end
end
end
require 'minitest/autorun'
require 'minitest/pride'
require_relative 'credit_card3'
class CreditCardTest < Minitest::Test
def setup
@card_num = CreditCard.new
end
def test_empty_string_is_invalid_credit_card
result = @card_num.validate("")
refute result
end
def test_zero_is_valid_credit_card
result = @card_num.validate("0")
assert result
end
def test_one_is_not_a_valid_credit_card
result = @card_num.validate("1")
refute result
end
def test_42_is_not_a_valid_credit_card
result = @card_num.validate("42")
assert result
end
def test_42_integer_is_a_valid_credit_card
result = @card_num.validate(42)
assert result
end
def test_4242_is_a_valid_credit_card
result = @card_num.validate("4242")
assert result
end
def test_59_is_a_valid_credit_card
result = @card_num.validate("59")
assert result
end
def test_4024007106512380_integer_is_a_invalid_credit_card
result = @card_num.validate(4024007106512380)
refute result
end
def test_5541801923795240_integer_is_a_invalid_credit_card
result = @card_num.validate(5541801923795240)
refute result
end
def test_6011797668868728_integer_is_a_invalid_credit_card
result = @card_num.validate(6011797668868728)
refute result
end
def test_5541808923795240_integer_is_a_valid_credit_card
result = @card_num.validate(5541808923795240)
assert result
end
def test_4024007136512380_integer_is_a_valid_credit_card
result = @card_num.validate(4024007136512380)
assert result
end
def test_6011797668868728_integer_is_a_valid_credit_card
result = @card_num.validate(6011797668867828)
assert result
end
def test_amex_card_342804633855673_is_a_valid_credit_card
result = @card_num.validate(6011797668867828)
assert result
end
def test_amex_card_342801633855673_is_an_invalid_string_credit_card
result = @card_num.validate("342801633855673")
refute result
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment