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." %>
- <%= input f, :currency, nil, is_horizontal: true, description: "Default currency for the store." %> + +
+ <%= select f, :currency, get_currency(), value: f.data.currency, class: "form-control" %> +
<%= 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 @@
<%= text_input :selling_price, :amount, value: get_amount(f.data.selling_price), class: "form-control", name: "product[selling_price][amount]" %>
- <%= select :selling_price, :currency, get_currency(),value: get_currency_value(f.data.selling_price), class: "form-control", name: "product[selling_price][currency]" %> + <%= text_input :selling_price, :currency, value: get_currency_value(), class: "form-control", name: "product[selling_price][currency]", readonly: true %>
@@ -66,7 +66,7 @@
<%= text_input :max_retail_price, :amount, value: get_amount(f.data.max_retail_price), class: "form-control", name: "product[max_retail_price][amount]" %>
- <%= select :max_retail_price, :currency, get_currency(),value: get_currency_value(f.data.max_retail_price), class: "form-control", name: "product[max_retail_price][currency]" %> + <%= text_input :max_retail_price, :currency, value: get_currency_value(), class: "form-control", name: "product[max_retail_price][currency]", readonly: true%>
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