Lines 21-27
use Data::Dumper;
Link Here
|
21 |
|
21 |
|
22 |
use FindBin(); |
22 |
use FindBin(); |
23 |
use IPC::Cmd qw(can_run); |
23 |
use IPC::Cmd qw(can_run); |
24 |
use List::MoreUtils qw(any); |
24 |
use List::MoreUtils qw(any none); |
25 |
use File::Slurp qw(read_file); |
25 |
use File::Slurp qw(read_file); |
26 |
|
26 |
|
27 |
my $t = Test::Mojo->new('Koha::REST::V1'); |
27 |
my $t = Test::Mojo->new('Koha::REST::V1'); |
Lines 172-177
subtest '400 response tests' => sub {
Link Here
|
172 |
} |
172 |
} |
173 |
}; |
173 |
}; |
174 |
|
174 |
|
|
|
175 |
subtest 'GET routes parameters tests' => sub { |
176 |
|
177 |
plan tests => 1; |
178 |
|
179 |
my @errors; |
180 |
|
181 |
foreach my $route ( sort keys %{$paths} ) { |
182 |
foreach my $verb ( keys %{ $paths->{$route} } ) { |
183 |
|
184 |
next unless $verb eq 'get'; |
185 |
|
186 |
if ( $paths->{$route}->{$verb}->{operationId} !~ m/^list/ |
187 |
&& $paths->{$route}->{$verb}->{operationId} !~ m/^get/ ) |
188 |
{ |
189 |
push @errors, |
190 |
sprintf( |
191 |
"%s %s -> bad operationId: %s (must start with list or get)", $verb, $route, |
192 |
$paths->{$route}->{$verb}->{operationId} |
193 |
); |
194 |
next; |
195 |
} |
196 |
|
197 |
my @parameters = @{ $paths->{$route}->{$verb}->{parameters} }; |
198 |
|
199 |
my $plural = ( any { $_->{in} eq 'body' && $_->{name} eq 'query' } @parameters ) |
200 |
|| ( any { $_->{in} eq 'query' && $_->{name} eq 'q' } @parameters ); |
201 |
|
202 |
if ($plural) { |
203 |
|
204 |
# 'q' as query parameter needs to be supported |
205 |
if ( none { $_->{in} eq 'query' && $_->{name} eq 'q' } @parameters ) { |
206 |
push @errors, sprintf( "%s %s -> missing 'q' parameter", $verb, $route ); |
207 |
} |
208 |
|
209 |
# 'query' in body needs to be supported |
210 |
if ( none { $_->{in} eq 'body' && $_->{name} eq 'query' } @parameters ) { |
211 |
push @errors, sprintf( "%s %s -> missing 'query' parameter", $verb, $route ); |
212 |
} |
213 |
|
214 |
# plural lists should have match for datatables compatibility |
215 |
if ( none { $_->{ref} && $_->{ref} eq '../swagger.yaml#/parameters/match' } @parameters ) { |
216 |
push @errors, sprintf( "%s %s -> missing 'match' parameter", $verb, $route ); |
217 |
} |
218 |
|
219 |
# plural lists should have order_by for datatables compatibility |
220 |
if ( none { $_->{ref} && $_->{ref} eq '../swagger.yaml#/parameters/order_by' } @parameters ) { |
221 |
push @errors, sprintf( "%s %s -> missing 'order_by' parameter", $verb, $route ); |
222 |
} |
223 |
|
224 |
# plural lists should have page for datatables compatibility |
225 |
if ( none { $_->{ref} && $_->{ref} eq '../swagger.yaml#/parameters/page' } @parameters ) { |
226 |
push @errors, sprintf( "%s %s -> missing 'page' parameter", $verb, $route ); |
227 |
} |
228 |
|
229 |
# plural lists should have per_page for datatables compatibility |
230 |
if ( none { $_->{ref} && $_->{ref} eq '../swagger.yaml#/parameters/per_page' } @parameters ) { |
231 |
push @errors, sprintf( "%s %s -> missing 'per_page' parameter", $verb, $route ); |
232 |
} |
233 |
|
234 |
# plural lists should have request_id_header for datatables compatibility |
235 |
if ( none { $_->{ref} && $_->{ref} eq '../swagger.yaml#/parameters/request_id_header' } @parameters ) { |
236 |
push @errors, sprintf( "%s %s -> missing request_id_header parameter", $verb, $route ); |
237 |
} |
238 |
} |
239 |
} |
240 |
} |
241 |
|
242 |
is( scalar @errors, 0, 'No errors in GET endpoints definitions in the spec' ); |
243 |
|
244 |
foreach my $error (@errors) { |
245 |
print STDERR "$error\n"; |
246 |
} |
247 |
}; |
248 |
|
175 |
subtest 'POST (201) have location header' => sub { |
249 |
subtest 'POST (201) have location header' => sub { |
176 |
my @files = `git ls-files 'Koha/REST/V1/**/*.pm'`; |
250 |
my @files = `git ls-files 'Koha/REST/V1/**/*.pm'`; |
177 |
plan tests => scalar @files; |
251 |
plan tests => scalar @files; |
178 |
- |
|
|