Created
December 18, 2014 08:15
-
-
Save loriculberson/05356f2d60ad4176e52d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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