91 lines
4.5 KiB
Clojure
91 lines
4.5 KiB
Clojure
(ns dog-and-duck.quack.picky-test
|
|
(:require [clojure.test :refer [deftest is testing]]
|
|
[dog-and-duck.quack.picky :refer [activitystreams-context-uri
|
|
filter-severity object-faults
|
|
persistent-object-faults]]))
|
|
|
|
(deftest object-fault-tests
|
|
(let [perfect {(keyword "@context") activitystreams-context-uri
|
|
:id "https://somewhere.out.there/object/14323:1671654380083"
|
|
:type "Test"}]
|
|
(testing "no faults returned from fully specified objects"
|
|
(let [actual (object-faults perfect)
|
|
expected nil]
|
|
(is (= actual expected) "There should be no faults from a perfect object"))
|
|
(let [o (assoc perfect :age 10 :name "Sally")
|
|
actual (object-faults o)
|
|
expected nil]
|
|
(is (= actual expected) "Adding additional fields should not cause faults")))
|
|
(testing "Faults returned from improperly specified objects"
|
|
(let [o "not an object"
|
|
r (object-faults o)]
|
|
(let [expected 4
|
|
actual (count r)]
|
|
(is (= actual expected) "Expect to see four faults from a non-object"))
|
|
(let [expected 1
|
|
actual (count (filter-severity r :must))]
|
|
(is (= actual expected) "Expect one :critical fault from a non-object"))
|
|
(let [expected :not-an-object
|
|
actual (:fault (first (filter-severity r :must)))]
|
|
(is (= actual expected) "Expect the one :critical fault to be :not-an-object")))
|
|
(let [o {}
|
|
r (object-faults o)]
|
|
(let [expected 3
|
|
actual (count r)]
|
|
(is (= actual expected) "Expect to see three faults from an empty object"))
|
|
(let [expected 0
|
|
actual (count (filter-severity r :must))]
|
|
(is (= actual expected) "Expect no :critical faults from an empty object"))
|
|
(let [expected :no-context
|
|
actual (:fault (first (filter-severity r :minor)))]
|
|
(is (= actual expected) "Expect the one non-:minor fault to be :no-context")))
|
|
(let [o (dissoc perfect (keyword "@context"))
|
|
r (object-faults o)
|
|
expected :no-context
|
|
actual (:fault (first (filter-severity r :all)))]
|
|
(is (= actual expected)
|
|
"Expect the one fault from an object with no context to be :no-context."))
|
|
(let [o (dissoc perfect :id)
|
|
r (object-faults o)
|
|
expected :no-id-transient
|
|
actual (:fault (first (filter-severity r :all)))]
|
|
(is (= actual expected)
|
|
"Expect the one fault from an object with no id to be :no-id-transient."))
|
|
(let [o (dissoc perfect :type)
|
|
r (object-faults o)
|
|
expected :no-type
|
|
actual (:fault (first (filter-severity r :all)))]
|
|
(is (= actual expected)
|
|
"Expect the one fault from an object with no type to be :no-type.")))))
|
|
|
|
(deftest peristent-object-fault-tests
|
|
(let [perfect {(keyword "@context") activitystreams-context-uri
|
|
:id "https://somewhere.out.there/object/14323:1671654380083"
|
|
:type "Test"}]
|
|
(testing "no faults returned from fully specified objects"
|
|
(let [actual (persistent-object-faults perfect)
|
|
expected nil]
|
|
(is (= actual expected) "There should be no faults from a perfect object"))
|
|
(let [o (assoc perfect :age 10 :name "Sally")
|
|
actual (persistent-object-faults o)
|
|
expected nil]
|
|
(is (= actual expected) "Adding additional fields should not cause faults")))
|
|
(testing "faults specific to persistent objects"
|
|
(let [o (dissoc perfect :id)
|
|
expected 1
|
|
actual (count
|
|
(filter
|
|
#(= (:fault %) :no-id-persistent)
|
|
(persistent-object-faults o)))]
|
|
(is (= actual expected)
|
|
"The fault from a persistent object with no id should be :no-id-persistent"))
|
|
(let [o (assoc perfect :id "http://somewhere.out.there/object/14323:1671654380083")
|
|
expected :id-not-https
|
|
actual (-> o persistent-object-faults first :fault)]
|
|
(is (= actual expected)
|
|
"The fault from a persistent object with an HTTP id should be :id-not-https"))
|
|
(let [o (assoc perfect :id "not a valid URI")
|
|
expected :id-not-uri
|
|
actual (-> o persistent-object-faults first :fault)]
|
|
(is (= actual expected)
|
|
"The fault from a persistent object with an id which is not a valid URI should be :id-not-uri"))))) |