blob: 65fb8c59f774d47b70e2314974d70abf5a1e9080 [file] [log] [blame]
Akrone2161562022-12-19 17:05:39 +01001package main
2
3import (
Akrona1f100a2023-03-07 11:03:01 +01004 "compress/gzip"
5 "io"
Akrone2161562022-12-19 17:05:39 +01006 "net/http"
7 "net/http/httptest"
Akronce286af2022-12-28 13:58:26 +01008 "os"
Akrone2161562022-12-19 17:05:39 +01009 "testing"
10
11 "github.com/stretchr/testify/assert"
12)
13
Akron5e1252e2022-12-19 17:57:56 +010014func TestMappingRoute(t *testing.T) {
Akrone2161562022-12-19 17:05:39 +010015
16 dir := t.TempDir()
17
Akrona1f100a2023-03-07 11:03:01 +010018 InitDB(dir)
Akrone2161562022-12-19 17:05:39 +010019 defer closeDB()
20 router := setupRouter()
21
22 w := httptest.NewRecorder()
23 req, _ := http.NewRequest(http.MethodGet, "/s10/s10/s10", nil)
24
25 router.ServeHTTP(w, req)
26
27 assert.Equal(t, http.StatusNotFound, w.Code)
28 assert.Equal(t, "No entry found", w.Body.String())
29
Akrona1f100a2023-03-07 11:03:01 +010030 assert.Nil(t, add(db, "s11", "s12", "s13", "sueddeutsche", "http://example.org"))
Akrone2161562022-12-19 17:05:39 +010031
32 w = httptest.NewRecorder()
33 req, _ = http.NewRequest(http.MethodGet, "/s11/s12/s13", nil)
34
35 router.ServeHTTP(w, req)
36 assert.Equal(t, http.StatusOK, w.Code)
Akron79d83482023-01-02 10:53:24 +010037 assert.Equal(t, w.Header().Get("Access-Control-Allow-Origin"), "null")
38 assert.Equal(t, w.Header().Get("Access-Control-Allow-Credentials"), "null")
39 assert.Equal(t, w.Header().Get("Vary"), "Origin")
Akron6aee7fe2022-12-20 16:00:54 +010040 assert.Equal(t, "sueddeutsche,http://example.org", w.Body.String())
Akron906a2c52022-12-21 11:35:28 +010041
42 w = httptest.NewRecorder()
43 req, _ = http.NewRequest(http.MethodGet, "/s11/s12/s14", nil)
44
45 router.ServeHTTP(w, req)
46 assert.Equal(t, http.StatusNotFound, w.Code)
47 assert.Equal(t, "No entry found", w.Body.String())
Akrone2161562022-12-19 17:05:39 +010048}
Akron5e1252e2022-12-19 17:57:56 +010049
Akron60e11602023-01-02 11:16:43 +010050func TestWidgetRoute(t *testing.T) {
Akron5e1252e2022-12-19 17:57:56 +010051
52 router := setupRouter()
53
54 w := httptest.NewRecorder()
Akronf1adbe02022-12-21 10:32:21 +010055 req, _ := http.NewRequest(http.MethodGet, "/", nil)
Akron5e1252e2022-12-19 17:57:56 +010056
57 router.ServeHTTP(w, req)
58
59 assert.Equal(t, http.StatusOK, w.Code)
Akron79d83482023-01-02 10:53:24 +010060 assert.Equal(t, w.Header().Get("Access-Control-Allow-Origin"), "null")
61 assert.Equal(t, w.Header().Get("Access-Control-Allow-Credentials"), "null")
62 assert.Equal(t, w.Header().Get("Vary"), "Origin")
Akronce286af2022-12-28 13:58:26 +010063 assert.Contains(t, w.Body.String(), "data-server=\"https://korap.ids-mannheim.de\"")
Akronde331792023-01-10 11:36:15 +010064 assert.Contains(t, w.Body.String(), "<title>External Resources</title>")
Akronce286af2022-12-28 13:58:26 +010065
66 os.Setenv("KORAP_SERVER", "https://korap.ids-mannheim.de/instance/test")
67
68 router = setupRouter()
69
70 w = httptest.NewRecorder()
71 req, _ = http.NewRequest(http.MethodGet, "/", nil)
72
73 router.ServeHTTP(w, req)
74
75 assert.Equal(t, http.StatusOK, w.Code)
Akronf1adbe02022-12-21 10:32:21 +010076 assert.Contains(t, w.Body.String(), "data-server=\"https://korap.ids-mannheim.de/instance/test\"")
Akronde331792023-01-10 11:36:15 +010077 assert.Contains(t, w.Body.String(), "<title>External Resources</title>")
Akron5e1252e2022-12-19 17:57:56 +010078}
Akron60e11602023-01-02 11:16:43 +010079
Akron65503a32023-01-02 12:38:32 +010080func TestManifestRoute(t *testing.T) {
Akron60e11602023-01-02 11:16:43 +010081
82 router := setupRouter()
83
84 w := httptest.NewRecorder()
85 req, _ := http.NewRequest(http.MethodGet, "/plugin.json", nil)
86
87 router.ServeHTTP(w, req)
88
89 assert.Equal(t, http.StatusOK, w.Code)
Akron65503a32023-01-02 12:38:32 +010090 assert.Contains(t, w.Header().Get("Content-Type"), "application/json")
Akron60e11602023-01-02 11:16:43 +010091 assert.Contains(t, w.Body.String(), "permissions")
Akron65503a32023-01-02 12:38:32 +010092 assert.Contains(t, w.Body.String(), "/plugin/external")
93
Akronde331792023-01-10 11:36:15 +010094 os.Setenv("KORAP_EXTERNAL_RESOURCES", "https://korap.ids-mannheim.de/plugin/fun")
Akron65503a32023-01-02 12:38:32 +010095
96 router = setupRouter()
97
98 w = httptest.NewRecorder()
99 req, _ = http.NewRequest(http.MethodGet, "/plugin.json", nil)
100
101 router.ServeHTTP(w, req)
102
103 assert.Equal(t, http.StatusOK, w.Code)
104 assert.Contains(t, w.Header().Get("Content-Type"), "application/json")
105 assert.Contains(t, w.Body.String(), "permissions")
106 assert.Contains(t, w.Body.String(), "/plugin/fun")
Akrona1f100a2023-03-07 11:03:01 +0100107}
108
109func TestIndexer(t *testing.T) {
110
111 dir := t.TempDir()
112
113 dbx := initDB(dir)
114 defer dbx.Close()
115
116 // Test index plain
117 file, err := os.Open("testdata/sz_mapping_example1.csv")
118 assert.Nil(t, err)
119 defer file.Close()
120 indexDB(file, dbx)
121
122 // Test index gzip
123 file, err = os.Open("testdata/sz_mapping_example2.csv.gz")
124 assert.Nil(t, err)
125 defer file.Close()
126 var gzipr io.Reader
127 gzipr, err = gzip.NewReader(file)
128 assert.Nil(t, err)
129 indexDB(gzipr, dbx)
130
131 txn := dbx.NewTransaction(true)
132 defer txn.Discard()
133
134 item, err := txn.Get([]byte("U92/JAN/00001"))
135 assert.Nil(t, err)
136 err = item.Value(func(val []byte) error {
137 assert.Equal(t, string(val), "S&uuml;ddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A800000")
138 return nil
139 })
140 assert.Nil(t, err)
141
142 item, err = txn.Get([]byte("U92/JAN/00003"))
143 assert.Nil(t, err)
144 err = item.Value(func(val []byte) error {
145 assert.Equal(t, string(val), "S&uuml;ddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A800010")
146 return nil
147 })
148 assert.Nil(t, err)
149
150 item, err = txn.Get([]byte("U92/FEB/00003"))
151 assert.Nil(t, err)
152 err = item.Value(func(val []byte) error {
153 assert.Equal(t, string(val), "S&uuml;ddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A806912")
154 return nil
155 })
156 assert.Nil(t, err)
Akron65503a32023-01-02 12:38:32 +0100157
Akron60e11602023-01-02 11:16:43 +0100158}