From eae64cbbe14efcfb6bb933148d992525a92f212c Mon Sep 17 00:00:00 2001 From: Christian Mueller Date: Sun, 5 Jan 2014 15:21:12 +0100 Subject: [PATCH] API tests implemented --- API.md | 8 +-- src/NoteHub/api.clj | 11 ++++ test/NoteHub/test/api.clj | 62 +++++++++++++++++++++ test/NoteHub/test/storage.clj | 102 +++++++++++++++++----------------- 4 files changed, 128 insertions(+), 55 deletions(-) create mode 100644 src/NoteHub/api.clj create mode 100644 test/NoteHub/test/api.clj diff --git a/API.md b/API.md index cd37b7b..41e1b2a 100644 --- a/API.md +++ b/API.md @@ -14,7 +14,7 @@ All API requests must be issued with one special parameter `version` denoting th A simple `GET` request to the following URL: - http://notehub.org/api/get-note?version=1.0&title= + http://notehub.org/api/note?version=1.0&title= will return a JSON object containing following self explaining fields: `note`, `longURL`, `shortURL`, `statistics`, `status`. @@ -42,7 +42,7 @@ The note ID is a string, containing the date of publishing and a few first words A note must be created by a `POST` request to the following URL: - http://notehub.org/api/post-note + http://notehub.org/api/note with the following parameters: @@ -74,9 +74,9 @@ The status object serves the same purpose as in the case of note retrieval. ## Note Update -To update a note, an `UPDATE` request must be issued to the following URL: +To update a note, an `PUT` request must be issued to the following URL: - http://notehub.org/api/update-note + http://notehub.org/api/note with the following parameters: diff --git a/src/NoteHub/api.clj b/src/NoteHub/api.clj new file mode 100644 index 0000000..159e6ca --- /dev/null +++ b/src/NoteHub/api.clj @@ -0,0 +1,11 @@ +(ns NoteHub.api) + +(def api-version "1.0") + +(defn get-signature [& args]) +(defn post-note [& args]) +(defn get-note [& args]) +(defn update-note [& args]) +(defn register-publisher [& args]) +(defn revoke-publisher [& args]) +(defn valid-publisher? [& args]) diff --git a/test/NoteHub/test/api.clj b/test/NoteHub/test/api.clj new file mode 100644 index 0000000..18946b4 --- /dev/null +++ b/test/NoteHub/test/api.clj @@ -0,0 +1,62 @@ +(ns NoteHub.test.api + (:use [NoteHub.api] [clojure.test])) + +(def note "Hello world, this is a test note!") +(def note2 "Another test note") +(def pid "somePlugin") +(def pid2 "somePlugin2") +(def ver api-version) + +(defmacro isnt [arg] `(is (not ~arg))) + +(defn register-publisher-fixture [f] + (def psk (register-publisher pid)) + (f) + (revoke-publisher pid)) + +(deftest api + (testing "API" + (testing "signature implementation" + (is (= 3577853521 (get-signature "Lorem ipsum dolor sit amet" "abcdef"))) + (is (= -180217198 (get-signature "Notehub is a free pastebin for markdown" "12345678"))) + (is (= 6887137804 (get-signature "abcd !§$%& параграф" "A VERY LONG KEY")))) + (testing "publisher registration" + (let [psk2 (register-publisher pid2)] + (is (valid-publisher? pid)) + (is (valid-publisher? pid2)) + (is (revoke-publisher pid2)) + (isnt (revoke-publisher "anyPID")) + (isnt (valid-publisher? "any_PID")) + (isnt (valid-publisher? pid2)))) + (testing "note publishing & retrieval" + (let [post-response (post-note note pid (get-signature note psk) ver) + get-response (get-note ver (:noteID post-response))] + (is (:success (:status post-response))) + (is (:success (:status get-response))) + (is (= note (:note get-response))) + (is (= (:longURL post-response) (:longURL get-response))) + (is (= (:shortURL post-response) (:shortURL get-response)))) + (isnt (:success (:status (post-note note pid (get-signature note2 psk) ver)))) + (isnt (:success (:status (post-note note pid (get-signature note "random_psk") ver)))) + (is (:success (:status (post-note note pid (get-signature note psk) ver)))) + (let [psk2 (register-publisher "randomPID")] + (is (:success (:status (post-note note "randomPID" (get-signature note psk2) ver)))) + (is (revoke-publisher pid2)) + (isnt (:success (:status (post-note note "randomPID" (get-signature note psk2) ver)))))) + (testing "note update" + (let [post-response (post-note note pid (get-signature note psk) ver "passwd") + note-id (:noteID post-response) + get-response (get-note ver note-id) + new-note "a new note!" + update-response (update-note note-id new-note pid (get-signature new-note psk) ver "passwd") + get-response-new (get-note ver note-id) + update-response-false (update-note note-id new-note pid (get-signature new-note psk) ver "pass") + ] + (is (:success (:status post-response))) + (is (:success (:status get-response))) + (is (:success (:status get-response-new))) + (is (:success (:status update-response))) + (isnt (:success (:status update-response-false))) + (is (= note (:note get-response))) + (is (= new-note (:note get-response-new))) + (is (= new-note (:note (get-note note-id)))))))) diff --git a/test/NoteHub/test/storage.clj b/test/NoteHub/test/storage.clj index cee6434..d8544ce 100644 --- a/test/NoteHub/test/storage.clj +++ b/test/NoteHub/test/storage.clj @@ -13,54 +13,54 @@ (deftest storage - (testing "Storage" - (testing "of short-url mechanism" - (let [url (create-short-url metadata) - url2 (create-short-url metadata)] - (is (short-url-exists? url)) - (is (= url url2)) - (is (= metadata (resolve-url url))) - (is (not (do - (delete-short-url url) - (short-url-exists? url)))))) - (testing "of correct note creation" - (is (= (do - (set-note date test-title test-note) - (get-note date test-title)) - test-note)) - (is (= "1" (get-note-views date test-title))) - (is (= (do - (get-note date test-title) - (get-note-views date test-title)) - "2"))) - (testing "of note update" - (is (= (do - (set-note date test-title test-note "12345qwert") - (get-note date test-title)) - test-note)) - (is (= (do - (update-note (build-key date test-title) "update" "12345qwert") - (get-note date test-title)) - "update")) - (is (= (do - (update-note (build-key date test-title) "not authorized" "44444") - (get-note date test-title)) - "update"))) - (testing "of the note access" - (is (not= (get-note date test-title) "any text"))) - (testing "session management" - (let [s1 (create-session) - s2 (create-session) - s3 (create-session)] - (is (invalidate-session s1)) - (is (not (invalidate-session (str s1 s2)))) - (is (invalidate-session s2)) - (is (not (invalidate-session "wrongtoken"))) - (is (invalidate-session s3)))) - (testing "of note existence" - (is (note-exists? date test-title)) - (is (not (do - (delete-note date test-title) - (note-exists? date test-title)))) - (is (not (note-exists? [2013 06 03] test-title))) - (is (not (note-exists? date "some title")))))) + (testing "Storage" + (testing "of short-url mechanism" + (let [url (create-short-url metadata) + url2 (create-short-url metadata)] + (is (short-url-exists? url)) + (is (= url url2)) + (is (= metadata (resolve-url url))) + (is (not (do + (delete-short-url url) + (short-url-exists? url)))))) + (testing "of correct note creation" + (is (= (do + (set-note date test-title test-note) + (get-note date test-title)) + test-note)) + (is (= "1" (get-note-views date test-title))) + (is (= (do + (get-note date test-title) + (get-note-views date test-title)) + "2"))) + (testing "of note update" + (is (= (do + (set-note date test-title test-note "12345qwert") + (get-note date test-title)) + test-note)) + (is (= (do + (update-note (build-key date test-title) "update" "12345qwert") + (get-note date test-title)) + "update")) + (is (= (do + (update-note (build-key date test-title) "not authorized" "44444") + (get-note date test-title)) + "update"))) + (testing "of the note access" + (is (not= (get-note date test-title) "any text"))) + (testing "session management" + (let [s1 (create-session) + s2 (create-session) + s3 (create-session)] + (is (invalidate-session s1)) + (is (not (invalidate-session (str s1 s2)))) + (is (invalidate-session s2)) + (is (not (invalidate-session "wrongtoken"))) + (is (invalidate-session s3)))) + (testing "of note existence" + (is (note-exists? date test-title)) + (is (not (do + (delete-note date test-title) + (note-exists? date test-title)))) + (is (not (note-exists? [2013 06 03] test-title))) + (is (not (note-exists? date "some title"))))))