diff --git a/apps/admin_app/lib/admin_app_web/controllers/shipping_policy_controller.ex b/apps/admin_app/lib/admin_app_web/controllers/shipping_policy_controller.ex
index 217268a64..43117f394 100644
--- a/apps/admin_app/lib/admin_app_web/controllers/shipping_policy_controller.ex
+++ b/apps/admin_app/lib/admin_app_web/controllers/shipping_policy_controller.ex
@@ -5,6 +5,7 @@ defmodule AdminAppWeb.ShippingPolicyController do
alias Snitch.Core.Tools.MultiTenancy.Repo
alias Snitch.Data.Schema.ShippingCategory
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
alias Snitch.Data.Model.ShippingCategory, as: ScModel
@defaults Application.get_env(:snitch_core, :defaults_module)
@@ -66,7 +67,7 @@ defmodule AdminAppWeb.ShippingPolicyController do
end
def set_shipping_amount(rules) do
- {:ok, currency} = @defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
Enum.map(rules, fn rule ->
amount = rule["shipping_cost"] || "0.00"
diff --git a/apps/admin_app/lib/admin_app_web/templates/general_settings/_form.html.eex b/apps/admin_app/lib/admin_app_web/templates/general_settings/_form.html.eex
index 6e41831c0..c87f7c474 100644
--- a/apps/admin_app/lib/admin_app_web/templates/general_settings/_form.html.eex
+++ b/apps/admin_app/lib/admin_app_web/templates/general_settings/_form.html.eex
@@ -1,8 +1,7 @@
GENERAL SETTINGS
- <%= form_for @changeset, @action, [as: :settings, id: "settings-form", method: @method, multipart: true], fn f -> %>
-
+ <%= form_for @changeset, @action, [as: :settings, id: "settings-form", method: @method, multipart: true], fn f -> %>
<%= input f, :name, nil, is_horizontal: true, description: "Name for the store." %>
@@ -22,7 +21,15 @@
<%= input f, :hosted_payment_url, nil, is_horizontal: true, description: "Payment URL for the store." %>
<%= if @changeset.data.image != nil do %>
diff --git a/apps/admin_app/lib/admin_app_web/templates/product/form.html.eex b/apps/admin_app/lib/admin_app_web/templates/product/form.html.eex
index bcef97320..5b6b2785a 100644
--- a/apps/admin_app/lib/admin_app_web/templates/product/form.html.eex
+++ b/apps/admin_app/lib/admin_app_web/templates/product/form.html.eex
@@ -52,7 +52,7 @@
@@ -66,7 +66,7 @@
diff --git a/apps/admin_app/lib/admin_app_web/views/general_settings_view.ex b/apps/admin_app/lib/admin_app_web/views/general_settings_view.ex
index 4c04ed8f2..d18b57c3f 100644
--- a/apps/admin_app/lib/admin_app_web/views/general_settings_view.ex
+++ b/apps/admin_app/lib/admin_app_web/views/general_settings_view.ex
@@ -1,8 +1,13 @@
defmodule AdminAppWeb.GeneralSettingsView do
use AdminAppWeb, :view
alias Snitch.Data.Model.ProductBrand
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
def get_image_url(image, general_settings) do
ProductBrand.image_url(image.name, general_settings)
end
+
+ def get_currency() do
+ GCModel.get_currency_list()
+ end
end
diff --git a/apps/admin_app/lib/admin_app_web/views/layout_view.ex b/apps/admin_app/lib/admin_app_web/views/layout_view.ex
index 65b129414..00a59cea5 100644
--- a/apps/admin_app/lib/admin_app_web/views/layout_view.ex
+++ b/apps/admin_app/lib/admin_app_web/views/layout_view.ex
@@ -1,7 +1,8 @@
defmodule AdminAppWeb.LayoutView do
use AdminAppWeb, :view
alias AdminAppWeb.Guardian
- alias Snitch.Data.Schema.{GeneralConfiguration, Taxonomy}
+ alias Snitch.Data.Schema.GeneralConfiguration, as: GC
+ alias Snitch.Data.Schema.Taxonomy
alias Snitch.Core.Tools.MultiTenancy.Repo
alias AdminAppWeb.Helpers
@@ -35,8 +36,11 @@ defmodule AdminAppWeb.LayoutView do
|> Enum.at(0)
end
- def check_general_settings() do
- Repo.all(GeneralConfiguration) |> List.first()
+ def check_general_settings do
+ case Repo.one(GC) do
+ nil -> false
+ _ -> true
+ end
end
def get_default_taxonomy() do
diff --git a/apps/admin_app/lib/admin_app_web/views/product_view.ex b/apps/admin_app/lib/admin_app_web/views/product_view.ex
index b5b15f932..0e60028cc 100644
--- a/apps/admin_app/lib/admin_app_web/views/product_view.ex
+++ b/apps/admin_app/lib/admin_app_web/views/product_view.ex
@@ -5,11 +5,10 @@ defmodule AdminAppWeb.ProductView do
alias Snitch.Core.Tools.MultiTenancy.Repo
alias Snitch.Domain.Taxonomy
- alias Snitch.Data.Model.{Product, ProductProperty, Property, StockItem}
+ alias Snitch.Data.Model.{GeneralConfiguration, Product, ProductProperty, Property, StockItem}
alias Snitch.Data.Schema
import Ecto.Query
- @currencies ["USD", "INR"]
@dummy_image_url "/images/empty-img.png"
@search_keys ["rummage", "search", "state", "search_term"]
@sort_field_keys ["rummage", "sort", "field"]
@@ -76,17 +75,13 @@ defmodule AdminAppWeb.ProductView do
conn.params["taxon"]
end
- def get_currency_value(nil) do
- @currencies |> List.first()
- end
-
- def get_currency_value(money) do
- money.currency
+ def get_currency_value() do
+ GeneralConfiguration.fetch_currency()
end
# TODO This needs to fetched from config
def get_currency() do
- @currencies
+ [GeneralConfiguration.fetch_currency()]
end
def get_image_url(image, product) do
diff --git a/apps/snitch_api/lib/snitch_api_web/controllers/hosted_payment_controller.ex b/apps/snitch_api/lib/snitch_api_web/controllers/hosted_payment_controller.ex
index 66528dc77..a43b6ec1f 100644
--- a/apps/snitch_api/lib/snitch_api_web/controllers/hosted_payment_controller.ex
+++ b/apps/snitch_api/lib/snitch_api_web/controllers/hosted_payment_controller.ex
@@ -1,5 +1,6 @@
defmodule SnitchApiWeb.HostedPaymentController do
use SnitchApiWeb, :controller
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
alias SnitchApi.Payment.HostedPayment
alias SnitchPayments
alias SnitchPayments.Gateway.{PayuBiz, RazorPay, Stripe}
@@ -39,7 +40,8 @@ defmodule SnitchApiWeb.HostedPaymentController do
def stripe_purchase(conn, params) do
## TODO get the currency set for store here and use that.
- amount = Money.new!(:USD, params["amount"])
+ currency = GCModel.fetch_currency()
+ amount = Money.new!(currency, params["amount"])
preferences = HostedPayment.get_payment_preferences(params["payment_method_id"])
secret = preferences[:credentials]["secret_key"]
request_params = stripe_params_setup(params)
diff --git a/apps/snitch_core/lib/core/data/model/general_configuration.ex b/apps/snitch_core/lib/core/data/model/general_configuration.ex
index 98992568f..55051085d 100644
--- a/apps/snitch_core/lib/core/data/model/general_configuration.ex
+++ b/apps/snitch_core/lib/core/data/model/general_configuration.ex
@@ -10,6 +10,21 @@ defmodule Snitch.Data.Model.GeneralConfiguration do
alias Snitch.Tools.Helper.ImageUploader
alias Ecto.Multi
+ @currency_list ["USD", "INR", "GDP", "EUR"]
+
+ @spec fetch_currency() :: String.t()
+ def fetch_currency do
+ case Repo.one(GC) do
+ nil -> "USD"
+ gc -> gc.currency
+ end
+ end
+
+ @spec get_currency_list() :: List.t()
+ def get_currency_list do
+ @currency_list
+ end
+
@spec build_general_configuration(map) :: Ecto.Changeset.t()
def build_general_configuration(attrs \\ %{}) do
%GC{} |> GC.create_changeset(attrs)
diff --git a/apps/snitch_core/lib/core/domain/order/order.ex b/apps/snitch_core/lib/core/domain/order/order.ex
index f03aec374..c9d86d107 100644
--- a/apps/snitch_core/lib/core/domain/order/order.ex
+++ b/apps/snitch_core/lib/core/domain/order/order.ex
@@ -11,7 +11,7 @@ defmodule Snitch.Domain.Order do
import Ecto.Query
alias Snitch.Data.Schema.{Order, Package, Payment}
alias Snitch.Data.Model.Product
- alias Snitch.Tools.Defaults
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
@spec validate_change(Ecto.Changeset.t()) :: Ecto.Changeset.t()
def validate_change(%{valid?: false} = changeset), do: changeset
@@ -38,7 +38,7 @@ defmodule Snitch.Domain.Order do
"""
@spec payments_total(Order.t(), String.t()) :: Money.t()
def payments_total(order, payment_state) do
- {:ok, currency} = Defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
query =
from(
@@ -76,7 +76,7 @@ defmodule Snitch.Domain.Order do
def total_amount(%Order{} = order) do
order = Repo.preload(order, [:line_items, packages: :items])
- {:ok, currency} = Defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
total =
Money.add!(
@@ -88,7 +88,7 @@ defmodule Snitch.Domain.Order do
end
def line_item_total(order) do
- {:ok, currency} = Defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
order.line_items
|> Enum.reduce(Money.new(currency, 0), fn line_item, acc ->
@@ -130,7 +130,7 @@ defmodule Snitch.Domain.Order do
end
def total_tax(packages) do
- {:ok, currency} = Defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
packages
|> Enum.reduce(Money.new(currency, 0), fn %{
@@ -146,7 +146,7 @@ defmodule Snitch.Domain.Order do
end
def shipping_total(packages) do
- {:ok, currency} = Defaults.fetch(:currency)
+ currency = GCModel.fetch_currency()
packages
|> Enum.reduce(Money.new(currency, 0), fn %{cost: cost}, acc ->
diff --git a/apps/snitch_core/lib/core/domain/package.ex b/apps/snitch_core/lib/core/domain/package.ex
index 7692b3b6d..25a957f97 100644
--- a/apps/snitch_core/lib/core/domain/package.ex
+++ b/apps/snitch_core/lib/core/domain/package.ex
@@ -12,6 +12,7 @@ defmodule Snitch.Domain.Package do
alias Snitch.Domain.ShippingCalculator
alias Snitch.Tools.Money, as: MoneyTools
alias Snitch.Data.Model.StockItem
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
@doc """
Saves
@@ -23,8 +24,10 @@ defmodule Snitch.Domain.Package do
# if we can't find the selected shipping method, we must force the
# Packge.update to fail
# Eventually replace with some nice API contract/validator.
+ currency = GCModel.fetch_currency()
+
shipping_method =
- Enum.find(package.shipping_methods, %{cost: Money.zero(:INR), id: nil}, fn %{id: id} ->
+ Enum.find(package.shipping_methods, %{cost: Money.zero(currency), id: nil}, fn %{id: id} ->
id == shipping_method_id
end)
diff --git a/apps/snitch_core/lib/core/domain/shipping_calculator.ex b/apps/snitch_core/lib/core/domain/shipping_calculator.ex
index 976bd0a65..21845e771 100644
--- a/apps/snitch_core/lib/core/domain/shipping_calculator.ex
+++ b/apps/snitch_core/lib/core/domain/shipping_calculator.ex
@@ -8,10 +8,9 @@ defmodule Snitch.Domain.ShippingCalculator do
alias Snitch.Core.Tools.MultiTenancy.Repo
alias Snitch.Domain.Order, as: OrderDomain
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
alias Snitch.Data.Schema.{Order, Package}
- @defaults Application.get_env(:snitch_core, :defaults_module)
-
@doc """
Returns the `shipping_cost` for a `package`.
@@ -52,7 +51,7 @@ defmodule Snitch.Domain.ShippingCalculator do
active_rules = get_category_active_rules(package.shipping_category)
- {:ok, currency_code} = @defaults.fetch(:currency)
+ currency_code = GCModel.fetch_currency()
cost = Money.new!(currency_code, 0)
# The piping here is in the order of priority,
diff --git a/apps/snitch_core/lib/core/tools/mailer/order_confirmation_email.ex b/apps/snitch_core/lib/core/tools/mailer/order_confirmation_email.ex
index 17af82c53..fb9145a71 100644
--- a/apps/snitch_core/lib/core/tools/mailer/order_confirmation_email.ex
+++ b/apps/snitch_core/lib/core/tools/mailer/order_confirmation_email.ex
@@ -30,6 +30,7 @@ defmodule Snitch.Tools.OrderEmail do
user_email = order.user.email
logo = if general_config.image != nil, do: general_config.image.name, else: nil
+
mail_template =
order_email(%{
order: order,
@@ -40,6 +41,7 @@ defmodule Snitch.Tools.OrderEmail do
})
store_name = general_config.name
+
email =
new_email()
|> to(user_email)
diff --git a/apps/snitch_core/lib/core/tools/money.ex b/apps/snitch_core/lib/core/tools/money.ex
index 589106d1a..a34ae4508 100644
--- a/apps/snitch_core/lib/core/tools/money.ex
+++ b/apps/snitch_core/lib/core/tools/money.ex
@@ -2,8 +2,7 @@ defmodule Snitch.Tools.Money do
@moduledoc """
Some (weak) helpers to work with zeroes and `Money.t`.
"""
-
- @defaults Application.get_env(:snitch_core, :defaults_module)
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
@doc """
Returns the zero `Money.t` with `currency`.
@@ -20,10 +19,8 @@ defmodule Snitch.Tools.Money do
def zero(currency \\ nil)
def zero(nil) do
- case @defaults.fetch(:currency) do
- {:ok, default_currency} -> Money.zero(default_currency)
- error -> error
- end
+ currency = GCModel.fetch_currency()
+ Money.zero(currency)
end
def zero(currency) when is_atom(currency) or is_binary(currency) do
@@ -34,8 +31,7 @@ defmodule Snitch.Tools.Money do
Returns the zero `Money.t` with `currency`.
If `currency` is not passed,
- * attempts to fetch default currency from application config.
- * if default currency is not set, raises a `Money.UnkownCurrencyError`
+ * attempts to fetch default currency from the general settings.
## Note
Makes use of `Money.new!/2` and this function can `raise`.
@@ -44,10 +40,8 @@ defmodule Snitch.Tools.Money do
def zero!(currency \\ nil)
def zero!(nil) do
- case @defaults.fetch(:currency) do
- {:ok, default_currency} -> Money.new!(0, default_currency)
- {:error, msg} -> raise(RuntimeError, msg)
- end
+ currency = GCModel.fetch_currency()
+ Money.zero(currency)
end
def zero!(currency) when is_atom(currency) or is_binary(currency) do
diff --git a/apps/snitch_core/priv/repo/seed/general_configuration.ex b/apps/snitch_core/priv/repo/seed/general_configuration.ex
new file mode 100644
index 000000000..787510de0
--- /dev/null
+++ b/apps/snitch_core/priv/repo/seed/general_configuration.ex
@@ -0,0 +1,9 @@
+defmodule Snitch.Seed.GeneralConfiguration do
+ alias Snitch.Data.Schema.GeneralConfiguration, as: GCSchema
+ alias Snitch.Core.Tools.MultiTenancy.Repo
+
+ def seed!() do
+ Repo.delete_all(GCSchema)
+ %GCSchema{currency: "USD"} |> Repo.insert()
+ end
+end
diff --git a/apps/snitch_core/priv/repo/seed/option_types.ex b/apps/snitch_core/priv/repo/seed/option_types.ex
index cc4903b16..497273241 100644
--- a/apps/snitch_core/priv/repo/seed/option_types.ex
+++ b/apps/snitch_core/priv/repo/seed/option_types.ex
@@ -2,8 +2,6 @@ defmodule Snitch.Seed.OptionType do
alias Snitch.Core.Tools.MultiTenancy.Repo
alias Snitch.Data.Schema.OptionType
- @base_path Application.app_dir(:snitch_core, "priv/repo/demo/demo_data")
-
def seed!() do
create_option_type("size", "Size")
create_option_type("color", "Color")
diff --git a/apps/snitch_core/priv/repo/seed/seeds.exs b/apps/snitch_core/priv/repo/seed/seeds.exs
index c1a1302c9..ab4d6487d 100644
--- a/apps/snitch_core/priv/repo/seed/seeds.exs
+++ b/apps/snitch_core/priv/repo/seed/seeds.exs
@@ -13,6 +13,7 @@
alias Snitch.Core.Tools.MultiTenancy.Repo
alias Snitch.Seed.{
+ GeneralConfiguration,
CountryState,
PaymentMethods,
OptionType,
@@ -33,9 +34,10 @@ alias Snitch.Tools.Helper.Taxonomy, as: TaxonomyHelper
variant_count = 9
+# seeds general settings for the store.
+GeneralConfiguration.seed!()
# seeds the taxonomy
# Taxonomy.seed()
-
# seeds countries and states entity
Repo.transaction(fn ->
CountryState.seed_countries!()
diff --git a/apps/snitch_core/test/data/model/line_item_test.exs b/apps/snitch_core/test/data/model/line_item_test.exs
index eff8888e9..08f5d94a1 100644
--- a/apps/snitch_core/test/data/model/line_item_test.exs
+++ b/apps/snitch_core/test/data/model/line_item_test.exs
@@ -6,6 +6,7 @@ defmodule Snitch.Data.Model.LineItemTest do
import Snitch.Factory
alias Snitch.Data.Model.{LineItem, Order}
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
describe "with valid params" do
setup :variants
@@ -42,17 +43,15 @@ defmodule Snitch.Data.Model.LineItemTest do
describe "compute_total/1 with empty list" do
setup :verify_on_exit!
- test "when default currency is set" do
- expect(Snitch.Tools.DefaultsMock, :fetch, fn :currency -> {:ok, :INR} end)
- assert Money.zero(:INR) == LineItem.compute_total([])
+ test "when default currency is set in the store" do
+ config = insert(:general_config)
+ assert GCModel.fetch_currency() == config.currency
+ assert Money.zero(config.currency) == LineItem.compute_total([])
end
test "when default currency is not set" do
- expect(Snitch.Tools.DefaultsMock, :fetch, fn :currency -> {:error, "whatever"} end)
-
- assert_raise RuntimeError, "whatever", fn ->
- LineItem.compute_total([])
- end
+ assert GCModel.fetch_currency() == "USD"
+ assert Money.zero("USD") == LineItem.compute_total([])
end
end
diff --git a/apps/snitch_core/test/domain/order/transitions_test.exs b/apps/snitch_core/test/domain/order/transitions_test.exs
index 3d32bc86e..de32c0313 100644
--- a/apps/snitch_core/test/domain/order/transitions_test.exs
+++ b/apps/snitch_core/test/domain/order/transitions_test.exs
@@ -163,7 +163,6 @@ defmodule Snitch.Domain.Order.TransitionsTest do
setup :embedded_shipping_methods
setup %{embedded_shipping_methods: methods} do
- Application.put_env(:snitch_core, :defaults, currency: :USD)
order = insert(:order)
[order: order, packages: [insert(:package, shipping_methods: methods, order: order)]]
end
@@ -174,8 +173,6 @@ defmodule Snitch.Domain.Order.TransitionsTest do
%{package_id: package.id, shipping_method_id: sm.id}
]
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
-
result =
order
|> Context.new(state: %{shipping_preferences: preference})
@@ -191,8 +188,6 @@ defmodule Snitch.Domain.Order.TransitionsTest do
%{
shipping_methods: [sm]
} = context do
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
-
set_cost = Money.new!(:USD, 100)
quantity = 3
diff --git a/apps/snitch_core/test/domain/package_item_test.exs b/apps/snitch_core/test/domain/package_item_test.exs
index 00ce4f11f..cb917ae99 100644
--- a/apps/snitch_core/test/domain/package_item_test.exs
+++ b/apps/snitch_core/test/domain/package_item_test.exs
@@ -5,16 +5,17 @@ defmodule Snitch.Domain.PackageItemTest do
import Mox, only: [expect: 3, verify_on_exit!: 1]
alias Snitch.Domain.PackageItem
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
setup :verify_on_exit!
test "tax/1" do
- expect(Snitch.Tools.DefaultsMock, :fetch, fn :currency -> {:ok, :INR} end)
- assert PackageItem.tax(nil, nil) == Money.zero(:INR)
+ currency = GCModel.fetch_currency()
+ assert PackageItem.tax(nil, nil) == Money.zero(currency)
end
test "shipping_tax/1" do
- expect(Snitch.Tools.DefaultsMock, :fetch, fn :currency -> {:ok, :INR} end)
- assert PackageItem.shipping_tax(nil, nil) == Money.zero(:INR)
+ currency = GCModel.fetch_currency()
+ assert PackageItem.shipping_tax(nil, nil) == Money.zero(currency)
end
end
diff --git a/apps/snitch_core/test/domain/package_test.exs b/apps/snitch_core/test/domain/package_test.exs
index 6f2fb1f8b..f147dcd20 100644
--- a/apps/snitch_core/test/domain/package_test.exs
+++ b/apps/snitch_core/test/domain/package_test.exs
@@ -6,6 +6,7 @@ defmodule Snitch.Domain.PackageTest do
import Snitch.Factory
alias Snitch.Domain.Package
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
describe "set_shipping_method/2" do
setup :zones
@@ -20,7 +21,6 @@ defmodule Snitch.Domain.PackageTest do
@tag shipping_method_count: 1
test "with valid shipping method", %{package: package, shipping_methods: [sm]} do
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
assert {:ok, package} = Package.set_shipping_method(package, sm.id)
assert package.shipping_method_id
assert package.cost
@@ -29,7 +29,6 @@ defmodule Snitch.Domain.PackageTest do
@tag shipping_method_count: 1
test "with invalid shipping method", %{package: package, shipping_methods: [sm]} do
- expect(Snitch.Tools.DefaultsMock, :fetch, 4, fn :currency -> {:ok, :USD} end)
assert {:error, cs} = Package.set_shipping_method(package, -1)
assert %{shipping_method_id: ["can't be blank"]} == errors_on(cs)
@@ -39,7 +38,7 @@ defmodule Snitch.Domain.PackageTest do
end
test "shipping_tax/1" do
- expect(Snitch.Tools.DefaultsMock, :fetch, 1, fn :currency -> {:ok, :INR} end)
- assert Package.shipping_tax(nil) == Money.zero(:INR)
+ currency = GCModel.fetch_currency()
+ assert Package.shipping_tax(nil) == Money.zero(currency)
end
end
diff --git a/apps/snitch_core/test/domain/shipment_test.exs b/apps/snitch_core/test/domain/shipment_test.exs
index a3a607633..cd24bdd9d 100644
--- a/apps/snitch_core/test/domain/shipment_test.exs
+++ b/apps/snitch_core/test/domain/shipment_test.exs
@@ -132,7 +132,6 @@ defmodule Snitch.Domain.ShipmentTest do
line_items = line_items_with_price(vs, [4])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, fn :currency -> {:ok, :USD} end)
packages = Shipment.default_packages(order)
assert length(packages) == 1
@@ -204,7 +203,6 @@ defmodule Snitch.Domain.ShipmentTest do
line_items = line_items_with_price(vs, [0, 0, 6])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
packages = Shipment.default_packages(order)
assert length(packages) == 2
@@ -280,7 +278,6 @@ defmodule Snitch.Domain.ShipmentTest do
line_items = line_items_with_price(vs, [4, 0, 4])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 3, fn :currency -> {:ok, :USD} end)
packages = Shipment.default_packages(order)
Enum.map(packages, fn %{items: items, category: c} ->
@@ -383,7 +380,6 @@ defmodule Snitch.Domain.ShipmentTest do
line_items = line_items_with_price(vs, [3])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
packages = Shipment.default_packages(order)
assert length(packages) == 2
diff --git a/apps/snitch_core/test/domain/splitters/weight_test.exs b/apps/snitch_core/test/domain/splitters/weight_test.exs
index 3baafaadc..eab00d2c8 100644
--- a/apps/snitch_core/test/domain/splitters/weight_test.exs
+++ b/apps/snitch_core/test/domain/splitters/weight_test.exs
@@ -142,8 +142,6 @@ defmodule Snitch.Domain.Splitter.WeightTest do
line_items = line_items_with_price(vs, [1])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :USD} end)
-
packages =
order
|> Shipment.default_packages()
@@ -200,8 +198,6 @@ defmodule Snitch.Domain.Splitter.WeightTest do
line_items = line_items_with_price(vs, [3, 3])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 4, fn :currency -> {:ok, :USD} end)
-
packages =
order
|> Shipment.default_packages()
@@ -256,8 +252,6 @@ defmodule Snitch.Domain.Splitter.WeightTest do
line_items = line_items_with_price(vs, [2, 6])
order = %Order{id: 42, line_items: line_items, shipping_address: address}
- expect(Snitch.Tools.DefaultsMock, :fetch, 3, fn :currency -> {:ok, :USD} end)
-
packages =
order
|> Shipment.default_packages()
diff --git a/apps/snitch_core/test/tools/money_test.exs b/apps/snitch_core/test/tools/money_test.exs
index 709b4a0c3..db702b1b3 100644
--- a/apps/snitch_core/test/tools/money_test.exs
+++ b/apps/snitch_core/test/tools/money_test.exs
@@ -1,30 +1,27 @@
defmodule Snitch.Tools.MoneyTest do
use ExUnit.Case, async: true
+ use Snitch.DataCase
import Mox
+ import Snitch.Factory
alias Snitch.Tools.Money, as: MoneyTools
-
- @msg_no_default "default 'currency' not set"
- @error_no_default {:error, @msg_no_default}
+ alias Snitch.Data.Model.GeneralConfiguration, as: GCModel
setup :verify_on_exit!
test "when configured all right zero/0, zero!/0" do
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> {:ok, :INR} end)
+ config = insert(:general_config)
- assert Money.zero(:INR) == MoneyTools.zero()
- assert Money.zero(:INR) == MoneyTools.zero!()
+ assert Money.zero(config.currency) == MoneyTools.zero()
+ assert Money.zero(config.currency) == MoneyTools.zero!()
end
test "when no default currency zero/0, zero!/0" do
- expect(Snitch.Tools.DefaultsMock, :fetch, 2, fn :currency -> @error_no_default end)
-
- assert @error_no_default = MoneyTools.zero()
+ currency = GCModel.fetch_currency()
- assert_raise RuntimeError, @msg_no_default, fn ->
- MoneyTools.zero!()
- end
+ assert Money.zero(currency) == MoneyTools.zero()
+ assert Money.zero(currency) == MoneyTools.zero!()
end
test "zero/1, and zero!/1" do