blob: 5e6869e237bca5da2dab8627f93e666c028388cf [file] [log] [blame]
Akron0e1ed242018-10-11 13:22:00 +02001use Mojo::Base -strict;
2use Test::Mojo;
3use Test::More;
Akron32396632018-10-11 17:08:37 +02004use Mojo::File qw/path/;
Akron909ed082019-12-11 21:38:27 +01005use Kalamar::Controller::Search;
Akron32396632018-10-11 17:08:37 +02006
7
8#####################
9# Start Fake server #
10#####################
Akron63d963b2019-07-05 15:35:51 +020011my $mount_point = '/realapi/';
Akron32396632018-10-11 17:08:37 +020012$ENV{KALAMAR_API} = $mount_point;
Akron0e1ed242018-10-11 13:22:00 +020013
Akronc4177492023-11-29 08:35:37 +010014my $t = Test::Mojo->new('Kalamar' => {
15 Localize => {
16 dict => {
17 title_addon => 'Test'
18 }
19 }
20});
Akron0e1ed242018-10-11 13:22:00 +020021
Akron32396632018-10-11 17:08:37 +020022# Mount fake backend
23# Get the fixture path
Akron73f36082018-10-25 15:34:59 +020024my $fixtures_path = path(Mojo::File->new(__FILE__)->dirname, 'server');
Akron32396632018-10-11 17:08:37 +020025my $fake_backend = $t->app->plugin(
26 Mount => {
27 $mount_point =>
Akron73f36082018-10-25 15:34:59 +020028 $fixtures_path->child('mock.pl')
Akron32396632018-10-11 17:08:37 +020029 }
30);
31# Configure fake backend
32$fake_backend->pattern->defaults->{app}->log($t->app->log);
33
Akronbc6b3f22021-01-13 14:53:12 +010034my $q = qr!(?:\"|")!;
35
Akron0e1ed242018-10-11 13:22:00 +020036# Query passed
Akron58c60992021-09-07 13:11:43 +020037my $err = $t->get_ok('/?q=baum')
Akron0e1ed242018-10-11 13:22:00 +020038 ->status_is(200)
Akron69481a42021-03-22 10:31:16 +010039 ->content_type_is('text/html;charset=UTF-8')
Akron8ea84292018-10-24 13:41:52 +020040
Akronc4177492023-11-29 08:35:37 +010041 ->text_is('title', 'KorAP-Test: Find »baum« with Poliqarp')
42 ->element_exists('meta[name="DC.title"][content="KorAP-Test: Find »baum« with Poliqarp"]')
Akron0e1ed242018-10-11 13:22:00 +020043 ->element_exists('body[itemscope][itemtype="http://schema.org/SearchResultsPage"]')
Akrondffa9392018-10-12 16:26:09 +020044
45 # Total results
Akron32396632018-10-11 17:08:37 +020046 ->text_is('#total-results', 51)
Akrondffa9392018-10-12 16:26:09 +020047
48 # Total pages
Akron18a2a272020-06-16 11:47:38 +020049 ->element_count_is('#pagination > a', 5)
Akrondffa9392018-10-12 16:26:09 +020050
Akron9bd140e2021-07-27 16:20:03 +020051 ->element_exists_not('#resultinfo > #pagination')
52
Akrondffa9392018-10-12 16:26:09 +020053 # api_response
Akronbc6b3f22021-01-13 14:53:12 +010054 ->content_like(qr/${q}authorized${q}:null/)
55 ->content_like(qr/${q}pubDate${q},${q}subTitle${q},${q}author${q}/)
Akrondffa9392018-10-12 16:26:09 +020056
Akron8ea84292018-10-24 13:41:52 +020057 # No cutOff
Akronbc6b3f22021-01-13 14:53:12 +010058 ->content_unlike(qr!${q}cutOff${q}:true!)
Akron8ea84292018-10-24 13:41:52 +020059
Akrondffa9392018-10-12 16:26:09 +020060 ->element_exists('li[data-text-sigle=GOE/AGI/00000]')
61 ->element_exists('li:nth-of-type(1) div.flop')
62 ->element_exists('li[data-text-sigle=GOE/AGI/00001]')
63 ->element_exists('li:nth-of-type(2) div.flip')
64
65 # Match1
66 ->element_exists('li:nth-of-type(1)' .
67 '[data-match-id="p2030-2031"]' .
68 '[data-text-sigle="GOE/AGI/00000"]' .
69 '[id="GOE/AGI/00000#p2030-2031"]' .
70 '[data-available-info^="base/s=spans"]' .
71 '[data-info^="{"]')
72 ->text_is('li:nth-of-type(1) div.meta', 'GOE/AGI/00000')
73 ->element_exists('li:nth-of-type(1) div.match-main div.match-wrap div.snippet')
74 ->element_exists('li:nth-of-type(1) div.snippet.startMore.endMore')
75 ->text_like('li:nth-of-type(1) div.snippet span.context-left',qr!sie etwas bedeuten!)
76 ->text_like('li:nth-of-type(1) div.snippet span.context-left',qr!sie etwas bedeuten!)
77 ->text_is('li:nth-of-type(1) div.snippet span.match mark','Baum')
78 ->text_like('li:nth-of-type(1) div.snippet span.context-right',qr!es war!)
79 ->text_is('li:nth-of-type(1) p.ref strong', 'Italienische Reise')
80 ->text_like('li:nth-of-type(1) p.ref', qr!by Goethe, Johann Wolfgang!)
Akrondffa9392018-10-12 16:26:09 +020081 ->text_is('li:nth-of-type(1) p.ref span.sigle', '[GOE/AGI/00000]')
Akron22b008a2024-06-26 17:06:05 +020082 ->text_is('li:nth-of-type(1) p.ref time[datetime=1982]', 1982)
83 ->text_like('li:nth-of-type(1) p.ref ', qr!von \(, \)!)
84 ->text_is('li:nth-of-type(1) p.ref span.pages', 'p. 109')
85
86 ->element_exists_not('li:nth-of-type(2) p.ref time')
87 ->text_like('li:nth-of-type(2) p.ref ', qr!von \(\)!)
88 ->text_is('li:nth-of-type(2) p.ref span.pages', 'pp. 109–204')
89
Akron8ea84292018-10-24 13:41:52 +020090 ->header_isnt('X-Kalamar-Cache', 'true')
Akron26d57f22021-09-10 16:48:57 +020091 ->attr_is('#pagination','data-page','1')
92 ->attr_is('#pagination','data-total','3')
93 ->attr_is('#pagination','data-count','25')
Akron58c60992021-09-07 13:11:43 +020094 ->tx->res->dom->at('#error')
Akron0e1ed242018-10-11 13:22:00 +020095 ;
Akron3422d452024-05-14 11:14:07 +020096
Akron58c60992021-09-07 13:11:43 +020097is(defined $err ? $err->text : '', '');
98
Akron3422d452024-05-14 11:14:07 +020099# Query passed
100$t->app->defaults(items_per_page => 20);
101
102$t->get_ok('/?q=baum')
103 ->status_is(200)
104 ->content_type_is('text/html;charset=UTF-8')
105 ->element_count_is('#pagination > a', 5)
106 ->attr_is('#pagination','data-page','1')
107 ->attr_is('#pagination','data-total','3')
108 ->attr_is('#pagination','data-count','20')
109;
110
111$t->app->defaults(items_per_page => 25);
Akron0e1ed242018-10-11 13:22:00 +0200112
Akron8ea84292018-10-24 13:41:52 +0200113$t->get_ok('/?q=[orth=das')
Akron7093b812018-10-19 17:28:21 +0200114 ->status_is(400)
115 ->text_is('div.notify-error:nth-of-type(1)', '302: Parantheses/brackets unbalanced.')
Akronbc33beb2018-11-30 13:46:08 +0100116 ->element_exists('#search')
Akron7093b812018-10-19 17:28:21 +0200117 ->text_like('div.notify-error:nth-of-type(2)', qr!302: Could not parse query .+? \[orth=das.+?!)
118 ;
119
Akron73f36082018-10-25 15:34:59 +0200120# Check for query error with ql (from remote.t)
121$t->get_ok('/?q=[orth=das&ql=poliqarp')
122 ->element_exists('.notify-error')
123 ->text_is('.notify-error', '302: Parantheses/brackets unbalanced.')
Akronbc6b3f22021-01-13 14:53:12 +0100124 ->content_like(qr!data-koralquery=!)
Akron3c390c42020-03-30 09:06:21 +0200125 ->text_is('.no-results:nth-of-type(1)', 'Unable to perform the action.')
Akron73f36082018-10-25 15:34:59 +0200126 ;
127
128
Akron8ea84292018-10-24 13:41:52 +0200129# Query with partial cache (for total results)
Akron58c60992021-09-07 13:11:43 +0200130$err = $t->get_ok('/?q=baum')
Akron8ea84292018-10-24 13:41:52 +0200131 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100132 ->text_is('title', 'KorAP-Test: Find »baum« with Poliqarp')
133 ->element_exists('meta[name="DC.title"][content="KorAP-Test: Find »baum« with Poliqarp"]')
Akron8ea84292018-10-24 13:41:52 +0200134 ->element_exists('body[itemscope][itemtype="http://schema.org/SearchResultsPage"]')
135 ->header_isnt('X-Kalamar-Cache', 'true')
Akronbc6b3f22021-01-13 14:53:12 +0100136 ->content_like(qr!${q}cutOff${q}:true!)
Akron8ea84292018-10-24 13:41:52 +0200137 ->text_is('#total-results', 51)
Akron58c60992021-09-07 13:11:43 +0200138 ->tx->res->dom->at('#error')
Akron8ea84292018-10-24 13:41:52 +0200139 ;
Akron58c60992021-09-07 13:11:43 +0200140is(defined $err ? $err->text : '', '');
Akron8ea84292018-10-24 13:41:52 +0200141
Akron385249d2018-10-29 12:26:29 +0100142# Query without partial cache (unfortunately) (but no total results)
Akron58c60992021-09-07 13:11:43 +0200143$err = $t->get_ok('/?q=baum&cutoff=true')
Akron385249d2018-10-29 12:26:29 +0100144 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100145 ->text_is('title', 'KorAP-Test: Find »baum« with Poliqarp')
146 ->element_exists('meta[name="DC.title"][content="KorAP-Test: Find »baum« with Poliqarp"]')
Akron385249d2018-10-29 12:26:29 +0100147 ->element_exists('body[itemscope][itemtype="http://schema.org/SearchResultsPage"]')
148 ->header_isnt('X-Kalamar-Cache', 'true')
Akronbc6b3f22021-01-13 14:53:12 +0100149 ->content_like(qr!${q}cutOff${q}:true!)
Akron385249d2018-10-29 12:26:29 +0100150 ->element_exists_not('#total-results')
Akron58c60992021-09-07 13:11:43 +0200151 ->tx->res->dom->at('#error')
Akron385249d2018-10-29 12:26:29 +0100152 ;
Akron58c60992021-09-07 13:11:43 +0200153is(defined $err ? $err->text : '', '');
Akron385249d2018-10-29 12:26:29 +0100154
155# Query with partial cache (but no total results)
Akron58c60992021-09-07 13:11:43 +0200156$err = $t->get_ok('/?q=baum&cutoff=true')
Akron385249d2018-10-29 12:26:29 +0100157 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100158 ->text_is('title', 'KorAP-Test: Find »baum« with Poliqarp')
159 ->element_exists('meta[name="DC.title"][content="KorAP-Test: Find »baum« with Poliqarp"]')
Akron385249d2018-10-29 12:26:29 +0100160 ->element_exists('body[itemscope][itemtype="http://schema.org/SearchResultsPage"]')
161 ->header_is('X-Kalamar-Cache', 'true')
Akronbc6b3f22021-01-13 14:53:12 +0100162 ->content_like(qr!${q}cutOff${q}:true!)
Akron385249d2018-10-29 12:26:29 +0100163 ->element_exists_not('#total-results')
Akron58c60992021-09-07 13:11:43 +0200164 ->tx->res->dom->at('#error')
Akron385249d2018-10-29 12:26:29 +0100165 ;
Akron58c60992021-09-07 13:11:43 +0200166is(defined $err ? $err->text : '', '');
167
Akron385249d2018-10-29 12:26:29 +0100168
Akron8ea84292018-10-24 13:41:52 +0200169# Query with full cache
Akron58c60992021-09-07 13:11:43 +0200170$err = $t->get_ok('/?q=baum')
Akron8ea84292018-10-24 13:41:52 +0200171 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100172 ->text_is('title', 'KorAP-Test: Find »baum« with Poliqarp')
173 ->element_exists('meta[name="DC.title"][content="KorAP-Test: Find »baum« with Poliqarp"]')
Akron8ea84292018-10-24 13:41:52 +0200174 ->element_exists('body[itemscope][itemtype="http://schema.org/SearchResultsPage"]')
175 ->header_is('X-Kalamar-Cache', 'true')
Akronbc6b3f22021-01-13 14:53:12 +0100176 ->content_like(qr!${q}cutOff${q}:true!)
Akron8ea84292018-10-24 13:41:52 +0200177 ->text_is('#total-results', 51)
Akron58c60992021-09-07 13:11:43 +0200178 ->tx->res->dom->at('#error')
Akron8ea84292018-10-24 13:41:52 +0200179 ;
Akron58c60992021-09-07 13:11:43 +0200180is(defined $err ? $err->text : '', '');
Akron8ea84292018-10-24 13:41:52 +0200181
182
183# Query with page information
Akronc23ce662021-12-14 12:39:42 +0100184$err = $t->get_ok('/?q=der&p=1&count=2' => { 'Accept-Language' => 'en-US, en, de-DE' })
Akron8ea84292018-10-24 13:41:52 +0200185 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100186 ->text_is('title', 'KorAP-Test: Find »der« with Poliqarp')
Akron8ea84292018-10-24 13:41:52 +0200187
188 # Total results
189 ->text_is('#total-results', '14,581')
190
191 # Total pages
Akron18a2a272020-06-16 11:47:38 +0200192 ->element_count_is('#pagination > a', 7)
Akronc23ce662021-12-14 12:39:42 +0100193 ->text_is('#pagination a:nth-of-type(6) span', '7,291')
Akrona4b17f72021-11-04 15:37:02 +0100194 ->element_exists('#pagination a.ellipsis.inactive')
Akronbc6b3f22021-01-13 14:53:12 +0100195 ->content_like(qr!${q}count${q}:2!)
196 ->content_like(qr!${q}startIndex${q}:0!)
197 ->content_like(qr!${q}itemsPerPage${q}:2!)
Akron8ea84292018-10-24 13:41:52 +0200198
199 # No caching
200 ->header_isnt('X-Kalamar-Cache', 'true')
201
202 # Not searched for "der" before
Akronbc6b3f22021-01-13 14:53:12 +0100203 ->content_unlike(qr!${q}cutOff${q}:true!)
Akron26d57f22021-09-10 16:48:57 +0200204
205 ->attr_is('#pagination','data-page','1')
206 ->attr_is('#pagination','data-total','7291')
207 ->attr_is('#pagination','data-count','2')
208
Akron58c60992021-09-07 13:11:43 +0200209 ->tx->res->dom->at('#error')
Akron8ea84292018-10-24 13:41:52 +0200210 ;
Akron58c60992021-09-07 13:11:43 +0200211is(defined $err ? $err->text : '', '');
212
Akron8ea84292018-10-24 13:41:52 +0200213
Akron4c7cf952019-08-29 09:31:35 +0200214# Check pagination repetion of page
215my $next_href = $t->get_ok('/?q=der&p=1&count=2')
216 ->tx->res->dom->at('#pagination a[rel=next]')->attr('href');
217like($next_href, qr/p=2/);
218unlike($next_href, qr/p=1/);
219
Akron8ea84292018-10-24 13:41:52 +0200220# Query with page information - next page
Akronc23ce662021-12-14 12:39:42 +0100221$err = $t->get_ok('/?q=der&p=2&count=2' => { 'Accept-Language' => 'de-DE, en-US, en' })
Akron8ea84292018-10-24 13:41:52 +0200222 ->status_is(200)
Akronc4177492023-11-29 08:35:37 +0100223 ->text_is('div.logoaddon', 'Test')
224 ->text_is('title', 'KorAP-Test: Finde »der« mit Poliqarp')
Akronbc33beb2018-11-30 13:46:08 +0100225 ->element_exists('#search')
Akron8ea84292018-10-24 13:41:52 +0200226
227 # Total results
Akronc23ce662021-12-14 12:39:42 +0100228 ->text_is('#total-results', '14.581')
Akron8ea84292018-10-24 13:41:52 +0200229
230 # Total pages
Akron18a2a272020-06-16 11:47:38 +0200231 ->element_count_is('#pagination > a', 7)
Akronc23ce662021-12-14 12:39:42 +0100232 ->text_is('#pagination a:nth-of-type(6) span', '7.291')
Akronbc6b3f22021-01-13 14:53:12 +0100233 ->content_like(qr!${q}count${q}:2!)
234 ->content_like(qr!${q}itemsPerPage${q}:2!)
235 ->content_like(qr!${q}startIndex${q}:2!)
Akron8ea84292018-10-24 13:41:52 +0200236
Akron26d57f22021-09-10 16:48:57 +0200237 ->attr_is('#pagination','data-page','2')
238 ->attr_is('#pagination','data-total','7291')
239 ->attr_is('#pagination','data-count','2')
240
Akron8ea84292018-10-24 13:41:52 +0200241 # No caching
242 ->header_isnt('X-Kalamar-Cache', 'true')
Akronbc6b3f22021-01-13 14:53:12 +0100243 ->content_like(qr!${q}cutOff${q}:true!)
Akron58c60992021-09-07 13:11:43 +0200244 ->tx->res->dom->at('#error')
Akron8ea84292018-10-24 13:41:52 +0200245 ;
Akron58c60992021-09-07 13:11:43 +0200246is(defined $err ? $err->text : '', '');
247
Akron8ea84292018-10-24 13:41:52 +0200248
Akronc4be8192018-10-25 16:07:53 +0200249# Query with failing parameters
250$t->get_ok('/?q=fantastisch&ql=Fabelsprache')
251 ->status_is(400)
Akroncb5c1712021-01-26 18:01:04 +0100252 ->text_is('#notifications div.notify-error', 'Parameter "ql" invalid')
Akronbc33beb2018-11-30 13:46:08 +0100253 ->element_exists('#search')
Akroncb5c1712021-01-26 18:01:04 +0100254 ->element_count_is('#notifications div.notify-error', 1)
Akronc4be8192018-10-25 16:07:53 +0200255 ;
256$t->get_ok('/?q=fantastisch&cutoff=no')
257 ->status_is(400)
Akroncb5c1712021-01-26 18:01:04 +0100258 ->text_is('#notifications div.notify-error', 'Parameter "cutoff" invalid')
259 ->element_count_is('#notifications div.notify-error', 1)
Akronc4be8192018-10-25 16:07:53 +0200260 ;
261$t->get_ok('/?q=fantastisch&p=hui&o=hui&count=-8')
262 ->status_is(400)
Akroncb5c1712021-01-26 18:01:04 +0100263 ->text_like('#notifications div.notify-error', qr!Parameter ".+?" invalid!)
264 ->element_count_is('#notifications div.notify-error', 3)
Akronc4be8192018-10-25 16:07:53 +0200265 ;
Akron8ea84292018-10-24 13:41:52 +0200266
Marc Kupietz4dc3d502022-07-06 16:50:14 +0200267# Long, but not too long query
268my $long_query = 'b' x 4096;
Akron58c60992021-09-07 13:11:43 +0200269$err = $t->get_ok('/?q=' . $long_query)
Akrond1ff8d82018-11-08 13:16:55 +0100270 ->status_is(400)
Marc Kupietz4dc3d502022-07-06 16:50:14 +0200271 ->text_like('#notifications div.notify-error', qr!Unable to load query response from!)
272 ->tx->res->dom->at('#error')
273 ;
274
275# Query too long
276my $too_long_query = 'b' x 4097;
277$err = $t->get_ok('/?q=' . $too_long_query)
278 ->status_is(400)
Akroncb5c1712021-01-26 18:01:04 +0100279 ->text_like('#notifications div.notify-error', qr!Parameter ".+?" invalid!)
Akron58c60992021-09-07 13:11:43 +0200280 ->tx->res->dom->at('#error')
Akrond1ff8d82018-11-08 13:16:55 +0100281 ;
Akron58c60992021-09-07 13:11:43 +0200282is(defined $err ? $err->text : '', '');
Akrond1ff8d82018-11-08 13:16:55 +0100283
Akrona3c353c2019-02-14 23:50:00 +0100284# Query with timeout
285$t->get_ok('/?q=timeout')
286 ->status_is(200)
Akroncb5c1712021-01-26 18:01:04 +0100287 ->text_like('#notifications div.notify-warn', qr!Response time exceeded!)
Akrona3c353c2019-02-14 23:50:00 +0100288 ->text_is('#total-results', '> 4,274,841');
289;
290
Akroncce055c2021-07-02 12:18:03 +0200291# Query with error
292$t->get_ok('/?q=error')
293 ->status_is(400)
294 ->text_is('#notifications .notify-error','500: Internal Server Error')
295;
296
Akrona3c353c2019-02-14 23:50:00 +0100297# Do not cache
298$t->get_ok('/?q=timeout')
299 ->status_is(200)
Akroncb5c1712021-01-26 18:01:04 +0100300 # ->text_like('#notifications div.notify-warning', qr!Response time exceeded!)
Akroncd42a142019-07-12 18:55:37 +0200301 ->element_exists("input#cq")
302 ->element_exists_not("input#cq[value]")
Akrona3c353c2019-02-14 23:50:00 +0100303 ->text_is('#total-results', '> 4,274,841');
304 ;
305
Akron91a76852019-08-28 12:35:37 +0200306$t->app->defaults(no_cache => 1);
307
Akroncd42a142019-07-12 18:55:37 +0200308# Query with collection
Akron58c60992021-09-07 13:11:43 +0200309$err = $t->get_ok('/?q=baum&collection=availability+%3D+%2FCC-BY.*%2F')
Akroncd42a142019-07-12 18:55:37 +0200310 ->status_is(200)
311 ->element_exists("input#cq[value='availability = /CC-BY.*/']")
Akronbc6b3f22021-01-13 14:53:12 +0100312 ->content_like(qr!${q}availability${q}!)
Akron58c60992021-09-07 13:11:43 +0200313 ->tx->res->dom->at('#error')
Akroncd42a142019-07-12 18:55:37 +0200314 ;
Akron58c60992021-09-07 13:11:43 +0200315is(defined $err ? $err->text : '', '');
316
Akroncd42a142019-07-12 18:55:37 +0200317
Akron4cdc4fc2020-04-28 12:19:11 +0200318$t->app->hook(
Akron7c87c1a2020-04-28 12:35:55 +0200319 after_search => sub {
Akron4cdc4fc2020-04-28 12:19:11 +0200320 my $c = shift;
321 $c->content_for('after_search_results' => '<p id="special">Funny</p>');
322 }
323);
324
Akroncd42a142019-07-12 18:55:37 +0200325# Query with corpus query
Akron58c60992021-09-07 13:11:43 +0200326$err = $t->get_ok('/?q=baum&cq=availability+%3D+%2FCC-BY.*%2F')
Akroncd42a142019-07-12 18:55:37 +0200327 ->status_is(200)
328 ->element_exists("input#cq[value='availability = /CC-BY.*/']")
Akronbc6b3f22021-01-13 14:53:12 +0100329 ->content_like(qr!${q}availability${q}!)
Akron4cdc4fc2020-04-28 12:19:11 +0200330 ->text_is('#special', 'Funny')
Akron58c60992021-09-07 13:11:43 +0200331 ->tx->res->dom->at('#error')
Akroncd42a142019-07-12 18:55:37 +0200332 ;
Akron58c60992021-09-07 13:11:43 +0200333is(defined $err ? $err->text : '', '');
Akron8ea84292018-10-24 13:41:52 +0200334
Akron909ed082019-12-11 21:38:27 +0100335my $match = {
336 matchID => 'match-FOLK/00070-SE-01/T-04-p5441-5442',
337 textSigle => 'FOLK/00070-SE-01/T-04'
338};
339
340$match = Kalamar::Controller::Search::_map_match($match);
341
342is($match->{matchID}, 'p5441-5442');
343
Akron7b9a1962020-07-02 09:52:53 +0200344# Query with pipe
Akron58c60992021-09-07 13:11:43 +0200345$err = $t->get_ok('/?q=baum&pipe=glemm')
Akron7b9a1962020-07-02 09:52:53 +0200346 ->status_is(200)
Akronbc6b3f22021-01-13 14:53:12 +0100347 ->content_like(qr/${q}pipes${q}:${q}glemm${q}/)
Akron58c60992021-09-07 13:11:43 +0200348 ->tx->res->dom->at('#error')
Akron7b9a1962020-07-02 09:52:53 +0200349 ;
Akron58c60992021-09-07 13:11:43 +0200350is(defined $err ? $err->text : '', '');
Akron7b9a1962020-07-02 09:52:53 +0200351
Akron909ed082019-12-11 21:38:27 +0100352
Akron0e1ed242018-10-11 13:22:00 +0200353done_testing;
Akron8ea84292018-10-24 13:41:52 +0200354__END__