Skip to content

Commit

Permalink
Write some simple example-based tests for ABACUS import
Browse files Browse the repository at this point in the history
  • Loading branch information
egli committed Jul 2, 2024
1 parent 6367623 commit ce2ca1b
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 5 deletions.
61 changes: 61 additions & 0 deletions env/test/resources/SN_Alfresco_EB11111.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>

<AbaConnectContainer>
<Task>
<Parameter/>
<Transaction>
<DocumentData command="mdaDocModify">
<artikel_nr>EB11111</artikel_nr>
<title>Eine für de Thesi</title>
<MetaData>
<dc>
<title>Eine für de Thesi</title>
<creator>Gwerder, Anna</creator>
<source></source>
<language>de</language>
<identifier>EB11111</identifier>
<date>2011-12-23</date>
</dc>
<sbs>
<KST>54430</KST>
<untertitel/>
<verlag>DVA</verlag>
<verlagsort>Altdorf</verlagsort>
<auflageJahr>1. / 2011</auflageJahr>
<printPageNumber>311</printPageNumber>
<prodStatus>IN ARBEIT</prodStatus>
<datenErhalten>13.12.2011 (pdf per Mail) / ts</datenErhalten>
<schriftart>Grossdruck s/w</schriftart>
<endformat/>
<drucker>OCCS250</drucker>
<doppelseitig>doppelseitig</doppelseitig>
<bindung/>
<breite>0</breite>
<zeilen>0</zeilen>
<auszug/>
<zoom/>
<qualitaet/>
<prodPageSS>0</prodPageSS>
<bpz/>
<ervNr>0</ervNr>
<laufzettelNr>501097</laufzettelNr>
<rucksackNr>0</rucksackNr>
<altersgruppe/>
<gdBuchNr>0</gdBuchNr>
<prodPagePS>0</prodPagePS>
<anzahlBaende>0</anzahlBaende>
<anzahlRelief>0</anzahlRelief>
<vorlageHaus>ja</vorlageHaus>
<katalogEintrag>ja</katalogEintrag>
<verlagVerzeichnis>nein</verlagVerzeichnis>
<daisy_producer>ja</daisy_producer>
<Aufwand_A2>D</Aufwand_A2>
</sbs>
<ncc>
<setInfo>0</setInfo>
</ncc>
</MetaData>
</DocumentData>
</Transaction>
</Task>
</AbaConnectContainer>
15 changes: 10 additions & 5 deletions src/clj/daisyproducer2/documents/abacus.clj
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,10 @@
:narrator (string/join "; " (apply xml-> zipper (concat root-path path)))
(apply xml1-> zipper (concat root-path path)))))

(defn read-file
"Read an export file from ABACUS and return a map with all the data,
i.e. a document"
[file]
(let [zipper (-> file io/file xml/parse zip/xml-zip)]
(defn read-xml
"Read XML from ABACUS and return a map with all the data, i.e. a document"
[xml]
(let [zipper (-> xml zip/xml-zip)]
(->>
(for [key (keys param-mapping)
:let [val (extract-value zipper key)]
Expand All @@ -113,6 +112,12 @@
(into {})
clean-raw-document)))

(defn read-file
"Read an export file from ABACUS and return a map with all the data,
i.e. a document"
[file]
(read-xml (-> file io/file xml/parse)))

(def ^:private abacus-export-schema "schema/abacus_export.rng")

(def ^:private relevant-metadata-keys #{:title :author :date :source :source-date
Expand Down
71 changes: 71 additions & 0 deletions test/clj/daisyproducer2/test/abacus_import.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
(ns daisyproducer2.test.abacus-import
(:require
[clojure.java.io :as io]
[clojure.test :refer :all]
[daisyproducer2.documents.abacus :refer :all]
[java-time.api :as time]
[clojure.data.xml :as xml]))

(defn- xml-sample
[product-number title creator source language date production-series-number reihe aufwand daisyproducer?]
[:AbaConnectContainer
[:Task
[:Transaction
[:DocumentData
[:artikel_nr product-number]
[:title title]
[:MetaData
[:dc
[:title title]
[:creator creator]
[:source source]
[:language language]
[:date date]]
[:sbs
[:rucksackNr production-series-number]
[:reihe reihe]
[:daisy_producer (if daisyproducer? "ja" "nein")]
[:Aufwand_A2 aufwand]]]]]]])

(deftest abacus-import
(testing "ABACUS import"

(testing "Read XML"
(let [document {:product-number "EB11111"
:title "Eine für de Thesi"
:author "Gwerder, Anna"
:language "de"
:date (time/local-date "2011-12-23")
:publisher "SBS Schweizerische Bibliothek für Blinde, Seh- und Lesebehinderte"
:daisyproducer? false
:product-type :ebook}]
(are [expected data] (= expected (read-xml (xml/sexp-as-element (apply xml-sample data))))
document ["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "" false]
(assoc document :daisyproducer? true) ["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "" true]
(assoc document :production-series-number "500" :production-series "PPP")
["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 500 "" "" false]
(assoc document :production-series-number "7000" :production-series "SJW")
["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "SJW 7000" "" false]
(assoc document :product-number "GD11111" :product-type :large-print)
["GD11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "" false]
(assoc document :product-number "PS11111" :product-type :braille)
["PS11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "" false]
(assoc document :production-source "electronicData")
["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "D" false]
document
["EB11111" "Eine für de Thesi" "Gwerder, Anna" "" "de" "2011-12-23" 0 "" "C" false])))

(testing "Read a file"
(let [sample (io/file (io/resource "SN_Alfresco_EB11111.xml"))]
(is (= {:source-publisher "DVA"
:date (time/local-date "2011-12-23")
:source-edition "1. / 2011"
:publisher "SBS Schweizerische Bibliothek für Blinde, Seh- und Lesebehinderte"
:product-number "EB11111"
:title "Eine für de Thesi"
:author "Gwerder, Anna"
:production-source "electronicData"
:product-type :ebook
:language "de"
:daisyproducer? true}
(import-new-document-file sample)))))))

0 comments on commit ce2ca1b

Please sign in to comment.