| 1 | ;;+----------------------------------------------------------------------------- |
|---|
| 2 | ;;+ Isidorus |
|---|
| 3 | ;;+ (c) 2008-2010 Marc Kuester, Christoph Ludwig, Lukas Georgieff |
|---|
| 4 | ;;+ |
|---|
| 5 | ;;+ Isidorus is freely distributable under the LLGPL license. |
|---|
| 6 | ;;+ You can find a detailed description in trunk/docs/LLGPL-LICENSE.txt and |
|---|
| 7 | ;;+ trunk/docs/LGPL-LICENSE.txt. |
|---|
| 8 | ;;+----------------------------------------------------------------------------- |
|---|
| 9 | |
|---|
| 10 | (defpackage :atom-test |
|---|
| 11 | (:use |
|---|
| 12 | :common-lisp |
|---|
| 13 | :datamodel |
|---|
| 14 | :it.bese.FiveAM |
|---|
| 15 | :fixtures |
|---|
| 16 | :atom |
|---|
| 17 | :xml-tools |
|---|
| 18 | :cxml |
|---|
| 19 | :unittests-constants) |
|---|
| 20 | (:import-from :constants |
|---|
| 21 | *atom-ns* |
|---|
| 22 | *xtm2.0-ns*) |
|---|
| 23 | (:import-from :xml-tools |
|---|
| 24 | xpath-child-elems-by-qname |
|---|
| 25 | xpath-select-location-path) |
|---|
| 26 | (:import-from :exceptions |
|---|
| 27 | missing-reference-error |
|---|
| 28 | duplicate-identifier-error) |
|---|
| 29 | (:export :atom-test |
|---|
| 30 | :test-feed-to-string |
|---|
| 31 | :test-collection-configuration |
|---|
| 32 | :test-changes-feeds |
|---|
| 33 | :run-atom-tests)) |
|---|
| 34 | |
|---|
| 35 | ;test configuration |
|---|
| 36 | (in-package :atom-test) |
|---|
| 37 | |
|---|
| 38 | (def-suite atom-test :description "Tests for the Atom interface") |
|---|
| 39 | (in-suite atom-test) |
|---|
| 40 | |
|---|
| 41 | ;; (test test-snapshots () |
|---|
| 42 | ;; "test the behaviour of the snapshot feed" |
|---|
| 43 | ;; (with-fixture merge-test-db () |
|---|
| 44 | ;; (let* |
|---|
| 45 | ;; ((feed-string |
|---|
| 46 | ;; (snapshot-feed-to-string)) |
|---|
| 47 | ;; (feed-dom |
|---|
| 48 | ;; (cxml:parse feed-string (cxml-dom:make-dom-builder))) |
|---|
| 49 | ;; (feed-elem (dom:document-element feed-dom))) |
|---|
| 50 | ;; ;very initial test |
|---|
| 51 | ;; (is (= 3 (length (xpath-child-elems-by-qname feed-elem *atom-ns* "entry"))))))) |
|---|
| 52 | |
|---|
| 53 | (test test-feed-to-string () |
|---|
| 54 | (with-fixture atom-test-db () |
|---|
| 55 | (let* |
|---|
| 56 | ((worms-feed |
|---|
| 57 | (find "http://psi.egovpt.org/tm/worms" |
|---|
| 58 | (atom:subfeeds atom:*tm-feed*) |
|---|
| 59 | :test #'string= |
|---|
| 60 | :key #'atom:id)) |
|---|
| 61 | (datetime-revision3 |
|---|
| 62 | (atom::datetime-in-iso-format fixtures::revision3)) |
|---|
| 63 | (datetime-revision1 |
|---|
| 64 | (atom::datetime-in-iso-format fixtures::revision1)) |
|---|
| 65 | (collection-feed-string |
|---|
| 66 | (format nil "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>Topicmaps on psi.egovpt.org</a:title><a:id>http://london.ztt.fh-worms.de:8000/feeds</a:id><a:author><a:name>Isidor</a:name></a:author><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds\" rel=\"self\"></a:link><a:updated>~a</a:updated><a:entry xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>Data behind the portal of the city of Worms</a:title><a:id>http://psi.egovpt.org/tm/worms/entry</a:id><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms\" rel=\"alternate\"></a:link><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms\" rel=\"alternate\" type=\"application/atom+xml\"></a:link><a:author><a:name>Isidor</a:name></a:author><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms\" rel=\"http://www.egovpt.org/sdshare/collectionfeed\" type=\"application/atom+xml\"></a:link><a:updated>~a</a:updated></a:entry><a:entry xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>eGov Reference Ontology</a:title><a:id>http://psi.egovpt.org/tm/egov-ontology/entry</a:id><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/egov-ontology\" rel=\"alternate\"></a:link><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/egov-ontology\" rel=\"alternate\" type=\"application/atom+xml\"></a:link><a:author><a:name>Isidor</a:name></a:author><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/egov-ontology\" rel=\"http://www.egovpt.org/sdshare/collectionfeed\" type=\"application/atom+xml\"></a:link><a:updated>~a</a:updated></a:entry></a:feed>" datetime-revision3 datetime-revision3 datetime-revision1)) |
|---|
| 67 | (worms-feed-string |
|---|
| 68 | (format nil "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>Data behind the portal of the city of Worms</a:title><a:id>http://london.ztt.fh-worms.de:8000/feeds/worms</a:id><a:author><a:name>Isidor</a:name></a:author><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms\" rel=\"self\"></a:link><e:dependency>http://london.ztt.fh-worms.de:8000/feeds/egov-ontology</e:dependency><a:updated>~a</a:updated><a:entry xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>Snapshots of the Worms data</a:title><a:id>http://psi.egovpt.org/tm/worms/snapshots/entry</a:id><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms/snapshots\" rel=\"alternate\"></a:link><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms/snapshots\" rel=\"http://www.egovpt.org/sdshare/snapshotsfeed\" type=\"application/atom+xml\"></a:link><a:updated>~a</a:updated></a:entry><a:entry xmlns:a=\"http://www.w3.org/2005/Atom\" xmlns:e=\"http://www.egovpt.org/sdshare/\"><a:title>A list of all change fragments for the Worms data</a:title><a:id>http://psi.egovpt.org/tm/worms/fragments/entry</a:id><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms/fragments\" rel=\"alternate\"></a:link><a:link href=\"http://london.ztt.fh-worms.de:8000/feeds/worms/fragments\" rel=\"http://www.egovpt.org/sdshare/fragmentsfeed\" type=\"application/atom+xml\"></a:link><a:updated>~a</a:updated></a:entry></a:feed>" datetime-revision3 datetime-revision3 datetime-revision3))) |
|---|
| 69 | (is |
|---|
| 70 | (string= |
|---|
| 71 | collection-feed-string |
|---|
| 72 | (cxml:with-xml-output |
|---|
| 73 | (cxml:make-string-sink :canonical t) |
|---|
| 74 | (atom:feed-to-elem atom:*tm-feed*)))) |
|---|
| 75 | (is (eq 'atom::collection-feed (type-of worms-feed))) |
|---|
| 76 | (is |
|---|
| 77 | (string= |
|---|
| 78 | worms-feed-string |
|---|
| 79 | (cxml:with-xml-output |
|---|
| 80 | (cxml:make-string-sink :canonical t) |
|---|
| 81 | (atom:feed-to-elem worms-feed)))) |
|---|
| 82 | ))) |
|---|
| 83 | |
|---|
| 84 | (test test-changes-feeds () |
|---|
| 85 | "test the snapshots and fragments feeds" |
|---|
| 86 | (with-fixture atom-test-db () |
|---|
| 87 | (let* |
|---|
| 88 | ((worms-feed |
|---|
| 89 | (find "http://psi.egovpt.org/tm/worms" |
|---|
| 90 | (atom:subfeeds atom:*tm-feed*) |
|---|
| 91 | :test #'string= |
|---|
| 92 | :key #'atom:id)) |
|---|
| 93 | (ont-feed |
|---|
| 94 | (find "http://psi.egovpt.org/tm/egov-ontology" |
|---|
| 95 | (atom:subfeeds atom:*tm-feed*) |
|---|
| 96 | :test #'string= |
|---|
| 97 | :key #'atom:id)) |
|---|
| 98 | (fragments-feed |
|---|
| 99 | (find 'atom::fragments-feed |
|---|
| 100 | (atom:subfeeds worms-feed) |
|---|
| 101 | :key #'type-of)) |
|---|
| 102 | (snapshots-feed |
|---|
| 103 | (find 'atom::snapshots-feed |
|---|
| 104 | (atom:subfeeds worms-feed) |
|---|
| 105 | :key #'type-of))) |
|---|
| 106 | |
|---|
| 107 | (format t "~a~%~%~a~%" fragments-feed (map 'list #'atom::psi (atom:entries fragments-feed))) |
|---|
| 108 | (is (= 11 (length (atom:entries fragments-feed)))) |
|---|
| 109 | (is (string= "http://london.ztt.fh-worms.de:8000/feeds/worms/fragments" |
|---|
| 110 | (link fragments-feed))) |
|---|
| 111 | (is (string= "http://london.ztt.fh-worms.de:8000/feeds/worms/snapshots" |
|---|
| 112 | (link snapshots-feed))) |
|---|
| 113 | |
|---|
| 114 | (format t "~a" (cxml:with-xml-output |
|---|
| 115 | (cxml:make-string-sink :canonical t) |
|---|
| 116 | (atom::feed-to-elem fragments-feed))) |
|---|
| 117 | (is (= 3 (length (atom:entries snapshots-feed)))) |
|---|
| 118 | |
|---|
| 119 | ;;cross check against ontology feed (no changes there and |
|---|
| 120 | ;;only one snapshot) |
|---|
| 121 | (assert ont-feed) |
|---|
| 122 | (is (= 0 (length |
|---|
| 123 | (atom:entries |
|---|
| 124 | (find 'atom::fragments-feed |
|---|
| 125 | (atom:subfeeds ont-feed) |
|---|
| 126 | :key #'type-of))))) |
|---|
| 127 | (is (= 1 (length |
|---|
| 128 | (atom:entries |
|---|
| 129 | (find 'atom::snapshots-feed |
|---|
| 130 | (atom:subfeeds ont-feed) |
|---|
| 131 | :key #'type-of))))) |
|---|
| 132 | (format t "~a" |
|---|
| 133 | (cxml:with-xml-output |
|---|
| 134 | (cxml:make-string-sink :canonical t) |
|---|
| 135 | (atom:feed-to-elem snapshots-feed))) |
|---|
| 136 | ))) |
|---|
| 137 | |
|---|
| 138 | (test test-collection-configuration () |
|---|
| 139 | "test the configuration reader" |
|---|
| 140 | (with-fixture atom-test-db () |
|---|
| 141 | (let |
|---|
| 142 | ((collection-feeds (atom:subfeeds atom:*tm-feed*)) |
|---|
| 143 | (collection-entries (atom:entries atom:*tm-feed*))) |
|---|
| 144 | (is (= 2 (length collection-feeds))) |
|---|
| 145 | (is (= 2 (length collection-entries))) |
|---|
| 146 | (is (string= "psi.egovpt.org" (atom:id atom:*tm-feed*))) |
|---|
| 147 | |
|---|
| 148 | ;;id-test for feeds |
|---|
| 149 | (is-false |
|---|
| 150 | (set-exclusive-or |
|---|
| 151 | '("http://psi.egovpt.org/tm/egov-ontology" |
|---|
| 152 | "http://psi.egovpt.org/tm/worms" ) |
|---|
| 153 | (mapcar #'atom:id collection-feeds) :test #'string=)) |
|---|
| 154 | |
|---|
| 155 | ;;id-test for entries |
|---|
| 156 | ;!!!! |
|---|
| 157 | (is-false |
|---|
| 158 | (set-exclusive-or |
|---|
| 159 | '("http://psi.egovpt.org/tm/egov-ontology/entry" |
|---|
| 160 | "http://psi.egovpt.org/tm/worms/entry" ) |
|---|
| 161 | (mapcar #'atom:id collection-entries) :test #'string=)) |
|---|
| 162 | |
|---|
| 163 | |
|---|
| 164 | ;;test relative paths for feeds |
|---|
| 165 | (is-false |
|---|
| 166 | (set-exclusive-or |
|---|
| 167 | '("feeds/egov-ontology" |
|---|
| 168 | "feeds/worms") |
|---|
| 169 | (mapcar #'atom:path collection-feeds) :test #'string=)) |
|---|
| 170 | |
|---|
| 171 | ;;test relative paths for entries (the same as for feeds) |
|---|
| 172 | (is-false |
|---|
| 173 | (set-exclusive-or |
|---|
| 174 | '("feeds/egov-ontology" |
|---|
| 175 | "feeds/worms") |
|---|
| 176 | (mapcar #'atom:path collection-entries) :test #'string=)) |
|---|
| 177 | |
|---|
| 178 | ;;test self links for feeds |
|---|
| 179 | (is-false |
|---|
| 180 | (set-exclusive-or |
|---|
| 181 | '("http://london.ztt.fh-worms.de:8000/feeds/egov-ontology" |
|---|
| 182 | "http://london.ztt.fh-worms.de:8000/feeds/worms") |
|---|
| 183 | (mapcar #'atom:link collection-feeds) :test #'string=)) |
|---|
| 184 | ;;test alternate links for entries (the same as the one of |
|---|
| 185 | ;;the feed they point to) |
|---|
| 186 | (is-false |
|---|
| 187 | (set-exclusive-or |
|---|
| 188 | '("http://london.ztt.fh-worms.de:8000/feeds/egov-ontology" |
|---|
| 189 | "http://london.ztt.fh-worms.de:8000/feeds/worms") |
|---|
| 190 | (mapcar #'atom:link collection-entries) :test #'string=)) |
|---|
| 191 | |
|---|
| 192 | ;;test dependencies |
|---|
| 193 | (is-false |
|---|
| 194 | (set-exclusive-or |
|---|
| 195 | '(() ("http://london.ztt.fh-worms.de:8000/feeds/egov-ontology")) |
|---|
| 196 | (mapcar #'atom:dependency collection-feeds) :test #'equal)) |
|---|
| 197 | |
|---|
| 198 | ;;test types for feeds |
|---|
| 199 | (is-false |
|---|
| 200 | (set-exclusive-or |
|---|
| 201 | '(atom::collection-feed |
|---|
| 202 | atom::collection-feed) |
|---|
| 203 | (mapcar #'type-of collection-feeds))) |
|---|
| 204 | |
|---|
| 205 | ;;test types for entries |
|---|
| 206 | (is-false |
|---|
| 207 | (set-exclusive-or |
|---|
| 208 | '(atom::overview-entry |
|---|
| 209 | atom::overview-entry) |
|---|
| 210 | (mapcar #'type-of collection-entries))) |
|---|
| 211 | ))) |
|---|
| 212 | |
|---|
| 213 | |
|---|
| 214 | (defun run-atom-tests() |
|---|
| 215 | (it.bese.fiveam:run! 'test-feed-to-string) |
|---|
| 216 | (it.bese.fiveam:run! 'test-changes-feeds) |
|---|
| 217 | (it.bese.fiveam:run! 'test-collection-configuration)) |
|---|