Guest User

Untitled

a guest
Mar 6th, 2018
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. (ns clojure-couchdb
  2. (:use com.ashafa.couchdb
  3. (clojure.contrib [test-is :as test-is])))
  4.  
  5. (set-couchdb-config! {:language "clojure"})
  6.  
  7. (def test-doc-1 {:name "John Smith"
  8. :email "john.smith@test.com"
  9. :score 65})
  10.  
  11. (def test-doc-2 {:name "Jane Thompson"
  12. :email "jane.thompson@test.com"
  13. :score 98})
  14.  
  15. (def test-doc-3 {:name "Robert Jones"
  16. :email "robert.jones@example.com"
  17. :score 80})
  18.  
  19. (def test-doc-4 {:name "Sarah Parker"
  20. :email "sarah.parker@example.com"
  21. :score 59})
  22.  
  23. (def names-with-score-over-70-view (with-clj-map-reduce
  24. #(if (> (:score %) 70) [nil (:name %)])))
  25.  
  26. (def sum-of-all-scores-view (with-clj-map-reduce
  27. (fn [doc] [nil (:score doc)]) ;map
  28. (fn [keys values _] (apply + values)))) ;reduce
  29.  
  30. (defmacro defdbtest [name & body]
  31. `(deftest ~name
  32. (try
  33. (create-database "test_db")
  34. (with-db "test_db" ~@body)
  35. (finally
  36. (delete-database "test_db")))))
  37.  
  38. (defdbtest create-a-document
  39. (is (contains? (create-doc test-doc-1) :id)))
  40.  
  41. (defdbtest create-a-document-with-id
  42. (is (= "my_id" (:id (create-doc-with-id "my_id" test-doc-2)))))
  43.  
  44. (defdbtest get-a-document
  45. (let [doc-meta (create-doc test-doc-3)]
  46. (is (= (test-doc-3 :name) (:name (get-doc (doc-meta :id)))))))
  47.  
  48. (defdbtest update-a-document
  49. (let [id (:id (create-doc test-doc-4))]
  50. (update-doc (get-doc id) {:email "test@example.com"})
  51. (is (= "test@example.com" (:email (get-doc id))))))
  52.  
  53. (defdbtest update-a-document-with-a-function
  54. (let [id (:id (create-doc test-doc-4))]
  55. (update-doc (get-doc id) (partial + 4) [:score])
  56. (is (= 63 (:score (get-doc id))))))
  57.  
  58. (defdbtest get-all-documents-meta
  59. (create-doc test-doc-1)
  60. (create-doc test-doc-2)
  61. (create-doc test-doc-3)
  62. (is (= 3 (:total_rows (get-all-docs)))))
  63.  
  64. (defdbtest get-all-documents-using-query-params
  65. (create-doc-with-id 1 test-doc-1)
  66. (create-doc-with-id 2 test-doc-2)
  67. (create-doc-with-id 3 test-doc-3)
  68. (is (= "Robert Jones" (-> (get-all-docs {:include_docs true :descending true})
  69. :rows first :doc :name))))
  70.  
  71. (defdbtest create-a-design-view
  72. (let [design-doc-meta (create-view "users" :names-with-score-over-70 names-with-score-over-70-view)]
  73. (is (map? (-> (get-doc (design-doc-meta :id)) :views :names-with-score-over-70)))))
  74.  
  75. (defdbtest use-a-design-view-with-only-map
  76. (create-doc test-doc-1)
  77. (create-doc test-doc-2)
  78. (create-doc test-doc-3)
  79. (create-doc test-doc-4)
  80. (create-view "users" :names-with-score-over-70 names-with-score-over-70-view)
  81. (is (= #{"Robert Jones" "Jane Thompson"}
  82. (set (map :value (:rows (get-view "users" :names-with-score-over-70)))))))
  83.  
  84. (defdbtest use-a-design-view-with-both-map-and-reduce
  85. (create-doc test-doc-1)
  86. (create-doc test-doc-2)
  87. (create-doc test-doc-3)
  88. (create-doc test-doc-4)
  89. (create-view "scores" :sum-of-all-scores sum-of-all-scores-view)
  90. (is (= 302 (-> (get-view "scores" :sum-of-all-scores) :rows first :value))))
  91.  
  92. (defdbtest use-a-tempoary-view
  93. (create-doc test-doc-1)
  94. (create-doc test-doc-2)
  95. (create-doc test-doc-3)
  96. (create-doc test-doc-4)
  97. (is (= #{"robert.jones@example.com" "sarah.parker@example.com"}
  98. (set (map :value (:rows (get-tempoary-view
  99. (with-clj-map-reduce
  100. (fn [doc] (if (re-find #"example\.com$" (:email doc))
  101. [nil (:email doc)]))))))))))
  102.  
  103. (defdbtest use-a-tempoary-view-using-javascript-view-server
  104. (create-doc test-doc-1)
  105. (create-doc test-doc-2)
  106. (create-doc test-doc-3)
  107. (create-doc test-doc-4)
  108. (is (= #{"john.smith@test.com" "jane.thompson@test.com"}
  109. (set (map :value (:rows (get-tempoary-view
  110. {:language "javascript"
  111. :map "function(doc){if(doc.email.indexOf('test.com')>0)emit(null,doc.email);}"})))))))
  112.  
  113.  
  114. (run-tests)
Add Comment
Please, Sign In to add comment