feat: add service skeleton and tests
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
22d50d6c46
commit
cc6d72b6b1
2 changed files with 286 additions and 0 deletions
128
test/mv/membership/import/member_csv_test.exs
Normal file
128
test/mv/membership/import/member_csv_test.exs
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
defmodule Mv.Membership.Import.MemberCSVTest do
|
||||
use Mv.DataCase, async: false
|
||||
|
||||
alias Mv.Membership.Import.MemberCSV
|
||||
|
||||
describe "Error struct" do
|
||||
test "Error struct exists with required fields" do
|
||||
# This will fail at runtime if the struct doesn't exist
|
||||
# We use struct/2 to create the struct at runtime
|
||||
error =
|
||||
struct(MemberCSV.Error, %{
|
||||
csv_line_number: 5,
|
||||
field: :email,
|
||||
message: "is not a valid email"
|
||||
})
|
||||
|
||||
assert error.csv_line_number == 5
|
||||
assert error.field == :email
|
||||
assert error.message == "is not a valid email"
|
||||
end
|
||||
|
||||
test "Error struct allows nil field" do
|
||||
# This will fail at runtime if the struct doesn't exist
|
||||
error =
|
||||
struct(MemberCSV.Error, %{
|
||||
csv_line_number: 10,
|
||||
field: nil,
|
||||
message: "Row is empty"
|
||||
})
|
||||
|
||||
assert error.csv_line_number == 10
|
||||
assert error.field == nil
|
||||
assert error.message == "Row is empty"
|
||||
end
|
||||
end
|
||||
|
||||
describe "prepare/2" do
|
||||
test "function exists and accepts file_content and opts" do
|
||||
file_content = "email\njohn@example.com"
|
||||
opts = []
|
||||
|
||||
# This will fail until the function is implemented
|
||||
result = MemberCSV.prepare(file_content, opts)
|
||||
assert match?({:ok, _}, result) or match?({:error, _}, result)
|
||||
end
|
||||
|
||||
test "returns {:ok, import_state} on success" do
|
||||
file_content = "email\njohn@example.com"
|
||||
opts = []
|
||||
|
||||
assert {:ok, import_state} = MemberCSV.prepare(file_content, opts)
|
||||
|
||||
# Check that import_state contains expected fields
|
||||
assert Map.has_key?(import_state, :chunks)
|
||||
assert Map.has_key?(import_state, :column_map)
|
||||
assert Map.has_key?(import_state, :custom_field_map)
|
||||
assert Map.has_key?(import_state, :warnings)
|
||||
end
|
||||
|
||||
test "returns {:error, reason} on failure" do
|
||||
file_content = ""
|
||||
opts = []
|
||||
|
||||
assert {:error, _reason} = MemberCSV.prepare(file_content, opts)
|
||||
end
|
||||
|
||||
test "function has documentation" do
|
||||
# Check that @doc exists by reading the module
|
||||
assert function_exported?(MemberCSV, :prepare, 2)
|
||||
end
|
||||
end
|
||||
|
||||
describe "process_chunk/3" do
|
||||
test "function exists and accepts chunk_rows_with_lines, column_map, and opts" do
|
||||
chunk_rows_with_lines = [{2, %{"email" => "john@example.com"}}]
|
||||
column_map = %{email: 0}
|
||||
opts = []
|
||||
|
||||
# This will fail until the function is implemented
|
||||
result = MemberCSV.process_chunk(chunk_rows_with_lines, column_map, opts)
|
||||
assert match?({:ok, _}, result) or match?({:error, _}, result)
|
||||
end
|
||||
|
||||
test "returns {:ok, chunk_result} on success" do
|
||||
chunk_rows_with_lines = [{2, %{"email" => "john@example.com"}}]
|
||||
column_map = %{email: 0}
|
||||
opts = []
|
||||
|
||||
assert {:ok, chunk_result} =
|
||||
MemberCSV.process_chunk(chunk_rows_with_lines, column_map, opts)
|
||||
|
||||
# Check that chunk_result contains expected fields
|
||||
assert Map.has_key?(chunk_result, :inserted)
|
||||
assert Map.has_key?(chunk_result, :failed)
|
||||
assert Map.has_key?(chunk_result, :errors)
|
||||
assert is_integer(chunk_result.inserted)
|
||||
assert is_integer(chunk_result.failed)
|
||||
assert is_list(chunk_result.errors)
|
||||
end
|
||||
|
||||
test "returns {:error, reason} on failure" do
|
||||
chunk_rows_with_lines = []
|
||||
column_map = %{}
|
||||
opts = []
|
||||
|
||||
# This might return {:ok, _} with zero counts or {:error, _}
|
||||
result = MemberCSV.process_chunk(chunk_rows_with_lines, column_map, opts)
|
||||
assert match?({:ok, _}, result) or match?({:error, _}, result)
|
||||
end
|
||||
|
||||
test "function has documentation" do
|
||||
# Check that @doc exists by reading the module
|
||||
assert function_exported?(MemberCSV, :process_chunk, 3)
|
||||
end
|
||||
end
|
||||
|
||||
describe "module documentation" do
|
||||
test "module has @moduledoc" do
|
||||
# Check that the module exists and has documentation
|
||||
assert Code.ensure_loaded?(MemberCSV)
|
||||
|
||||
# Try to get the module documentation
|
||||
{:docs_v1, _, _, _, %{"en" => moduledoc}, _, _} = Code.fetch_docs(MemberCSV)
|
||||
assert is_binary(moduledoc)
|
||||
assert String.length(moduledoc) > 0
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue