Skip to content

Commit

Permalink
Change Ledger.balance/1 to Ledger.is_balance?/1
Browse files Browse the repository at this point in the history
  • Loading branch information
tristanperalta committed Nov 10, 2021
1 parent 5c49201 commit eea8eeb
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 28 deletions.
16 changes: 5 additions & 11 deletions lib/ledger.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,11 @@ defmodule ExLedger.Ledger do
struct!(%__MODULE__{}, attrs)
end

@spec balance(__MODULE__.t()) :: integer()
def balance(%{transactions: transactions} = _ledger) do
transactions
|> Enum.reduce(0, fn totals, acc ->
totals =
totals
|> Transaction.balance()
|> Keyword.values()
|> Enum.sum()

acc + totals
@spec is_balance?(__MODULE__.t()) :: bool()
def is_balance?(%{transactions: transactions} = _ledger) do
Enum.flat_map(transactions, fn txn ->
Keyword.values(txn.balances)
end)
|> Enum.all?(&(&1 == 0))
end
end
18 changes: 15 additions & 3 deletions test/exledger_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,28 @@ defmodule ExledgerTest do
use ExUnit.Case
use ExLedger.LedgerBuilder

test "Ledger.balance/1" do
test "Ledger.is_balance?/1" do
transaction =
Transaction.new(%{description: "Test"})
Transaction.new("test transaction")
|> Transaction.add_entry("assets", {1, :USD})
|> Transaction.add_entry("expensese", {-1, :USD})
|> Transaction.add_entry("assets", {1, :PHP})
|> Transaction.add_entry("expenses", {-1, :PHP})

ledger = Ledger.new(transactions: [transaction])

assert Ledger.balance(ledger) == 0
assert Ledger.is_balance?(ledger)
end

test "Ledger.is_balance?/1 imbalance" do
transaction =
Transaction.new("test transaction")
|> Transaction.add_entry("assets", {1, :USD})
|> Transaction.add_entry("expensese", {-1, :USD})
|> Transaction.add_entry("assets", {1, :PHP})

ledger = Ledger.new(transactions: [transaction])

assert false == Ledger.is_balance?(ledger)
end
end
25 changes: 11 additions & 14 deletions test/transaction_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,28 @@ defmodule Exledger.TransactionTest do
use ExUnit.Case
use ExLedger.LedgerBuilder

test "add_entry" do
test "add_entry/3" do
assert %{balances: [usd: 1]} =
Transaction.new(%{description: "Test"})
Transaction.new("test transaction")
|> Transaction.add_entry("assets", {1, :usd})
end

test "add_entry sum 2 common currency" do
test "add_entry/3 sum 2 common currency" do
assert %{balances: [usd: 6]} =
Transaction.new(%{description: "Test"})
Transaction.new("test transaction")
|> Transaction.add_entry("assets", {1, :usd})
|> Transaction.add_entry("assets", {5, :usd})
end

test "compute balances" do
end

test "Transaction.balance/1" do
transaction =
Transaction.new(%{description: "Test"})
|> Transaction.add_entry("assets", {1, :USD})
|> Transaction.add_entry("expenses", {-1, :USD})
|> Transaction.add_entry("assets", {1, :PHP})
|> Transaction.add_entry("expenses", {-1, :PHP})
|> Transaction.balance()

assert [USD: 0, PHP: 0] == transaction
test "add_entry/3 with multiple currency" do
assert %{balances: [usd: 0, php: 0]} =
Transaction.new("test transaction")
|> Transaction.add_entry("assets", {1, :usd})
|> Transaction.add_entry("expenses", {-1, :usd})
|> Transaction.add_entry("assets", {1, :php})
|> Transaction.add_entry("expenses", {-1, :php})
end
end

0 comments on commit eea8eeb

Please sign in to comment.