From 7691e212a7fc5bc9fa35b163760885de3b78c7ce Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 23:02:33 +0800 Subject: [PATCH 1/2] feature: providing what is the invalid format Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- lib/aba_file_validator.ex | 58 ++++++++++++++++++++++---------- lib/util.ex | 3 +- test/aba_file_validator_test.exs | 6 ++-- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/lib/aba_file_validator.ex b/lib/aba_file_validator.ex index 194f724..40e7eb8 100644 --- a/lib/aba_file_validator.ex +++ b/lib/aba_file_validator.ex @@ -26,7 +26,7 @@ defmodule AbaFileValidator do {:error, :incorrect_starting_code} iex> AbaFileValidator.get_descriptive_record("0 CBA test 301500221212121227121222 ") - {:error, :invalid_format} + {:error, :invalid_format, [:reel_sequence_number]} iex> AbaFileValidator.get_descriptive_record("0 01CBA test 301500221212121227121222 ") {:ok, "01", "CBA", "test ", "301500", "221212121227", "121222"} @@ -54,22 +54,46 @@ defmodule AbaFileValidator do {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} + with correct_first_blanks <- correct_length?(first_blank, 17), + correct_mid_blanks <- correct_length?(mid_blank, 7), + correct_last_blanks <- correct_length?(last_blank, 40), + reel_sequence_number_empty? <- string_empty?(reel_sequence_number), + bank_abbreviation_empty? <- string_empty?(bank_abbreviation), + user_preferred_specification_empty? <- string_empty?(user_preferred_specification), + user_id_number_empty? <- string_empty?(user_id_number), + description_empty? <- string_empty?(description), + valid_date <- valid_date?(date), + date_empty? <- string_empty?(date) do + errors = [] + + errors = if not correct_first_blanks, do: errors ++ [:first_blank], else: errors + + errors = if not correct_last_blanks, do: errors ++ [:last_blank], else: errors + + errors = if not correct_mid_blanks, do: errors ++ [:mid_blank], else: errors + + errors = + if reel_sequence_number_empty?, do: errors ++ [:reel_sequence_number], else: errors + + errors = if bank_abbreviation_empty?, do: errors ++ [:bank_abbreviation], else: errors + + errors = + if user_preferred_specification_empty?, + do: errors ++ [:user_preferred_specification], + else: errors + + errors = if user_id_number_empty?, do: errors ++ [:user_id_number], else: errors + + errors = if description_empty?, do: errors ++ [:description], else: errors + + errors = if not valid_date or date_empty?, do: errors ++ [:date], else: errors + + if(length(errors) > 0) do + {:error, :invalid_format, errors} + else + {:ok, reel_sequence_number, bank_abbreviation, user_preferred_specification, + user_id_number, description, date} + end end end end diff --git a/lib/util.ex b/lib/util.ex index c996b49..58abf31 100644 --- a/lib/util.ex +++ b/lib/util.ex @@ -1,9 +1,10 @@ defmodule AbaFileValidator.Utils do - def correct_length?(entry,n) when is_binary(entry), do: String.length(entry) == n + 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 diff --git a/test/aba_file_validator_test.exs b/test/aba_file_validator_test.exs index e636a57..811a35e 100644 --- a/test/aba_file_validator_test.exs +++ b/test/aba_file_validator_test.exs @@ -42,7 +42,9 @@ defmodule AbaFileValidatorTest do entry = "0 01CBA test 301500221212121227121222 " - assert AbaFileValidator.get_descriptive_record(entry) == {:ok, "01", "CBA", "test ", "301500", "221212121227", "121222"} + 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 @@ -66,7 +68,7 @@ defmodule AbaFileValidatorTest do "0 CBA test 301500221212121227121222 " assert AbaFileValidator.get_descriptive_record(entry) == - {:error, :invalid_format} + {:error, :invalid_format, [:reel_sequence_number]} end end end From 9b073e07027d225ee0da15d6493dacfa13bed55d Mon Sep 17 00:00:00 2001 From: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> Date: Sat, 1 Apr 2023 23:05:12 +0800 Subject: [PATCH 2/2] chore: updated names Signed-off-by: alt-ctrl-dev <1557519+alt-ctrl-dev@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be16be0..7ac6112 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: CI +name: Unit tests on: push: diff --git a/README.md b/README.md index 59832f1..a77c0d0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # ABA File Validator +[![CI](https://github.com/alt-ctrl-dev/aba_file_validator/actions/workflows/ci.yml/badge.svg)](https://github.com/alt-ctrl-dev/aba_file_validator/actions/workflows/ci.yml) ## Installation