diff --git a/lib/itax_code/error.rb b/lib/itax_code/error.rb index 3a7f341..2500693 100644 --- a/lib/itax_code/error.rb +++ b/lib/itax_code/error.rb @@ -16,5 +16,6 @@ class Parser InvalidControlInternalNumberError = Class.new(Error) InvalidTaxCodeError = Class.new(Error) NoTaxCodeError = Class.new(Error) + DateTaxCodeError = Class.new(Error) end end diff --git a/lib/itax_code/parser.rb b/lib/itax_code/parser.rb index dbb6796..97c1ee0 100644 --- a/lib/itax_code/parser.rb +++ b/lib/itax_code/parser.rb @@ -84,6 +84,8 @@ def day def birthdate @birthdate ||= Date.parse("#{year}-#{month}-#{day}").to_s + rescue ArgumentError + raise DateTaxCodeError end def birthplace(src = utils.cities, stop: false) diff --git a/test/itax_code/parser_test.rb b/test/itax_code/parser_test.rb index 03792a8..ba12176 100644 --- a/test/itax_code/parser_test.rb +++ b/test/itax_code/parser_test.rb @@ -48,6 +48,12 @@ class ParserTest < Minitest::Test assert_raises(klass::InvalidTaxCodeError) { klass.new(wrong_length_tax_code) } end + test "raises DateTaxCodeError with an invalid date, e.g. 1978-4-31" do + wrong_month_tax_code = "SPENTB78D71D612X" + + assert_raises(klass::DateTaxCodeError) { klass.new(wrong_month_tax_code).decode } + end + test "raises InvalidControlInternalNumberError when the cin differs from the computed one" do tax_code_with_wrong_cin = "CCCFBA85D03L219Z"