Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/scim_patch/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@
(handle-operation schema r {:path (name k) :value v} skip-unknown? attr-path-fn value-path-fn))
resource value)
;; path provided
(let [[_ xs] (paths/parse path)]
(let [[_ xs] (if (some #(= % path) (:schemas resource))
[:path [:attrPath path]]
(paths/parse path))]
(case (first xs)
:attrPath
(let [[uri attr subattr] (paths/extract-attr-path xs)]
Expand Down
35 changes: 35 additions & 0 deletions test/scim_patch/core_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,18 @@
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.emails"
:value ["test1@example.com" "test2@example.com"]})))))

(deftest op-add-extension
(testing "add operation, no filter, extension"
(let [resource {:userName "foo"
:urn:ietf:params:scim:schemas:extension:enterprise:2.0:User {:employeeNumber "12345"}
:schemas ["urn:ietf:params:scim:schemas:core:2.0:User"
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]}]
(is (= resource
(sut/patch schema (dissoc resource :urn:ietf:params:scim:schemas:extension:enterprise:2.0:User)
{:op "add"
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
:value (:urn:ietf:params:scim:schemas:extension:enterprise:2.0:User resource)}))))))

(deftest op-add-no-path
(testing "add operation, no path"
(is (= {:userName "foo"
Expand Down Expand Up @@ -361,6 +373,17 @@
{:op "remove"
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.displayName"})))))

(deftest op-remove-extension
(testing "remove operation: extension"
(let [resource {:userName "foo"
:urn:ietf:params:scim:schemas:extension:enterprise:2.0:User {:employeeNumber "12345"}
:schemas ["urn:ietf:params:scim:schemas:core:2.0:User"
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]}]
(is (= (dissoc resource :urn:ietf:params:scim:schemas:extension:enterprise:2.0:User)
(sut/patch schema resource
{:op "remove"
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"}))))))

(deftest op-remove-multi-valued-no-filter
(testing "remove operation: multi valued attribute, level 1"
(is (= {:userName "foo"}
Expand Down Expand Up @@ -517,6 +540,18 @@
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.emails"
:value ["test1@example.com" "test2@example.com"]})))))

(deftest op-replace-extension
(testing "replace operation, no filter, extension"
(let [resource {:userName "foo"
:urn:ietf:params:scim:schemas:extension:enterprise:2.0:User {:employeeNumber "12345"}
:schemas ["urn:ietf:params:scim:schemas:core:2.0:User"
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]}]
(is (= (assoc resource :urn:ietf:params:scim:schemas:extension:enterprise:2.0:User {:employeeNumber "99999"})
(sut/patch schema resource
{:op "replace"
:path "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
:value {:employeeNumber "99999"}}))))))

(deftest op-replace-no-path
(testing "replace operation, no path"
(is (= {:userName "foo"
Expand Down