type.test.exs (3013B)
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.VF.Agreement.Type do 19 use ZenflowsTest.Help.AbsinCase, async: true 20 21 setup do 22 %{ 23 params: %{ 24 "name" => Factory.str("name"), 25 "note" => Factory.str("note"), 26 }, 27 inserted: Factory.insert!(:agreement), 28 } 29 end 30 31 @frag """ 32 fragment agreement on Agreement { 33 id 34 name 35 note 36 created 37 } 38 """ 39 40 describe "Query" do 41 test "agreement", %{inserted: new} do 42 assert %{data: %{"agreement" => data}} = 43 run!(""" 44 #{@frag} 45 query ($id: ID!) { 46 agreement(id: $id) {...agreement} 47 } 48 """, vars: %{"id" => new.id}) 49 50 assert data["id"] == new.id 51 assert data["name"] == new.name 52 assert data["note"] == new.note 53 assert {:ok, created, 0} = DateTime.from_iso8601(data["created"]) 54 assert DateTime.compare(DateTime.utc_now(), created) != :lt 55 end 56 end 57 58 describe "Mutation" do 59 test "createAgreement", %{params: params} do 60 assert %{data: %{"createAgreement" => %{"agreement" => data}}} = 61 run!(""" 62 #{@frag} 63 mutation ($agreement: AgreementCreateParams!) { 64 createAgreement(agreement: $agreement) { 65 agreement {...agreement} 66 } 67 } 68 """, vars: %{"agreement" => params}) 69 70 assert {:ok, _} = Zenflows.DB.ID.cast(data["id"]) 71 assert Map.take(data, ~w[name note]) == params 72 assert {:ok, created, 0} = DateTime.from_iso8601(data["created"]) 73 assert DateTime.compare(DateTime.utc_now(), created) != :lt 74 end 75 76 test "updateAgreement", %{params: params, inserted: agreem} do 77 assert %{data: %{"updateAgreement" => %{"agreement" => data}}} = 78 run!(""" 79 #{@frag} 80 mutation ($agreement: AgreementUpdateParams!) { 81 updateAgreement(agreement: $agreement) { 82 agreement {...agreement} 83 } 84 } 85 """, vars: %{ 86 "agreement" => Map.put(params, "id", agreem.id), 87 }) 88 89 assert data["id"] == agreem.id 90 assert Map.take(data, ~w[name note]) == params 91 assert {:ok, created, 0} = DateTime.from_iso8601(data["created"]) 92 assert DateTime.compare(DateTime.utc_now(), created) != :lt 93 end 94 95 test "deleteAgreement", %{inserted: %{id: id}} do 96 assert %{data: %{"deleteAgreement" => true}} = 97 run!(""" 98 mutation ($id: ID!) { 99 deleteAgreement(id: $id) 100 } 101 """, vars: %{"id" => id}) 102 end 103 end 104 end