zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

commit 6aa0ed4bdd426f01fa9b4083d2105dc4bda9a92b
parent 6ddaa993b2056ad4cb4c88e795026f4504714e93
Author: Alberto Lerda <albertolerda97@gmail.com>
Date:   Wed, 16 Nov 2022 13:15:32 +0100

Zenflows.VF: Use decimal in DB, schema and resolvers

Diffstat:
Mmix.exs | 1+
Apriv/repo/migrations/20221116090719_float_to_decimal.exs | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/zenflows/vf/claim.ex | 5+++--
Msrc/zenflows/vf/commitment.ex | 4++--
Msrc/zenflows/vf/duration.ex | 5+++--
Msrc/zenflows/vf/duration/type.ex | 4++--
Msrc/zenflows/vf/economic_event.ex | 4++--
Msrc/zenflows/vf/economic_event/domain.ex | 19++++++++++---------
Msrc/zenflows/vf/economic_resource.ex | 9+++++----
Msrc/zenflows/vf/economic_resource/query.ex | 4++--
Msrc/zenflows/vf/economic_resource/type.ex | 4++--
Msrc/zenflows/vf/fulfillment.ex | 4++--
Msrc/zenflows/vf/intent.ex | 6+++---
Msrc/zenflows/vf/measure.ex | 5+++--
Msrc/zenflows/vf/measure/type.ex | 4++--
Msrc/zenflows/vf/recipe_flow.ex | 4++--
Msrc/zenflows/vf/recipe_process.ex | 6++++--
Msrc/zenflows/vf/satisfaction.ex | 4++--
Msrc/zenflows/vf/scenario_definition.ex | 5+++--
Msrc/zenflows/vf/settlement.ex | 4++--
Msrc/zenflows/vf/spatial_thing.ex | 13+++++++------
Msrc/zenflows/vf/spatial_thing/type.ex | 18+++++++++---------
Mtest/help/factory.ex | 10++++++++++
Mtest/vf/commitment.test.exs | 4++--
Mtest/vf/duration.test.exs | 2+-
Mtest/vf/economic_event.test.exs | 30+++++++++++++++---------------
Mtest/vf/economic_event/domain.test.exs | 52++++++++++++++++++++++++++--------------------------
Mtest/vf/economic_event/type.test.exs | 2+-
Mtest/vf/economic_resource/domain.test.exs | 2+-
Mtest/vf/economic_resource/track_and_trace.test.exs | 2+-
Mtest/vf/fulfillment.test.exs | 4++--
Mtest/vf/intent/domain.test.exs | 6+++---
Mtest/vf/intent/type.test.exs | 6+++---
Mtest/vf/measure.test.exs | 6+++---
Mtest/vf/recipe_flow/domain.test.exs | 4++--
Mtest/vf/recipe_flow/type.test.exs | 4++--
Mtest/vf/recipe_process/domain.test.exs | 2+-
Mtest/vf/recipe_process/type.test.exs | 2+-
Mtest/vf/satisfaction.test.exs | 4++--
Mtest/vf/scenario_definition/type.test.exs | 2+-
Mtest/vf/settlement.test.exs | 4++--
41 files changed, 204 insertions(+), 130 deletions(-)

