From 86925b50bd0ea25f1a7e0d3c7cb7077136a1f063 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 17:45:09 +0800 Subject: [PATCH 01/10] chore: used formatter Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index 577132a..3ddf3b1 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -4,12 +4,25 @@ defmodule AbaFileValidatorTest do test "transaction code description" do assert AbaFileValidator.get_transaction_code_description(11) == :error - assert AbaFileValidator.get_transaction_code_description(13) == "Externally initiated debit items" - assert AbaFileValidator.get_transaction_code_description("13") == "Externally initiated debit items" - assert AbaFileValidator.get_transaction_code_description(50) == "Externally initiated credit items with the exception of those bearing Transaction Codes" - assert AbaFileValidator.get_transaction_code_description("50") == "Externally initiated credit items with the exception of those bearing Transaction Codes" - assert AbaFileValidator.get_transaction_code_description(51) == "Australian Government Security Interest" - assert AbaFileValidator.get_transaction_code_description("51") == "Australian Government Security Interest" + + assert AbaFileValidator.get_transaction_code_description(13) == + "Externally initiated debit items" + + assert AbaFileValidator.get_transaction_code_description("13") == + "Externally initiated debit items" + + assert AbaFileValidator.get_transaction_code_description(50) == + "Externally initiated credit items with the exception of those bearing Transaction Codes" + + assert AbaFileValidator.get_transaction_code_description("50") == + "Externally initiated credit items with the exception of those bearing Transaction Codes" + + assert AbaFileValidator.get_transaction_code_description(51) == + "Australian Government Security Interest" + + assert AbaFileValidator.get_transaction_code_description("51") == + "Australian Government Security Interest" + assert AbaFileValidator.get_transaction_code_description(52) == "Family Allowance" assert AbaFileValidator.get_transaction_code_description("52") == "Family Allowance" assert AbaFileValidator.get_transaction_code_description(53) == "Pay" From dbd83132108d9e4e24fcdef6ed403e7500825eb4 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 17:45:47 +0800 Subject: [PATCH 02/10] test: initial test to validate description record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index 3ddf3b1..4adfa81 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -36,4 +36,13 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.get_transaction_code_description(57) == "Debenture/Note Interest" assert AbaFileValidator.get_transaction_code_description("57") == "Debenture/Note Interest" end + + describe "validate descriptive record entry" do + test "descriptive record entry" do + entry = + "0 01CBA test 301500221212121227121222 " + + assert AbaFileValidator.validate_descriptive_record(entry) == :ok + end + end end From 3dc607f5b6e239903a2c85d5b0a02afc2c65839b Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 19:17:38 +0800 Subject: [PATCH 03/10] test: added fail test Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index 4adfa81..af39add 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -2,7 +2,7 @@ defmodule AbaFileValidatorTest do use ExUnit.Case doctest AbaFileValidator - test "transaction code description" do + test "AbaFileValidator.get_transaction_code_description/1" do assert AbaFileValidator.get_transaction_code_description(11) == :error assert AbaFileValidator.get_transaction_code_description(13) == @@ -37,12 +37,24 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.get_transaction_code_description("57") == "Debenture/Note Interest" end - describe "validate descriptive record entry" do - test "descriptive record entry" do + describe "AbaFileValidator.validate_descriptive_record/1" do + test "validates succesfully" do entry = "0 01CBA test 301500221212121227121222 " assert AbaFileValidator.validate_descriptive_record(entry) == :ok end + + test "returns an error if first character is not zero" do + assert AbaFileValidator.validate_descriptive_record("1") == {:error, :incorrect_length} + end + + test "if first character is not zero" do + entry = + "1 01CBA test 301500221212121227121222 " + + assert AbaFileValidator.validate_descriptive_record(entry) == + {:error, :incorrect_starting_code} + end end end From 9ea71e5987ef34378bb489cbdef7356ec8412325 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 19:39:46 +0800 Subject: [PATCH 04/10] refactor: updated test name Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index af39add..b53e1ac 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -45,11 +45,11 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.validate_descriptive_record(entry) == :ok end - test "returns an error if first character is not zero" do + test "returns an error if incorrect length" do assert AbaFileValidator.validate_descriptive_record("1") == {:error, :incorrect_length} end - test "if first character is not zero" do + test "returns an error if incorrect starting code" do entry = "1 01CBA test 301500221212121227121222 " From 48a21c5941661175e7551b2a4d3d9ba0aba83646 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 20:27:04 +0800 Subject: [PATCH 05/10] feature: added code to validate descriptive record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- lib/aba_file_validator.ex | 55 +++++++++++++++++++++++++++++++++++++-- lib/util.ex | 3 +++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 lib/util.ex diff --git a/lib/aba_file_validator.ex b/lib/aba_file_validator.ex index 683a9c7..81db44c 100644 --- a/lib/aba_file_validator.ex +++ b/lib/aba_file_validator.ex @@ -1,8 +1,54 @@ defmodule AbaFileValidator do + import __MODULE__.Utils, only: [correct_length?: 1] @moduledoc """ Documentation for `AbaFileValidator`. """ + @doc """ + Validates the entry as a descriptive record + + ## Examples + + iex> AbaFileValidator.validate_descriptive_record(1) + {:error, :invalid_input} + + iex> AbaFileValidator.validate_descriptive_record("11") + {:error, :incorrect_length} + + iex> AbaFileValidator.validate_descriptive_record("1 01CBA test 301500221212121227121222 ") + {:error, :incorrect_starting_code} + + iex> AbaFileValidator.validate_descriptive_record("0 01CBA test 301500221212121227121222 ") + :ok + + """ + + def validate_descriptive_record(entry) when is_binary(entry) do + if not correct_length?(entry) do + {:error, :incorrect_length} + else + correct_descriptive_record?(entry) + end + end + + def validate_descriptive_record(_) do + {:error, :invalid_input} + end + + defp correct_descriptive_record?("0"<>entry) do + :ok + end + + defp correct_descriptive_record?(_) do + {:error, :incorrect_starting_code} + end + + + + + + + @doc """ Get a description for a given transaction code @@ -17,8 +63,13 @@ defmodule AbaFileValidator do """ def get_transaction_code_description(13), do: "Externally initiated debit items" def get_transaction_code_description("13"), do: "Externally initiated debit items" - def get_transaction_code_description(50), do: "Externally initiated credit items with the exception of those bearing Transaction Codes" - def get_transaction_code_description("50"), do: "Externally initiated credit items with the exception of those bearing Transaction Codes" + + def get_transaction_code_description(50), + do: "Externally initiated credit items with the exception of those bearing Transaction Codes" + + def get_transaction_code_description("50"), + do: "Externally initiated credit items with the exception of those bearing Transaction Codes" + def get_transaction_code_description(51), do: "Australian Government Security Interest" def get_transaction_code_description("51"), do: "Australian Government Security Interest" def get_transaction_code_description(52), do: "Family Allowance" diff --git a/lib/util.ex b/lib/util.ex new file mode 100644 index 0000000..5d3b0f4 --- /dev/null +++ b/lib/util.ex @@ -0,0 +1,3 @@ +defmodule AbaFileValidator.Utils do + def correct_length?(entry) when is_binary(entry), do: String.length(entry) == 120 +end From cd1d5911d985b6c8253766486cd89d2a33dd9fd1 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:22:00 +0800 Subject: [PATCH 06/10] test: added new test Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index b53e1ac..bef212a 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -56,5 +56,13 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.validate_descriptive_record(entry) == {:error, :incorrect_starting_code} end + + test "returns an error if invalid string" do + entry = + "0 CBA test 301500221212121227121222 " + + assert AbaFileValidator.validate_descriptive_record(entry) == + {:error, :invalid_format} + end end end From 0350f5636ec9297fe121113c30bb02371a3cc657 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:22:40 +0800 Subject: [PATCH 07/10] feat: new method to validate descriptive record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- lib/aba_file_validator.ex | 61 ++++++++++++++++++++++++++++----------- lib/util.ex | 12 +++++++- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/lib/aba_file_validator.ex b/lib/aba_file_validator.ex index 81db44c..c303a0b 100644 --- a/lib/aba_file_validator.ex +++ b/lib/aba_file_validator.ex @@ -1,5 +1,6 @@ defmodule AbaFileValidator do - import __MODULE__.Utils, only: [correct_length?: 1] + import __MODULE__.Utils, only: [correct_length?: 2, string_empty?: 1, valid_date?: 1] + @moduledoc """ Documentation for `AbaFileValidator`. """ @@ -18,37 +19,63 @@ defmodule AbaFileValidator do iex> AbaFileValidator.validate_descriptive_record("1 01CBA test 301500221212121227121222 ") {:error, :incorrect_starting_code} + iex> AbaFileValidator.validate_descriptive_record("0 CBA test 301500221212121227121222 ") + {:error, :invalid_format} + iex> AbaFileValidator.validate_descriptive_record("0 01CBA test 301500221212121227121222 ") :ok """ - def validate_descriptive_record(entry) when is_binary(entry) do - if not correct_length?(entry) do + def validate_descriptive_record(entry) when not is_binary(entry) do + {:error, :invalid_input} + end + + def validate_descriptive_record(entry) do + if not correct_length?(entry, 120) do {:error, :incorrect_length} else - correct_descriptive_record?(entry) + get_descriptive_record?(entry) + |> case do + {:ok, _, _, _, _, _, _} -> :ok + error -> error + end end end - def validate_descriptive_record(_) do - {:error, :invalid_input} - end - - defp correct_descriptive_record?("0"<>entry) do - :ok + def get_descriptive_record?("0" <> entry) do + {first_blank, entry} = String.split_at(entry, 17) + {reel_sequence_number, entry} = String.split_at(entry, 2) + {bank_abbreviation, entry} = String.split_at(entry, 3) + {mid_blank, entry} = String.split_at(entry, 7) + {user_preferred_specification, entry} = String.split_at(entry, 26) + {user_id_number, entry} = String.split_at(entry, 6) + {description, entry} = String.split_at(entry, 12) + {date, last_blank} = String.split_at(entry, 6) + + with true <- correct_length?(first_blank, 17), + true <- correct_length?(mid_blank, 7), + true <- correct_length?(last_blank, 40), + false <- string_empty?(reel_sequence_number), + false <- string_empty?(bank_abbreviation), + false <- string_empty?(user_preferred_specification), + false <- string_empty?(user_id_number), + false <- string_empty?(description), + true <- valid_date?(date), + false <- string_empty?(date) do + {:ok, reel_sequence_number, bank_abbreviation, user_preferred_specification, user_id_number, + description, date} + else + error -> + IO.inspect(error, label: :error) + {:error, :invalid_format} + end end - defp correct_descriptive_record?(_) do + def get_descriptive_record?(_) do {:error, :incorrect_starting_code} end - - - - - - @doc """ Get a description for a given transaction code diff --git a/lib/util.ex b/lib/util.ex index 5d3b0f4..c996b49 100644 --- a/lib/util.ex +++ b/lib/util.ex @@ -1,3 +1,13 @@ defmodule AbaFileValidator.Utils do - def correct_length?(entry) when is_binary(entry), do: String.length(entry) == 120 + def correct_length?(entry,n) when is_binary(entry), do: String.length(entry) == n + def string_empty?(entry) when is_binary(entry), do: String.trim(entry) |> String.length() == 0 + + def valid_date?(<>) do + [yy, mm, dd] = for i <- [yy, mm, dd], do: String.to_integer(i) + NaiveDateTime.new(yy, mm, dd, 0, 0, 0) + |> case do + {:ok, _} -> true + {:error, _} -> false + end + end end From e7225f1225c1cc5da8d51f1ff3a90012f04dfcad Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:36:21 +0800 Subject: [PATCH 08/10] test: added tests to get descriptive record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- test/aba_file_validator_test.exs | 41 ++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index bef212a..3d722db 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -45,8 +45,12 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.validate_descriptive_record(entry) == :ok end - test "returns an error if incorrect length" do - assert AbaFileValidator.validate_descriptive_record("1") == {:error, :incorrect_length} + test "returns an error if incorrect length with correct starting code" do + assert AbaFileValidator.get_descriptive_record("0") == {:error, :incorrect_length} + end + + test "returns an error if incorrect length with incorrect starting code" do + assert AbaFileValidator.get_descriptive_record("1") == {:error, :incorrect_length} end test "returns an error if incorrect starting code" do @@ -65,4 +69,37 @@ defmodule AbaFileValidatorTest do {:error, :invalid_format} end end + + describe "AbaFileValidator.get_descriptive_record/1" do + test "validates succesfully" do + entry = + "0 01CBA test 301500221212121227121222 " + + assert AbaFileValidator.get_descriptive_record(entry) == {:ok, "01", "CBA", "test ", "301500", "221212121227", "121222"} + end + + test "returns an error if incorrect length with correct starting code" do + assert AbaFileValidator.get_descriptive_record("0") == {:error, :incorrect_length} + end + + test "returns an error if incorrect length with incorrect starting code" do + assert AbaFileValidator.get_descriptive_record("1") == {:error, :incorrect_length} + end + + test "returns an error if incorrect starting code" do + entry = + "1 01CBA test 301500221212121227121222 " + + assert AbaFileValidator.get_descriptive_record(entry) == + {:error, :incorrect_starting_code} + end + + test "returns an error if invalid string" do + entry = + "0 CBA test 301500221212121227121222 " + + assert AbaFileValidator.get_descriptive_record(entry) == + {:error, :invalid_format} + end + end end From 4f2cefe0a028d69c8eacbe47f38327fed75ca357 Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:36:44 +0800 Subject: [PATCH 09/10] feature: added code to view descriptive record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- lib/aba_file_validator.ex | 115 ++++++++++++++++++++++++++------------ 1 file changed, 78 insertions(+), 37 deletions(-) diff --git a/lib/aba_file_validator.ex b/lib/aba_file_validator.ex index c303a0b..0c9bf0a 100644 --- a/lib/aba_file_validator.ex +++ b/lib/aba_file_validator.ex @@ -5,6 +5,10 @@ defmodule AbaFileValidator do Documentation for `AbaFileValidator`. """ + @spec validate_descriptive_record(any) :: + :ok + | {:error, + :incorrect_length | :incorrect_starting_code | :invalid_format | :invalid_input} @doc """ Validates the entry as a descriptive record @@ -16,6 +20,9 @@ defmodule AbaFileValidator do iex> AbaFileValidator.validate_descriptive_record("11") {:error, :incorrect_length} + iex> AbaFileValidator.validate_descriptive_record("01") + {:error, :incorrect_length} + iex> AbaFileValidator.validate_descriptive_record("1 01CBA test 301500221212121227121222 ") {:error, :incorrect_starting_code} @@ -32,50 +39,84 @@ defmodule AbaFileValidator do end def validate_descriptive_record(entry) do - if not correct_length?(entry, 120) do - {:error, :incorrect_length} - else - get_descriptive_record?(entry) - |> case do - {:ok, _, _, _, _, _, _} -> :ok - error -> error - end + get_descriptive_record(entry) + |> case do + {:ok, _, _, _, _, _, _} -> :ok + error -> error end end - def get_descriptive_record?("0" <> entry) do - {first_blank, entry} = String.split_at(entry, 17) - {reel_sequence_number, entry} = String.split_at(entry, 2) - {bank_abbreviation, entry} = String.split_at(entry, 3) - {mid_blank, entry} = String.split_at(entry, 7) - {user_preferred_specification, entry} = String.split_at(entry, 26) - {user_id_number, entry} = String.split_at(entry, 6) - {description, entry} = String.split_at(entry, 12) - {date, last_blank} = String.split_at(entry, 6) - - with true <- correct_length?(first_blank, 17), - true <- correct_length?(mid_blank, 7), - true <- correct_length?(last_blank, 40), - false <- string_empty?(reel_sequence_number), - false <- string_empty?(bank_abbreviation), - false <- string_empty?(user_preferred_specification), - false <- string_empty?(user_id_number), - false <- string_empty?(description), - true <- valid_date?(date), - false <- string_empty?(date) do - {:ok, reel_sequence_number, bank_abbreviation, user_preferred_specification, user_id_number, - description, date} - else - error -> - IO.inspect(error, label: :error) - {:error, :invalid_format} - end + @spec get_descriptive_record(binary) :: + {:error, :incorrect_length | :incorrect_starting_code | :invalid_format} + | {:ok, binary(), binary(), binary(), binary(), binary(), binary()} + @doc """ + Get the entries as part of the descriptiive record + + ## Examples + + iex> AbaFileValidator.get_descriptive_record(1) + {:error, :invalid_input} + + iex> AbaFileValidator.get_descriptive_record("11") + {:error, :incorrect_length} + + iex> AbaFileValidator.get_descriptive_record("01") + {:error, :incorrect_length} + + iex> AbaFileValidator.get_descriptive_record("1 01CBA test 301500221212121227121222 ") + {:error, :incorrect_starting_code} + + iex> AbaFileValidator.get_descriptive_record("0 CBA test 301500221212121227121222 ") + {:error, :invalid_format} + + iex> AbaFileValidator.get_descriptive_record("0 01CBA test 301500221212121227121222 ") + {:ok, "01", "CBA", "test ", "301500", "221212121227", "121222"} + + """ + def get_descriptive_record(entry) when not is_binary(entry) do + {:error, :invalid_input} end - def get_descriptive_record?(_) do - {:error, :incorrect_starting_code} + def get_descriptive_record(entry) do + if not correct_length?(entry, 120) do + {:error, :incorrect_length} + else + {code, entry} = String.split_at(entry, 1) + + if code != "0" do + {:error, :incorrect_starting_code} + else + {first_blank, entry} = String.split_at(entry, 17) + {reel_sequence_number, entry} = String.split_at(entry, 2) + {bank_abbreviation, entry} = String.split_at(entry, 3) + {mid_blank, entry} = String.split_at(entry, 7) + {user_preferred_specification, entry} = String.split_at(entry, 26) + {user_id_number, entry} = String.split_at(entry, 6) + {description, entry} = String.split_at(entry, 12) + {date, last_blank} = String.split_at(entry, 6) + + with true <- code == "0", + true <- correct_length?(first_blank, 17), + true <- correct_length?(mid_blank, 7), + true <- correct_length?(last_blank, 40), + false <- string_empty?(reel_sequence_number), + false <- string_empty?(bank_abbreviation), + false <- string_empty?(user_preferred_specification), + false <- string_empty?(user_id_number), + false <- string_empty?(description), + true <- valid_date?(date), + false <- string_empty?(date) do + {:ok, reel_sequence_number, bank_abbreviation, user_preferred_specification, + user_id_number, description, date} + else + _error -> + {:error, :invalid_format} + end + end + end end + @spec get_transaction_code_description(any) :: :error | binary() @doc """ Get a description for a given transaction code From cc01f4aafb593c5eed7ac996bf6314c4c765cf2c Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:37:36 +0800 Subject: [PATCH 10/10] refactor: removed validate method in favour of get_descriptive_record Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- lib/aba_file_validator.ex | 41 -------------------------------- test/aba_file_validator_test.exs | 33 ------------------------- 2 files changed, 74 deletions(-) diff --git a/lib/aba_file_validator.ex b/lib/aba_file_validator.ex index 0c9bf0a..194f724 100644 --- a/lib/aba_file_validator.ex +++ b/lib/aba_file_validator.ex @@ -5,47 +5,6 @@ defmodule AbaFileValidator do Documentation for `AbaFileValidator`. """ - @spec validate_descriptive_record(any) :: - :ok - | {:error, - :incorrect_length | :incorrect_starting_code | :invalid_format | :invalid_input} - @doc """ - Validates the entry as a descriptive record - - ## Examples - - iex> AbaFileValidator.validate_descriptive_record(1) - {:error, :invalid_input} - - iex> AbaFileValidator.validate_descriptive_record("11") - {:error, :incorrect_length} - - iex> AbaFileValidator.validate_descriptive_record("01") - {:error, :incorrect_length} - - iex> AbaFileValidator.validate_descriptive_record("1 01CBA test 301500221212121227121222 ") - {:error, :incorrect_starting_code} - - iex> AbaFileValidator.validate_descriptive_record("0 CBA test 301500221212121227121222 ") - {:error, :invalid_format} - - iex> AbaFileValidator.validate_descriptive_record("0 01CBA test 301500221212121227121222 ") - :ok - - """ - - def validate_descriptive_record(entry) when not is_binary(entry) do - {:error, :invalid_input} - end - - def validate_descriptive_record(entry) do - get_descriptive_record(entry) - |> case do - {:ok, _, _, _, _, _, _} -> :ok - error -> error - end - end - @spec get_descriptive_record(binary) :: {:error, :incorrect_length | :incorrect_starting_code | :invalid_format} | {:ok, binary(), binary(), binary(), binary(), binary(), binary()} diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index 3d722db..e636a57 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -37,39 +37,6 @@ defmodule AbaFileValidatorTest do assert AbaFileValidator.get_transaction_code_description("57") == "Debenture/Note Interest" end - describe "AbaFileValidator.validate_descriptive_record/1" do - test "validates succesfully" do - entry = - "0 01CBA test 301500221212121227121222 " - - assert AbaFileValidator.validate_descriptive_record(entry) == :ok - end - - test "returns an error if incorrect length with correct starting code" do - assert AbaFileValidator.get_descriptive_record("0") == {:error, :incorrect_length} - end - - test "returns an error if incorrect length with incorrect starting code" do - assert AbaFileValidator.get_descriptive_record("1") == {:error, :incorrect_length} - end - - test "returns an error if incorrect starting code" do - entry = - "1 01CBA test 301500221212121227121222 " - - assert AbaFileValidator.validate_descriptive_record(entry) == - {:error, :incorrect_starting_code} - end - - test "returns an error if invalid string" do - entry = - "0 CBA test 301500221212121227121222 " - - assert AbaFileValidator.validate_descriptive_record(entry) == - {:error, :invalid_format} - end - end - describe "AbaFileValidator.get_descriptive_record/1" do test "validates succesfully" do entry =