zf

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

commit c1be9a8614d1a2f7f8422224deb1bc67be78c88b
parent 5fa223fa9225434252b8cac597d816b35c908147
Author: srfsh <dev@srf.sh>
Date:   Thu,  6 Oct 2022 17:24:28 +0300

Zenflows{,Test}.VF.EconomicResource: add support for listing all classifications

Requested by Puria for front-end tag completion.

Diffstat:
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++++++++
4 files changed, 25 insertions(+), 0 deletions(-)

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