From 91f807e6b4c97f13866b08ac5ed28ed36ef17bd7 Mon Sep 17 00:00:00 2001 From: Hyunwoo Nam Date: Sun, 11 Aug 2024 23:32:05 +0900 Subject: [PATCH] add test for @oneOf --- dev-resources/input-object-one-of-schema.edn | 11 +++++ .../walmartlabs/lacinia/input_types_test.clj | 45 ++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 dev-resources/input-object-one-of-schema.edn diff --git a/dev-resources/input-object-one-of-schema.edn b/dev-resources/input-object-one-of-schema.edn new file mode 100644 index 00000000..8f936b0f --- /dev/null +++ b/dev-resources/input-object-one-of-schema.edn @@ -0,0 +1,11 @@ +{:Query + {:fields + {:user {:type :User, + :args {:by {:type (non-null :UserByInput)}} + :resolve :queries/user}}}, + + :input-objects + {:UserByInput + {:fields {:id {:type ID}, + :email {:type String}}, + :directives [{:directive-type :oneOf}]}}} diff --git a/test/com/walmartlabs/lacinia/input_types_test.clj b/test/com/walmartlabs/lacinia/input_types_test.clj index e933a592..82f8b2ac 100644 --- a/test/com/walmartlabs/lacinia/input_types_test.clj +++ b/test/com/walmartlabs/lacinia/input_types_test.clj @@ -13,7 +13,7 @@ ; limitations under the License. (ns com.walmartlabs.lacinia.input-types-test - (:require [clojure.test :refer [deftest is]] + (:require [clojure.test :refer [deftest is testing]] [com.walmartlabs.test-utils :refer [execute compile-schema-injected]])) (deftest mix-of-literals-and-dynamics @@ -38,4 +38,47 @@ {:nodes [{:color "blue"}]}}} (execute schema query args nil))))) +(deftest one-of-input-object + (let [resolver (fn [_ args _] + ;; TODO: arguments validation + {}) + schema (compile-schema-injected "input-object-one-of-schema.edn" + {:queries/user resolver})] + (testing "provide exactly one of the fields" + (let [query "{ + tom: user(by: { + id: 1 + }) { + name + } + + jerry: user(by: { + email: \"jerry@warnerbros.com\" + }) { + name + } + }" + args {}] + (is (= {:data + {:tom {:name "Tom"} + :jerry {:name "Jerry"}}} + (execute schema query args nil))))) + (testing "provide two values" + (let [query "{ + user(by: { + id: 1 + email: \"jerry@warnerbros.com\" + }) { + name + } + }" + args {}] + (is (= {:data + {:cars + {:nodes [{:color "blue"}]}}} + (execute schema query args nil))))))) + +(comment + (require 'com.walmartlabs.lacinia.parser.schema) + ) \ No newline at end of file