diff --git a/mix.exs b/mix.exs @@ -57,6 +57,7 @@ defp deps() do # db {:ecto_sql, "~> 3.9"}, {:postgrex, ">= 0.0.0"}, + {:decimal, "~> 2.0"}, # crypto {:plug_crypto, "~> 1.2"}, diff --git a/priv/repo/migrations/20221116090719_float_to_decimal.exs b/priv/repo/migrations/20221116090719_float_to_decimal.exs @@ -0,0 +1,54 @@ +defmodule Zenflows.DB.Repo.Migrations.FloatToDecimal do + use Ecto.Migration + + def change do + alter table("vf_spatial_thing") do + modify :lat, :decimal + modify :long, :decimal + modify :alt, :decimal + end + alter table("vf_scenario_definition") do + modify :has_duration_numeric_duration, :decimal + end + alter table("vf_commitment") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_intent") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + modify :available_quantity_has_numerical_value, :decimal + end + alter table("vf_economic_event") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_recipe_process") do + modify :has_duration_numeric_duration, :decimal + end + alter table("vf_claim") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_settlement") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_fulfillment") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_recipe_flow") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + alter table("vf_economic_resource") do + modify :accounting_quantity_has_numerical_value, :decimal + modify :onhand_quantity_has_numerical_value, :decimal + end + alter table("vf_satisfaction") do + modify :resource_quantity_has_numerical_value, :decimal + modify :effort_quantity_has_numerical_value, :decimal + end + end +end diff --git a/src/zenflows/vf/claim.ex b/src/zenflows/vf/claim.ex @@ -33,6 +33,7 @@ alias Zenflows.VF.{ ResourceSpecification, Unit, } +alias Decimal, as: D @type t() :: %__MODULE__{ action: Action.t(), @@ -59,10 +60,10 @@ schema "vf_claim" do belongs_to :resource_conforms_to, ResourceSpecification field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal belongs_to :triggered_by, EconomicEvent field :due, :utc_datetime_usec field :finished, :boolean diff --git a/src/zenflows/vf/commitment.ex b/src/zenflows/vf/commitment.ex @@ -74,10 +74,10 @@ schema "vf_commitment" do belongs_to :resource_inventoried_as, EconomicResource field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal field :has_beginning, :utc_datetime_usec field :has_end, :utc_datetime_usec field :has_point_in_time, :utc_datetime_usec diff --git a/src/zenflows/vf/duration.ex b/src/zenflows/vf/duration.ex @@ -25,16 +25,17 @@ use Zenflows.DB.Schema alias Ecto.Changeset alias Zenflows.DB.Schema alias Zenflows.VF.TimeUnitEnum +alias Decimal, as: D @type t() :: %__MODULE__{ unit_type: TimeUnitEnum.t(), - numeric_duration: float(), + numeric_duration: D.decimal(), } @primary_key false embedded_schema do field :unit_type, TimeUnitEnum - field :numeric_duration, :float + field :numeric_duration, :decimal end @doc """ diff --git a/src/zenflows/vf/duration/type.ex b/src/zenflows/vf/duration/type.ex @@ -28,7 +28,7 @@ A number representing the duration, will be paired with a unit. @desc "A `Duration` represents an interval between two `DateTime` values." object :duration do @desc @numeric_duration - field :numeric_duration, non_null(:float) + field :numeric_duration, non_null(:decimal) @desc @unit_type field :unit_type, non_null(:time_unit) @@ -37,7 +37,7 @@ end @desc "Mutation input structure for defining time durations." input_object :iduration, name: "IDuration" do @desc @numeric_duration - field :numeric_duration, non_null(:float) + field :numeric_duration, non_null(:decimal) @desc @unit_type field :unit_type, non_null(:time_unit) diff --git a/src/zenflows/vf/economic_event.ex b/src/zenflows/vf/economic_event.ex @@ -77,10 +77,10 @@ schema "vf_economic_event" do belongs_to :resource_conforms_to, ResourceSpecification field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal field :has_beginning, :utc_datetime_usec field :has_end, :utc_datetime_usec field :has_point_in_time, :utc_datetime_usec diff --git a/src/zenflows/vf/economic_event/domain.ex b/src/zenflows/vf/economic_event/domain.ex @@ -30,6 +30,7 @@ alias Zenflows.VF.{ Measure, Process, } +alias Decimal, as: D @spec one(Ecto.Repo.t(), Schema.id() | map() | Keyword.t()) :: {:ok, EconomicEvent.t()} | {:error, String.t()} @@ -257,8 +258,8 @@ defp handle_insert(key, %{action_id: action_id} = evt, _) where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - accounting_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, - onhand_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + accounting_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), + onhand_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) end defp handle_insert(key, %{action_id: action_id} = evt, _) @@ -534,7 +535,7 @@ defp handle_insert(key, %{action_id: "accept"} = evt, _) do where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - onhand_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + onhand_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) end defp handle_insert(key, %{action_id: "modify"} = evt, _) do @@ -704,7 +705,7 @@ defp handle_insert(key, %{action_id: "transferCustody"} = evt, res_params) do where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - onhand_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + onhand_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) |> Multi.merge(fn %{^key => evt} -> if res.container? do @@ -828,7 +829,7 @@ defp handle_insert(key, %{action_id: "transferAllRights"} = evt, res_params) do where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - accounting_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + accounting_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) |> Multi.merge(fn %{^key => evt} -> if res.container? do @@ -961,8 +962,8 @@ defp handle_insert(key, %{action_id: "transfer"} = evt, res_params) do where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - accounting_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, - onhand_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + accounting_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), + onhand_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) |> Multi.merge(fn %{^key => evt} -> if res.container? do @@ -1100,8 +1101,8 @@ defp handle_insert(key, %{action_id: "move"} = evt, res_params) do where(EconomicResource, id: ^evt.resource_inventoried_as_id), set: [previous_event_id: evt.id], inc: [ - accounting_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, - onhand_quantity_has_numerical_value: -evt.resource_quantity_has_numerical_value, + accounting_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), + onhand_quantity_has_numerical_value: D.negate(evt.resource_quantity_has_numerical_value), ]) |> Multi.merge(fn %{^key => evt} -> if res.container? do diff --git a/src/zenflows/vf/economic_resource.ex b/src/zenflows/vf/economic_resource.ex @@ -35,6 +35,7 @@ alias Zenflows.VF.{ SpatialThing, Unit, } +alias Decimal, as: D @type t() :: %__MODULE__{ name: String.t(), @@ -45,10 +46,10 @@ alias Zenflows.VF.{ conforms_to: ResourceSpecification.t(), accounting_quantity: Measure.t() | nil, accounting_quantity_has_unit: Unit.t(), - accounting_quantity_has_numerical_value: float(), + accounting_quantity_has_numerical_value: D.decimal(), onhand_quantity: Measure.t() | nil, onhand_quantity_has_unit: Unit.t(), - onhand_quantity_has_numerical_value: float(), + onhand_quantity_has_numerical_value: D.decimal(), primary_accountable: Agent.t(), custodian: Agent.t(), stage: ProcessSpecification.t() | nil, @@ -76,10 +77,10 @@ schema "vf_economic_resource" do belongs_to :conforms_to, ResourceSpecification field :accounting_quantity, :map, virtual: true belongs_to :accounting_quantity_has_unit, Unit - field :accounting_quantity_has_numerical_value, :float + field :accounting_quantity_has_numerical_value, :decimal field :onhand_quantity, :map, virtual: true belongs_to :onhand_quantity_has_unit, Unit - field :onhand_quantity_has_numerical_value, :float + field :onhand_quantity_has_numerical_value, :decimal belongs_to :primary_accountable, Agent belongs_to :custodian, Agent belongs_to :stage, ProcessSpecification diff --git a/src/zenflows/vf/economic_resource/query.ex b/src/zenflows/vf/economic_resource/query.ex @@ -70,8 +70,8 @@ defp all_validate(params) do or_custodian: {:array, ID}, conforms_to: {:array, ID}, or_conforms_to: {:array, ID}, - gt_onhand_quantity_has_numerical_value: :float, - or_gt_onhand_quantity_has_numerical_value: :float, + gt_onhand_quantity_has_numerical_value: :decimal, + or_gt_onhand_quantity_has_numerical_value: :decimal, name: :string, or_name: :string, }} diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex @@ -250,8 +250,8 @@ input_object :economic_resource_filter_params do field :or_primary_accountable, list_of(non_null(:id)) field :custodian, list_of(non_null(:id)) field :or_custodian, list_of(non_null(:id)) - field :gt_onhand_quantity_has_numerical_value, :float - field :or_gt_onhand_quantity_has_numerical_value, :float + field :gt_onhand_quantity_has_numerical_value, :decimal + field :or_gt_onhand_quantity_has_numerical_value, :decimal field :name, list_of(non_null(:string)) field :or_name, list_of(non_null(:string)) end diff --git a/src/zenflows/vf/fulfillment.ex b/src/zenflows/vf/fulfillment.ex @@ -46,10 +46,10 @@ schema "vf_fulfillment" do belongs_to :fulfills, Commitment field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal timestamps() end diff --git a/src/zenflows/vf/intent.ex b/src/zenflows/vf/intent.ex @@ -77,13 +77,13 @@ schema "vf_intent" do belongs_to :resource_inventoried_as, EconomicResource field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal field :available_quantity, :map, virtual: true belongs_to :available_quantity_has_unit, Unit - field :available_quantity_has_numerical_value, :float + field :available_quantity_has_numerical_value, :decimal belongs_to :at_location, SpatialThing field :has_beginning, :utc_datetime_usec field :has_end, :utc_datetime_usec diff --git a/src/zenflows/vf/measure.ex b/src/zenflows/vf/measure.ex @@ -26,16 +26,17 @@ use Zenflows.DB.Schema alias Ecto.Changeset alias Zenflows.DB.Schema alias Zenflows.VF.Unit +alias Decimal, as: D @type t() :: %__MODULE__{ has_unit_id: Zenflows.DB.ID.t(), - has_numerical_value: float(), + has_numerical_value: D.decimal(), } @primary_key false embedded_schema do belongs_to :has_unit, Unit - field :has_numerical_value, :float + field :has_numerical_value, :decimal end @doc """ diff --git a/src/zenflows/vf/measure/type.ex b/src/zenflows/vf/measure/type.ex @@ -33,7 +33,7 @@ unit. See http://www.qudt.org/pages/QUDToverviewPage.html . """ object :measure do @desc @has_numerical_value - field :has_numerical_value, non_null(:float) + field :has_numerical_value, non_null(:decimal) @desc @has_unit field :has_unit, :unit, resolve: &Resolv.has_unit/3 @@ -45,7 +45,7 @@ if not present, rather than empty. """ input_object :imeasure, name: "IMeasure" do @desc @has_numerical_value - field :has_numerical_value, non_null(:float) + field :has_numerical_value, non_null(:decimal) @desc "(`Unit`) " <> @has_unit field :has_unit_id, :id, name: "has_unit" diff --git a/src/zenflows/vf/recipe_flow.ex b/src/zenflows/vf/recipe_flow.ex @@ -53,10 +53,10 @@ schema "vf_recipe_flow" do belongs_to :recipe_flow_resource, RecipeResource field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal belongs_to :recipe_clause_of, RecipeExchange timestamps() end diff --git a/src/zenflows/vf/recipe_process.ex b/src/zenflows/vf/recipe_process.ex @@ -29,6 +29,8 @@ alias Zenflows.VF.{ ProcessSpecification, TimeUnitEnum, } +alias Decimal, as: D + @type t() :: %__MODULE__{ name: String.t(), @@ -37,7 +39,7 @@ alias Zenflows.VF.{ process_classified_as: [String.t()] | nil, has_duration: Duration.t() | nil, has_duration_unit_type: TimeUnitEnum.t() | nil, - has_duration_numeric_duration: float() | nil, + has_duration_numeric_duration: D.decimal() | nil, } schema "vf_recipe_process" do @@ -47,7 +49,7 @@ schema "vf_recipe_process" do field :process_classified_as, {:array, :string} field :has_duration, :map, virtual: true field :has_duration_unit_type, TimeUnitEnum - field :has_duration_numeric_duration, :float + field :has_duration_numeric_duration, :decimal timestamps() end diff --git a/src/zenflows/vf/satisfaction.ex b/src/zenflows/vf/satisfaction.ex @@ -45,10 +45,10 @@ schema "vf_satisfaction" do belongs_to :satisfies, Intent field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal field :note, :string timestamps() end diff --git a/src/zenflows/vf/scenario_definition.ex b/src/zenflows/vf/scenario_definition.ex @@ -28,12 +28,13 @@ alias Zenflows.VF.{ Duration, TimeUnitEnum, } +alias Decimal, as: D @type t() :: %__MODULE__{ name: String.t(), note: String.t() | nil, has_duration_unit_type: TimeUnitEnum.t() | nil, - has_duration_numeric_duration: float() | nil, + has_duration_numeric_duration: D.decimal() | nil, has_duration: Duration.t() | nil, } @@ -42,7 +43,7 @@ schema "vf_scenario_definition" do field :note, :string field :has_duration, :map, virtual: true field :has_duration_unit_type, TimeUnitEnum - field :has_duration_numeric_duration, :float + field :has_duration_numeric_duration, :decimal timestamps() end diff --git a/src/zenflows/vf/settlement.ex b/src/zenflows/vf/settlement.ex @@ -45,10 +45,10 @@ schema "vf_settlement" do belongs_to :settles, Claim field :resource_quantity, :map, virtual: true belongs_to :resource_quantity_has_unit, Unit - field :resource_quantity_has_numerical_value, :float + field :resource_quantity_has_numerical_value, :decimal field :effort_quantity, :map, virtual: true belongs_to :effort_quantity_has_unit, Unit - field :effort_quantity_has_numerical_value, :float + field :effort_quantity_has_numerical_value, :decimal field :note, :string timestamps() end diff --git a/src/zenflows/vf/spatial_thing.ex b/src/zenflows/vf/spatial_thing.ex @@ -24,14 +24,15 @@ use Zenflows.DB.Schema alias Ecto.Changeset alias Zenflows.DB.{Schema, Validate} +alias Decimal, as: D @type t() :: %__MODULE__{ id: String.t(), name: String.t(), mappable_address: String.t() | nil, - lat: float() | nil, - long: float() | nil, - alt: float() | nil, + lat: D.decimal() | nil, + long: D.decimal() | nil, + alt: D.decimal() | nil, note: String.t() | nil, } @@ -41,9 +42,9 @@ alias Zenflows.DB.{Schema, Validate} schema "vf_spatial_thing" do field :name, :string field :mappable_address, :string - field :lat, :float - field :long, :float - field :alt, :float + field :lat, :decimal + field :long, :decimal + field :alt, :decimal field :note, :string timestamps() end diff --git a/src/zenflows/vf/spatial_thing/type.ex b/src/zenflows/vf/spatial_thing/type.ex @@ -46,13 +46,13 @@ object :spatial_thing do field :mappable_address, :string @desc @lat - field :lat, :float + field :lat, :decimal @desc @long - field :long, :float + field :long, :decimal @desc @alt - field :alt, :float + field :alt, :decimal @desc @note field :note, :string @@ -66,13 +66,13 @@ input_object :spatial_thing_create_params do field :mappable_address, :string @desc @lat - field :lat, :float + field :lat, :decimal @desc @long - field :long, :float + field :long, :decimal @desc @alt - field :alt, :float + field :alt, :decimal @desc @note field :note, :string @@ -88,13 +88,13 @@ input_object :spatial_thing_update_params do field :mappable_address, :string @desc @lat - field :lat, :float + field :lat, :decimal @desc @long - field :long, :float + field :long, :decimal @desc @alt - field :alt, :float + field :alt, :decimal @desc @note field :note, :string diff --git a/test/help/factory.ex b/test/help/factory.ex @@ -22,6 +22,7 @@ Defines shortcuts for DB testing. alias Zenflows.DB.Repo alias Zenflows.VF +alias Decimal, as: D defdelegate id(), to: Zenflows.DB.ID, as: :gen @@ -73,6 +74,15 @@ def float(mul \\ 100) do :rand.uniform() * mul end +@doc """ +Returns a random float of the from 0 (inclusive) and 1 (exclusive) +multiplied by `mul`. +""" +@spec decimal() :: D.decimal() +def decimal(mul \\ 100) do + D.from_float(float(mul)) +end + @doc "Returns a random boolean." @spec bool() :: boolean() def bool() do diff --git a/test/vf/commitment.test.exs b/test/vf/commitment.test.exs @@ -31,11 +31,11 @@ setup do resource_classified_as: Factory.str_list("uri"), resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_conforms_to_id: Factory.insert!(:resource_specification).id, diff --git a/test/vf/duration.test.exs b/test/vf/duration.test.exs @@ -55,7 +55,7 @@ setup do %{ params: %{ unit_type: Factory.build(:time_unit), - numeric_duration: Factory.float(), + numeric_duration: Factory.decimal(), }, inserted: %Dummy{ has_duration_unit_type: Factory.build(:time_unit), diff --git a/test/vf/economic_event.test.exs b/test/vf/economic_event.test.exs @@ -86,7 +86,7 @@ describe "`chgset/1` with raise:" do receiver_id: agent.id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: DateTime.utc_now(), }} @@ -168,7 +168,7 @@ describe "`chgset/1` with produce:" do receiver_id: agent.id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: DateTime.utc_now(), }} @@ -250,7 +250,7 @@ describe "`chgset/1` with lower:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: DateTime.utc_now(), }} @@ -295,7 +295,7 @@ describe "`chgset/1` with consume:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: DateTime.utc_now(), has_end: DateTime.utc_now(), @@ -338,7 +338,7 @@ describe "`chgset/1` with use:" do receiver_id: Factory.insert!(:agent).id, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: DateTime.utc_now(), }} @@ -394,7 +394,7 @@ test "`chgset/1` with work: pass when all good" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: DateTime.utc_now(), }) @@ -409,7 +409,7 @@ describe "`chgset/1` with cite:" do receiver_id: Factory.insert!(:agent).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: DateTime.utc_now(), }} @@ -513,7 +513,7 @@ describe "`chgset/1` with pickup:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: DateTime.utc_now(), }} @@ -558,7 +558,7 @@ describe "`chgset/1` with dropoff:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, to_location_id: Factory.insert!(:spatial_thing).id, has_beginning: DateTime.utc_now(), @@ -604,7 +604,7 @@ describe "`chgset/1` with accept:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: DateTime.utc_now(), }} @@ -649,7 +649,7 @@ describe "`chgset/1` with modify:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: DateTime.utc_now(), has_end: DateTime.utc_now(), @@ -691,7 +691,7 @@ test "`chgset/1` with transferCustody: pass when all good" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: DateTime.utc_now(), }) @@ -705,7 +705,7 @@ test "`chgset/1` with transferAllRights: pass when all good" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, to_location_id: Factory.insert!(:spatial_thing).id, has_end: DateTime.utc_now(), @@ -720,7 +720,7 @@ test "`chgset/1` with transfer: pass when all good" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, to_location_id: Factory.insert!(:spatial_thing).id, has_beginning: DateTime.utc_now(), @@ -738,7 +738,7 @@ describe "`chgset/1` with move:" do resource_inventoried_as_id: Factory.insert!(:economic_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: DateTime.utc_now(), }} diff --git a/test/vf/economic_event/domain.test.exs b/test/vf/economic_event/domain.test.exs @@ -41,7 +41,7 @@ setup ctx do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -58,7 +58,7 @@ setup ctx do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -98,7 +98,7 @@ describe "`create/2` with raise:" do resource_inventoried_as_id: res.id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), }} @@ -115,7 +115,7 @@ describe "`create/2` with raise:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), to_location_id: Factory.insert!(:spatial_thing).id, @@ -211,7 +211,7 @@ describe "`create/2` with produce:" do resource_inventoried_as_id: res.id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: Factory.now(), }} @@ -229,7 +229,7 @@ describe "`create/2` with produce:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), to_location_id: Factory.insert!(:spatial_thing).id, @@ -320,7 +320,7 @@ describe "`create/2` with lower:" do resource_inventoried_as_id: res.id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), }} @@ -373,7 +373,7 @@ describe "`create/2` with consume:" do resource_inventoried_as_id: res.id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: Factory.now(), has_end: Factory.now(), @@ -428,11 +428,11 @@ describe "`create/2` with use:" do resource_inventoried_as_id: res.id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), }} @@ -754,7 +754,7 @@ describe "`create/2` with transferCustody:" do resource_conforms_to_id: res.conforms_to_id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), } @@ -801,7 +801,7 @@ describe "`create/2` with transferCustody:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -947,7 +947,7 @@ describe "`create/2` with transferCustody:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -973,7 +973,7 @@ describe "`create/2` with transferCustody:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1021,7 +1021,7 @@ describe "`create/2` with transferAllRights:" do resource_conforms_to_id: res.conforms_to_id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), } @@ -1067,7 +1067,7 @@ describe "`create/2` with transferAllRights:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1212,7 +1212,7 @@ describe "`create/2` with transferAllRights:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1238,7 +1238,7 @@ describe "`create/2` with transferAllRights:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1286,7 +1286,7 @@ describe "`create/2` with transfer:" do resource_conforms_to_id: res.conforms_to_id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), } @@ -1332,7 +1332,7 @@ describe "`create/2` with transfer:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1525,7 +1525,7 @@ describe "`create/2` with transfer:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1551,7 +1551,7 @@ describe "`create/2` with transfer:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1588,7 +1588,7 @@ describe "`create/2` with move:" do resource_conforms_to_id: res.conforms_to_id, resource_quantity: %{ has_unit_id: res.accounting_quantity_has_unit_id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_point_in_time: Factory.now(), } @@ -1634,7 +1634,7 @@ describe "`create/2` with move:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1843,7 +1843,7 @@ describe "`create/2` with move:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } @@ -1869,7 +1869,7 @@ describe "`create/2` with move:" do resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_end: Factory.now(), } diff --git a/test/vf/economic_event/type.test.exs b/test/vf/economic_event/type.test.exs @@ -27,7 +27,7 @@ setup do receiver_id: agent_id, resource_conforms_to_id: Factory.insert!(:resource_specification).id, resource_quantity_has_unit_id: Factory.insert!(:unit).id, - resource_quantity_has_numerical_value: Factory.float(), + resource_quantity_has_numerical_value: Factory.decimal(), has_end: DateTime.utc_now(), }, inserted: %{}, diff --git a/test/vf/economic_resource/domain.test.exs b/test/vf/economic_resource/domain.test.exs @@ -33,7 +33,7 @@ alias Zenflows.VF.{ setup ctx do %{id: unit_id} = Factory.insert!(:unit) - num_val = Factory.float() + num_val = Factory.decimal() params = %{ name: Factory.str("name"), note: Factory.str("note"), diff --git a/test/vf/economic_resource/track_and_trace.test.exs b/test/vf/economic_resource/track_and_trace.test.exs @@ -99,7 +99,7 @@ test "previous/2 works" do has_unit_id: unit.id, }, effort_quantity: %{ - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), has_unit_id: Factory.insert!(:unit).id, }, has_point_in_time: Factory.now(), diff --git a/test/vf/fulfillment.test.exs b/test/vf/fulfillment.test.exs @@ -27,11 +27,11 @@ setup do fulfills_id: Factory.insert!(:commitment).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, }} end diff --git a/test/vf/intent/domain.test.exs b/test/vf/intent/domain.test.exs @@ -44,15 +44,15 @@ setup do resource_classified_as: Factory.str_list("uri"), resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, available_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, has_beginning: Factory.now(), has_end: Factory.now(), diff --git a/test/vf/intent/type.test.exs b/test/vf/intent/type.test.exs @@ -33,15 +33,15 @@ setup do "resourceClassifiedAs" => Factory.str_list("uri"), "resourceQuantity" => %{ "hasUnit" => Factory.insert!(:unit).id, - "hasNumericalValue" => Factory.float(), + "hasNumericalValue" => Factory.decimal(), }, "effortQuantity" => %{ "hasUnit" => Factory.insert!(:unit).id, - "hasNumericalValue" => Factory.float(), + "hasNumericalValue" => Factory.decimal(), }, "availableQuantity" => %{ "hasUnit" => Factory.insert!(:unit).id, - "hasNumericalValue" => Factory.float(), + "hasNumericalValue" => Factory.decimal(), }, "hasBeginning" => Factory.iso_now(), "hasEnd" => Factory.iso_now(), diff --git a/test/vf/measure.test.exs b/test/vf/measure.test.exs @@ -30,7 +30,7 @@ alias Zenflows.VF.{Measure, Unit} embedded_schema do field :quantity, :map, virtual: true belongs_to :quantity_has_unit, Unit - field :quantity_has_numerical_value, :float + field :quantity_has_numerical_value, :decimal end def changeset(params) do @@ -56,11 +56,11 @@ setup do %{ params: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, inserted: %Dummy{ quantity_has_unit_id: Factory.insert!(:unit).id, - quantity_has_numerical_value: Factory.float(), + quantity_has_numerical_value: Factory.decimal(), }, } end diff --git a/test/vf/recipe_flow/domain.test.exs b/test/vf/recipe_flow/domain.test.exs @@ -38,11 +38,11 @@ setup do recipe_flow_resource_id: Factory.insert!(:recipe_resource).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, recipe_clause_of_id: Factory.insert!(:recipe_exchange).id, note: Factory.str("some note"), diff --git a/test/vf/recipe_flow/type.test.exs b/test/vf/recipe_flow/type.test.exs @@ -28,11 +28,11 @@ setup do "recipeFlowResource" => Factory.insert!(:recipe_resource).id, "resourceQuantity" => %{ "hasUnit" => Factory.insert!(:unit).id, - "hasNumericalValue" => Factory.float(), + "hasNumericalValue" => Factory.decimal(), }, "effortQuantity" => %{ "hasUnit" => Factory.insert!(:unit).id, - "hasNumericalValue" => Factory.float(), + "hasNumericalValue" => Factory.decimal(), }, "recipeClauseOf" => Factory.insert!(:recipe_exchange).id, }, diff --git a/test/vf/recipe_process/domain.test.exs b/test/vf/recipe_process/domain.test.exs @@ -99,7 +99,7 @@ describe "create/1" do assert {:error, %Changeset{errors: errs}} = Domain.create(params) assert Keyword.has_key?(errs, :has_duration) - params = Map.put(params, :has_duration, %{numeric_duration: Factory.float()}) + params = Map.put(params, :has_duration, %{numeric_duration: Factory.decimal()}) assert {:error, %Changeset{errors: errs}} = Domain.create(params) assert Keyword.has_key?(errs, :has_duration) end diff --git a/test/vf/recipe_process/type.test.exs b/test/vf/recipe_process/type.test.exs @@ -24,7 +24,7 @@ setup do "name" => Factory.str("name"), "hasDuration" => %{ "unitType" => Factory.build(:time_unit) |> to_string(), - "numericDuration" => Factory.float(), + "numericDuration" => Factory.decimal(), }, "processClassifiedAs" => Factory.str_list("uri"), "processConformsTo" => Factory.insert!(:process_specification).id, diff --git a/test/vf/satisfaction.test.exs b/test/vf/satisfaction.test.exs @@ -27,11 +27,11 @@ setup do satisfies_id: Factory.insert!(:intent).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, }} end diff --git a/test/vf/scenario_definition/type.test.exs b/test/vf/scenario_definition/type.test.exs @@ -25,7 +25,7 @@ setup do "note" => Factory.str("note"), "hasDuration" => %{ "unitType" => Factory.build(:time_unit) |> to_string(), - "numericDuration" => Factory.float(), + "numericDuration" => Factory.decimal(), }, }, inserted: Factory.insert!(:scenario_definition), diff --git a/test/vf/settlement.test.exs b/test/vf/settlement.test.exs @@ -27,11 +27,11 @@ setup do settles_id: Factory.insert!(:claim).id, resource_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, effort_quantity: %{ has_unit_id: Factory.insert!(:unit).id, - has_numerical_value: Factory.float(), + has_numerical_value: Factory.decimal(), }, }} end