zf

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

commit 6630fa80659840857efa55538b5021fbfc045ae4
parent 1bb740c630bdd5ba9b6b9fa0ead712b4ac8b1d51
Author: sir fish <dev@srf.sh>
Date:   Thu,  6 Oct 2022 14:30:02 +0000

Merge pull request #21 from dyne/srfsh/tags

Fix tags creation and implement listing all tags
Diffstat:
Msrc/zenflows/vf/economic_event/domain.ex | 11++++++-----
Msrc/zenflows/vf/economic_resource/domain.ex | 9+++++++++
Msrc/zenflows/vf/economic_resource/resolv.ex | 4++++
Msrc/zenflows/vf/economic_resource/type.ex | 4++++
Mtest/vf/economic_resource/domain.test.exs | 8++++++++
5 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/zenflows/vf/economic_event/domain.ex b/src/zenflows/vf/economic_event/domain.ex @@ -57,7 +57,7 @@ def create(evt_params, res_params) do Multi.new() |> Multi.insert(:created_evt, EconomicEvent.chgset(evt_params)) |> Multi.merge(fn %{created_evt: evt} -> - handle_multi(evt.action_id, evt, res_params) + handle_multi(evt.action_id, evt, res_params || %{}) # since it can be empty end) |> Repo.transaction() |> case do @@ -99,6 +99,7 @@ defp handle_multi(action_id, evt, res_params) when action_id in ["raise", "produ |> Map.put(:onhand_quantity_has_unit_id, evt.resource_quantity_has_unit_id) |> Map.put(:onhand_quantity_has_numerical_value, evt.resource_quantity_has_numerical_value) |> Map.put(:current_location_id, evt.to_location_id) + |> Map.put(:classified_as, evt.resource_classified_as) |> EconomicResource.chgset() Multi.new() @@ -584,7 +585,7 @@ defp handle_multi("transferCustody", evt, res_params) do ]) else cset = - (res_params || %{}) # since it can be empty + res_params |> Map.put(:primary_accountable_id, evt.receiver_id) |> Map.put(:custodian_id, evt.receiver_id) |> Map.put(:conforms_to_id, res.conforms_to_id) @@ -696,7 +697,7 @@ defp handle_multi("transferAllRights", evt, res_params) do ]) else cset = - (res_params || %{}) # since it can be empty + res_params |> Map.put(:primary_accountable_id, evt.receiver_id) |> Map.put(:custodian_id, evt.receiver_id) |> Map.put(:conforms_to_id, res.conforms_to_id) @@ -819,7 +820,7 @@ defp handle_multi("transfer", evt, res_params) do ]) else cset = - (res_params || %{}) # since it can be empty + res_params |> Map.put(:primary_accountable_id, evt.receiver_id) |> Map.put(:custodian_id, evt.receiver_id) |> Map.put(:conforms_to_id, res.conforms_to_id) @@ -951,7 +952,7 @@ defp handle_multi("move", evt, res_params) do ]) else cset = - (res_params || %{}) # since it can be empty + res_params |> Map.put(:primary_accountable_id, evt.receiver_id) |> Map.put(:custodian_id, evt.receiver_id) |> Map.put(:conforms_to_id, res.conforms_to_id) diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex @@ -50,6 +50,15 @@ def all(params \\ %{}) do end end +@spec classifications() :: [String.t()] +def classifications() do + import Ecto.Query + + from(r in EconomicResource, + select: fragment("distinct unnest(?)", r.classified_as)) + |> Repo.all() +end + @spec update(id(), params()) :: {:ok, EconomicResource.t()} | {:error, error()} def update(id, params) do Multi.new() diff --git a/src/zenflows/vf/economic_resource/resolv.ex b/src/zenflows/vf/economic_resource/resolv.ex @@ -30,6 +30,10 @@ def economic_resources(params, _) do Domain.all(params) end +def economic_resource_classifications(_, _) do + {:ok, Domain.classifications()} +end + def update_economic_resource(%{resource: %{id: id} = params}, _) do with {:ok, eco_res} <- Domain.update(id, params) do {:ok, %{economic_resource: eco_res}} diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex @@ -256,6 +256,10 @@ object :query_economic_resource do arg :filter, :economic_resource_filter_params resolve &Resolv.economic_resources/2 end + + field :economic_resource_classifications, list_of(non_null(:uri)) do + resolve &Resolv.economic_resource_classifications/2 + end end object :mutation_economic_resource do diff --git a/test/vf/economic_resource/domain.test.exs b/test/vf/economic_resource/domain.test.exs @@ -76,6 +76,14 @@ test "by_id/1 returns a EconomicResource", %{inserted: eco_res} do assert {:ok, %EconomicResource{}} = Domain.one(eco_res.id) end +test "classifications/0 returns list of unique `classified_as` values" do + Enum.each(1..10, fn _ -> Factory.insert!(:economic_resource) end) + {:ok, %{edges: edges}} = Domain.all() + left = Enum.flat_map(edges, & &1.node.classified_as) + right = Domain.classifications() + assert [] = left -- right +end + describe "update/2" do @tag skip: "TODO: fix economic resource factory" test "doesn't update a EconomicResource", %{inserted: old} do