absin_case.ex (2051B)
1 # Zenflows is designed to implement the Valueflows vocabulary, 2 # written and maintained by srfsh <info@dyne.org>. 3 # Copyright (C) 2021-2023 Dyne.org foundation <foundation@dyne.org>. 4 # 5 # This program is free software: you can redistribute it and/or modify 6 # it under the terms of the GNU Affero General Public License as published by 7 # the Free Software Foundation, either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU Affero General Public License for more details. 14 # 15 # You should have received a copy of the GNU Affero General Public License 16 # along with this program. If not, see <https://www.gnu.org/licenses/>. 17 18 defmodule ZenflowsTest.Help.AbsinCase do 19 @moduledoc "A helper module to ease writing GraphQL tests." 20 use ExUnit.CaseTemplate 21 22 using do 23 quote do 24 import ZenflowsTest.Help.AbsinCase 25 26 alias ZenflowsTest.Help.Factory 27 end 28 end 29 30 setup ctx do 31 alias Ecto.Adapters.SQL.Sandbox 32 alias Zenflows.DB.Repo 33 34 :ok = Sandbox.checkout(Repo) 35 36 unless ctx[:async] do 37 Sandbox.mode(Repo, {:shared, self()}) 38 end 39 40 :ok 41 end 42 43 @spec query!(String.t()) :: Absinthe.run_result() 44 def query!(doc) do 45 Absinthe.run!("query { #{doc} }", Zenflows.GQL.Schema, context: %{authenticate_calls?: false}) 46 end 47 48 @spec mutation!(String.t()) :: Absinthe.run_result() 49 def mutation!(doc) do 50 Absinthe.run!("mutation { #{doc} }", Zenflows.GQL.Schema, context: %{authenticate_calls?: false}) 51 end 52 53 @spec run!(String.t(), Keyword.t()) :: Absinthe.run_result() 54 def run!(doc, opts \\ []) do 55 auth? = Keyword.get(opts, :auth?, false) 56 ctx = Keyword.get(opts, :ctx, Keyword.get(opts, :context, %{})) 57 ctx = Map.put(ctx, :authenticate_calls?, auth?) 58 vars = Keyword.get(opts, :vars, Keyword.get(opts, :variables, %{})) 59 opts = 60 opts 61 |> Keyword.put(:context, ctx) 62 |> Keyword.put(:variables, vars) 63 Absinthe.run!(doc, Zenflows.GQL.Schema, opts) 64 end 65 end