Parser for EDRPOU completed

This commit is contained in:
2024-12-12 01:32:31 -05:00
parent a7692124e9
commit f9a45fb29d
10 changed files with 449 additions and 38 deletions

View File

@@ -23,9 +23,9 @@ defmodule UkraineTaxidEx.CommonsTest do
end
test "handles strings with non-digit characters" do
assert Commons.digits("1-2-3") == [1, 2, 3]
assert Commons.digits("A1B2C3") == [1, 2, 3]
assert Commons.digits("12.34") == [1, 2, 3, 4]
assert Commons.digits("1-2-3", 0, true) == [1, 2, 3]
assert Commons.digits("A1B2C3", 0, true) == [1, 2, 3]
assert Commons.digits("12.34", 0, true) == [1, 2, 3, 4]
end
test "handles empty string" do
@@ -75,6 +75,25 @@ defmodule UkraineTaxidEx.CommonsTest do
end
end
describe "digits_and_check_digit/1" do
test "returns tuple with original digits and check digit" do
assert Commons.digits_and_check_digit([1, 2, 3, 4]) == {[1, 2, 3, 4], 4}
end
test "works with different digit sequences" do
assert Commons.digits_and_check_digit([5, 6, 7, 8]) == {[5, 6, 7, 8], 8}
assert Commons.digits_and_check_digit([9, 0, 1, 2]) == {[9, 0, 1, 2], 2}
end
test "handles single digit list" do
assert Commons.digits_and_check_digit([1]) == {[1], 1}
end
test "handles empty list" do
assert Commons.digits_and_check_digit([]) == {[], nil}
end
end
describe "ok/1" do
test "wraps data in ok tuple" do
assert Commons.ok(123) == {:ok, 123}

View File

@@ -0,0 +1,161 @@
defmodule UkraineTaxidEx.Edrpou.ParserTest do
use ExUnit.Case
alias UkraineTaxidEx.Edrpou
alias UkraineTaxidEx.Edrpou.Parser
doctest UkraineTaxidEx.Edrpou.Parser
describe "parse/2" do
test "successfully parses valid EDRPOU codes (strict cases, correct without normalization)" do
valid_codes = [
"00032112",
"00032129",
"09306278",
"09620081",
"09801546",
"09806443",
"09807595",
"09807750",
"09807862",
"09809192",
"13857564",
"14070197",
"14282829",
"14305909",
"14352406",
"14359845",
"14360080",
"14360506",
"14360570",
"14360920",
"14361575",
"19355562",
"19356610",
"19358784",
"19390819",
"20023569",
"20034231",
"20042839",
"20496061",
"20953647",
"21133352",
"21322127",
"21580639",
"21650966",
"21665382",
"21677333",
"21684818",
"21685166",
"21685485",
"22868414",
"23494714",
"23697280",
"26237202",
"26410155",
"26519933",
"26520688",
"32388371",
"33695095",
"34575675",
"34576883",
"35345213",
"35590956",
"35591059",
"35810511",
"35960913",
"36002395",
"36061927",
"36520434",
"37515069",
"38324133",
"38690683",
"38870739",
"39544699",
"39849797",
"43650988"
]
for code <- valid_codes do
assert {:ok, %Edrpou{code: ^code}} = Parser.parse(code)
end
end
test "successfully parses valid EDRPOU codes (correct with normalization)" do
valid_codes = [
"32112",
"032129",
"0032129",
"9306278",
"9620081",
"9801546",
"9806443",
"9807595",
"13857564",
"14361575",
"19390819",
"22868414",
"34575675",
"35960913",
"36002395",
"36061927",
"43650988"
]
for code <- valid_codes do
leaded_code = String.pad_leading(code, 8, "0")
assert {:ok, %Edrpou{code: ^leaded_code}} = Parser.parse(code, normalize?: true)
end
end
test "successfully parses valid EDRPOU codes (correct after clean from non digit symbols)" do
valid_codes = [
"00-03-21-12",
"00_03_21_29",
"00 03 21 29",
"0930 6278",
"096 200 81",
"09 80 1546",
"09.80.64.43",
"09/80/75/95",
"13 857 564",
"14361575",
"193.908 19",
"22868414",
"345f75u67ck5",
"35960913",
"36002395",
"36061927",
"43650988"
]
for code <- valid_codes do
cleaned_code = String.replace(code, ~r/[^0-9]/, "")
assert {:ok, %Edrpou{code: ^cleaned_code}} =
Parser.parse(code, normalize?: false, clean?: true)
end
end
test "successfully parses valid EDRPOU codes (correct after clean and normalize)" do
valid_codes = [
"-3-21-12",
"0_3_21_29",
" 0003 21 29",
"9306278.",
"96 200 81",
"09 80 1546",
"09.80.64.43",
"09/80/75/95"
]
for code <- valid_codes do
cleaned_and_normalized_code =
code
|> String.replace(~r/[^0-9]/, "")
|> String.pad_leading(8, "0")
assert {:ok, %Edrpou{code: ^cleaned_and_normalized_code}} =
Parser.parse(code, normalize?: true, clean?: true)
end
end
end
end