diff --git a/exist-app/modules/testtrigger.xqm b/exist-app/modules/testtrigger.xqm index 2609b0f4a5d3a5eb377f21e093e5f4b455927a7a..997d4ed55e95d4e568a14344fbfeb4080282d49c 100644 --- a/exist-app/modules/testtrigger.xqm +++ b/exist-app/modules/testtrigger.xqm @@ -1,70 +1,56 @@ xquery version "3.1"; - (:~ - : Providing an API endpoint for triggering test execution. - : This endpoint has been established instead of the text execution in post-install.xq - : since at this point the RESTXQ API isn't fired up yet which causes the tests to throw errors. - : - : @author Michelle Weidling - : @since 0.4.0 + : Script providing access to the test functions (XQSuite) for local unit test + : execution. + : Elevated rights (dba/admin) are required for some tests. :) -module namespace testtrigger="http://ahikar.sub.uni-goettingen.de/ns/testtrigger"; - -import module namespace rest="http://exquery.org/ns/restxq"; +import module namespace ttt="http://ahikar.sub.uni-goettingen.de/ns/tapi/txt/tests" at "tapi-txt-tests.xqm"; +import module namespace ct="http://ahikar.sub.uni-goettingen.de/ns/commons-tests" at "commons-tests.xqm"; +import module namespace tct="http://ahikar.sub.uni-goettingen.de/ns/tapi/collection/tests" at "tapi-collection-tests.xqm"; import module namespace test="http://exist-db.org/xquery/xqsuite" at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; - -import module namespace ct="http://ahikar.sub.uni-goettingen.de/ns/commons-tests" at "../tests/commons-tests.xqm"; -import module namespace t2ht="http://ahikar.sub.uni-goettingen.de/ns/tei2html-tests" at "../tests/tei2html-tests.xqm"; -import module namespace t2htextt="http://ahikar.sub.uni-goettingen.de/ns/tei2html-textprocessing-tests" at "../tests/tei2html-textprocessing-tests.xqm"; -import module namespace ttt="http://ahikar.sub.uni-goettingen.de/ns/tapi/txt/tests" at "../tests/tapi-txt-tests.xqm"; -import module namespace tct="http://ahikar.sub.uni-goettingen.de/ns/tapi/collection/tests" at "../tests/tapi-collection-tests.xqm"; -import module namespace thtmlt="http://ahikar.sub.uni-goettingen.de/ns/tapi/html/tests" at "../tests/tapi-html-tests.xqm"; -import module namespace titemt="http://ahikar.sub.uni-goettingen.de/ns/tapi/item/tests" at "../tests/tapi-item-tests.xqm"; -import module namespace tmt="http://ahikar.sub.uni-goettingen.de/ns/tapi/manifest/tests" at "../tests/tapi-manifest-tests.xqm"; -import module namespace tt="http://ahikar.sub.uni-goettingen.de/ns/tapi/tests" at "../tests/tapi-tests.xqm"; +import module namespace thtmlt="http://ahikar.sub.uni-goettingen.de/ns/tapi/html/tests" at "tapi-html-tests.xqm"; +import module namespace titemt="http://ahikar.sub.uni-goettingen.de/ns/tapi/item/tests" at "tapi-item-tests.xqm"; +import module namespace tmt="http://ahikar.sub.uni-goettingen.de/ns/tapi/manifest/tests" at "tapi-manifest-tests.xqm"; +import module namespace tt="http://ahikar.sub.uni-goettingen.de/ns/tapi/tests" at "tapi-tests.xqm"; +import module namespace t2ht="http://ahikar.sub.uni-goettingen.de/ns/tei2html-tests" at "tei2html-tests.xqm"; +import module namespace t2htextt="http://ahikar.sub.uni-goettingen.de/ns/tei2html-textprocessing-tests" at "tei2html-textprocessing-tests.xqm"; import module namespace at="http://ahikar.sub.uni-goettingen.de/ns/annotations/tests" at "../tests/annotation-tests.xqm"; -(:~ - : Triggers the tests for the Ahikar backend. Called by the CI. - : - : @param $token A CI token - : @return item() A log message to std out. In the Docker environment, this goes to exist.log. - : @error The deploy token provided is incorrect - :) -declare - %rest:GET - %rest:HEAD - %rest:path("/trigger-tests") - %rest:query-param("token", "{$token}") -function testtrigger:trigger($token) -as item()? { - if( $token ne environment-variable("APP_DEPLOY_TOKEN" )) - then error(QName("error://1", "deploy"), "Deploy token incorrect.") - else - let $sysout := util:log-system-out("TextAPI and package installation done. running tests…") - let $tests := - ( - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/commons-tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/collection/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tei2html-tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tei2html-textprocessing-tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/txt/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/manifest/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/item/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/html/tests")), - test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/annotations/tests")) - ) - - let $fileSeparator := util:system-property("file.separator") - let $system-path := system:get-exist-home() || $fileSeparator - - let $testWrap := <tests time="{current-dateTime()}">{ $tests }</tests> - - let $filename := $system-path || "ahikar-test-results.xml" - let $file := file:serialize($testWrap, $filename, ()) - - return - util:log-system-out("Tests complete. See " || $filename) -}; \ No newline at end of file +declare function local:get-human-readable-pkg-name($package as xs:string) +as xs:string? { + switch ($package) + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/tests" return "TextAPI general" + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/txt/tests" return "TXT creation" + case "http://ahikar.sub.uni-goettingen.de/ns/commons-tests" return "Commons" + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/collection/tests" return "TextAPI Collections" + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/manifest/tests" return "TextAPI Manifests" + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/item/tests" return "TextAPI Items" + case "http://ahikar.sub.uni-goettingen.de/ns/tapi/html/tests" return "HTML creation" + case "http://ahikar.sub.uni-goettingen.de/ns/tei2html-tests" return "TEI2HTML transformation" + case "http://ahikar.sub.uni-goettingen.de/ns/tei2html-textprocessing-tests" return "TEI2HTML text processing" + case "http://ahikar.sub.uni-goettingen.de/ns/annotations/tests" return "AnnotationAPI" + default return () +}; + +let $test-results := + ( + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/txt/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/commons-tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/collection/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/manifest/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/item/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tapi/html/tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tei2html-tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/tei2html-textprocessing-tests")), + test:suite(util:list-functions("http://ahikar.sub.uni-goettingen.de/ns/annotations/tests")) + ) + +for $result in $test-results +order by $result//@package return + if ($result//@failures = 0 + and $result//@errors = 0) then + <OK name="{local:get-human-readable-pkg-name($result//@package)}" package="{$result//@package}"/> + else + $result \ No newline at end of file