|
Lines 61-70
subtest 'list() tests' => sub {
Link Here
|
| 61 |
my $unauth_userid = $patron->userid; |
61 |
my $unauth_userid = $patron->userid; |
| 62 |
|
62 |
|
| 63 |
## Authorized user tests |
63 |
## Authorized user tests |
| 64 |
# No FTP/SFTP servers, so empty array should be returned |
64 |
# No File transports, so empty array should be returned |
| 65 |
$t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200)->json_is( [] ); |
65 |
$t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200)->json_is( [] ); |
| 66 |
|
66 |
|
| 67 |
my $sftp_server = $builder->build_object( |
67 |
my $file_transport = $builder->build_object( |
| 68 |
{ |
68 |
{ |
| 69 |
class => 'Koha::File::Transports', |
69 |
class => 'Koha::File::Transports', |
| 70 |
value => { |
70 |
value => { |
|
Lines 76-85
subtest 'list() tests' => sub {
Link Here
|
| 76 |
} |
76 |
} |
| 77 |
); |
77 |
); |
| 78 |
|
78 |
|
| 79 |
# One sftp server created, should get returned |
79 |
# One file transport created, should get returned |
| 80 |
$t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200)->json_is( [ $sftp_server->to_api ] ); |
80 |
$t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200) |
|
|
81 |
->json_is( [ $file_transport->to_api ] ); |
| 81 |
|
82 |
|
| 82 |
my $another_sftp_server = $builder->build_object( |
83 |
my $another_file_transport = $builder->build_object( |
| 83 |
{ |
84 |
{ |
| 84 |
class => 'Koha::File::Transports', |
85 |
class => 'Koha::File::Transports', |
| 85 |
value => { |
86 |
value => { |
|
Lines 91-102
subtest 'list() tests' => sub {
Link Here
|
| 91 |
} |
92 |
} |
| 92 |
); |
93 |
); |
| 93 |
|
94 |
|
| 94 |
# Two FTP/SFTP servers created, they should both be returned |
95 |
# Two File transports created, they should both be returned |
| 95 |
$t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200) |
96 |
$t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200) |
| 96 |
->json_is( [ $sftp_server->to_api, $another_sftp_server->to_api, ] ); |
97 |
->json_is( [ $file_transport->to_api, $another_file_transport->to_api, ] ); |
| 97 |
|
98 |
|
| 98 |
# Unauthorized access |
99 |
# Unauthorized access |
| 99 |
$t->get_ok("//$unauth_userid:$password@/api/v1/config/sftp_servers")->status_is(403); |
100 |
$t->get_ok("//$unauth_userid:$password@/api/v1/config/file_transports")->status_is(403); |
| 100 |
|
101 |
|
| 101 |
$schema->storage->txn_rollback; |
102 |
$schema->storage->txn_rollback; |
| 102 |
}; |
103 |
}; |
|
Lines 107-113
subtest 'get() tests' => sub {
Link Here
|
| 107 |
|
108 |
|
| 108 |
$schema->storage->txn_begin; |
109 |
$schema->storage->txn_begin; |
| 109 |
|
110 |
|
| 110 |
my $sftp_server = $builder->build_object( |
111 |
my $file_transport = $builder->build_object( |
| 111 |
{ |
112 |
{ |
| 112 |
class => 'Koha::File::Transports', |
113 |
class => 'Koha::File::Transports', |
| 113 |
value => { |
114 |
value => { |
|
Lines 138-149
subtest 'get() tests' => sub {
Link Here
|
| 138 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
139 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 139 |
my $unauth_userid = $patron->userid; |
140 |
my $unauth_userid = $patron->userid; |
| 140 |
|
141 |
|
| 141 |
$t->get_ok( "//$userid:$password@/api/v1/config/sftp_servers/" . $sftp_server->id )->status_is(200) |
142 |
$t->get_ok( "//$userid:$password@/api/v1/config/file_transports/" . $file_transport->id )->status_is(200) |
| 142 |
->json_is( $sftp_server->to_api ); |
143 |
->json_is( $file_transport->to_api ); |
| 143 |
|
144 |
|
| 144 |
$t->get_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers/" . $sftp_server->id )->status_is(403); |
145 |
$t->get_ok( "//$unauth_userid:$password@/api/v1/config/file_transports/" . $file_transport->id )->status_is(403); |
| 145 |
|
146 |
|
| 146 |
my $sftp_server_to_delete = $builder->build_object( |
147 |
my $file_transport_to_delete = $builder->build_object( |
| 147 |
{ |
148 |
{ |
| 148 |
class => 'Koha::File::Transports', |
149 |
class => 'Koha::File::Transports', |
| 149 |
value => { |
150 |
value => { |
|
Lines 154-164
subtest 'get() tests' => sub {
Link Here
|
| 154 |
}, |
155 |
}, |
| 155 |
} |
156 |
} |
| 156 |
); |
157 |
); |
| 157 |
my $non_existent_id = $sftp_server_to_delete->id; |
158 |
my $non_existent_id = $file_transport_to_delete->id; |
| 158 |
$sftp_server_to_delete->delete; |
159 |
$file_transport_to_delete->delete; |
| 159 |
|
160 |
|
| 160 |
$t->get_ok("//$userid:$password@/api/v1/config/sftp_servers/$non_existent_id")->status_is(404) |
161 |
$t->get_ok("//$userid:$password@/api/v1/config/file_transports/$non_existent_id")->status_is(404) |
| 161 |
->json_is( '/error' => 'FTP/SFTP server not found' ); |
162 |
->json_is( '/error' => 'File transport not found' ); |
| 162 |
|
163 |
|
| 163 |
$schema->storage->txn_rollback; |
164 |
$schema->storage->txn_rollback; |
| 164 |
}; |
165 |
}; |
|
Lines 191-197
subtest 'add() tests' => sub {
Link Here
|
| 191 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
192 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 192 |
my $unauth_userid = $patron->userid; |
193 |
my $unauth_userid = $patron->userid; |
| 193 |
|
194 |
|
| 194 |
my $sftp_server = $builder->build_object( |
195 |
my $file_transport = $builder->build_object( |
| 195 |
{ |
196 |
{ |
| 196 |
class => 'Koha::File::Transports', |
197 |
class => 'Koha::File::Transports', |
| 197 |
value => { |
198 |
value => { |
|
Lines 202-222
subtest 'add() tests' => sub {
Link Here
|
| 202 |
}, |
203 |
}, |
| 203 |
} |
204 |
} |
| 204 |
); |
205 |
); |
| 205 |
my $sftp_server_data = $sftp_server->to_api; |
206 |
my $file_transport_data = $file_transport->to_api; |
| 206 |
delete $sftp_server_data->{sftp_server_id}; |
207 |
delete $file_transport_data->{file_transport_id}; |
| 207 |
$sftp_server->delete; |
208 |
$file_transport->delete; |
| 208 |
|
209 |
|
| 209 |
# Unauthorized attempt to write |
210 |
# Unauthorized attempt to write |
| 210 |
$t->post_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data ) |
211 |
$t->post_ok( "//$unauth_userid:$password@/api/v1/config/file_transports" => json => $file_transport_data ) |
| 211 |
->status_is(403); |
212 |
->status_is(403); |
| 212 |
|
213 |
|
| 213 |
# Authorized attempt to write invalid data |
214 |
# Authorized attempt to write invalid data |
| 214 |
my $sftp_server_with_invalid_field = { |
215 |
my $file_transport_with_invalid_field = { |
| 215 |
name => 'Some other server', |
216 |
name => 'Some other server', |
| 216 |
blah => 'blah' |
217 |
blah => 'blah' |
| 217 |
}; |
218 |
}; |
| 218 |
|
219 |
|
| 219 |
$t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_with_invalid_field ) |
220 |
$t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_with_invalid_field ) |
| 220 |
->status_is(400)->json_is( |
221 |
->status_is(400)->json_is( |
| 221 |
"/errors" => [ |
222 |
"/errors" => [ |
| 222 |
{ |
223 |
{ |
|
Lines 227-251
subtest 'add() tests' => sub {
Link Here
|
| 227 |
); |
228 |
); |
| 228 |
|
229 |
|
| 229 |
# Authorized attempt to write |
230 |
# Authorized attempt to write |
| 230 |
my $sftp_server_id = |
231 |
my $file_transport_id = |
| 231 |
$t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data ) |
232 |
$t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data ) |
| 232 |
->status_is( 201, 'SWAGGER3.2.1' ) |
233 |
->status_is( 201, 'SWAGGER3.2.1' ) |
| 233 |
->header_like( Location => qr|^\/api\/v1\/config\/sftp_servers\/\d*|, 'SWAGGER3.4.1' ) |
234 |
->header_like( Location => qr|^\/api\/v1\/config\/file_transports\/\d*|, 'SWAGGER3.4.1' ) |
| 234 |
->json_is( '/name' => $sftp_server_data->{name} )->tx->res->json->{sftp_server_id}; |
235 |
->json_is( '/name' => $file_transport_data->{name} )->tx->res->json->{file_transport_id}; |
| 235 |
|
236 |
|
| 236 |
# Authorized attempt to create with null id |
237 |
# Authorized attempt to create with null id |
| 237 |
$sftp_server_data->{sftp_server_id} = undef; |
238 |
$file_transport_data->{file_transport_id} = undef; |
| 238 |
$t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data )->status_is(400) |
239 |
$t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data )->status_is(400) |
| 239 |
->json_has('/errors'); |
240 |
->json_has('/errors'); |
| 240 |
|
241 |
|
| 241 |
# Authorized attempt to create with existing id |
242 |
# Authorized attempt to create with existing id |
| 242 |
$sftp_server_data->{sftp_server_id} = $sftp_server_id; |
243 |
$file_transport_data->{file_transport_id} = $file_transport_id; |
| 243 |
$t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data )->status_is(400) |
244 |
$t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data )->status_is(400) |
| 244 |
->json_is( |
245 |
->json_is( |
| 245 |
"/errors" => [ |
246 |
"/errors" => [ |
| 246 |
{ |
247 |
{ |
| 247 |
message => "Read-only.", |
248 |
message => "Read-only.", |
| 248 |
path => "/body/sftp_server_id" |
249 |
path => "/body/file_transport_id" |
| 249 |
} |
250 |
} |
| 250 |
] |
251 |
] |
| 251 |
); |
252 |
); |
|
Lines 279-285
subtest 'update() tests' => sub {
Link Here
|
| 279 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
280 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 280 |
my $unauth_userid = $patron->userid; |
281 |
my $unauth_userid = $patron->userid; |
| 281 |
|
282 |
|
| 282 |
my $sftp_server_id = $builder->build_object( |
283 |
my $file_transport_id = $builder->build_object( |
| 283 |
{ |
284 |
{ |
| 284 |
class => 'Koha::File::Transports', |
285 |
class => 'Koha::File::Transports', |
| 285 |
value => { |
286 |
value => { |
|
Lines 292-338
subtest 'update() tests' => sub {
Link Here
|
| 292 |
)->id; |
293 |
)->id; |
| 293 |
|
294 |
|
| 294 |
# Unauthorized attempt to update |
295 |
# Unauthorized attempt to update |
| 295 |
$t->put_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => |
296 |
$t->put_ok( "//$unauth_userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => |
| 296 |
{ name => 'New unauthorized name change' } )->status_is(403); |
297 |
{ name => 'New unauthorized name change' } )->status_is(403); |
| 297 |
|
298 |
|
| 298 |
# Attempt partial update on a PUT |
299 |
# Attempt partial update on a PUT |
| 299 |
my $sftp_server_with_missing_field = { |
300 |
my $file_transport_with_missing_field = { |
| 300 |
host => 'localhost', |
301 |
host => 'localhost', |
| 301 |
passive => '1' |
302 |
passive => '1' |
| 302 |
}; |
303 |
}; |
| 303 |
|
304 |
|
| 304 |
$t->put_ok( |
305 |
$t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => |
| 305 |
"//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_missing_field ) |
306 |
$file_transport_with_missing_field )->status_is(400) |
| 306 |
->status_is(400)->json_is( "/errors" => [ { message => "Missing property.", path => "/body/name" } ] ); |
307 |
->json_is( "/errors" => [ { message => "Missing property.", path => "/body/name" } ] ); |
| 307 |
|
308 |
|
| 308 |
# Full object update on PUT |
309 |
# Full object update on PUT |
| 309 |
my $sftp_server_with_updated_field = { |
310 |
my $file_transport_with_updated_field = { |
| 310 |
name => "Some name", |
311 |
name => "Some name", |
| 311 |
password => "some_pass", |
312 |
password => "some_pass", |
| 312 |
}; |
313 |
}; |
| 313 |
|
314 |
|
| 314 |
$t->put_ok( |
315 |
$t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => |
| 315 |
"//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_updated_field ) |
316 |
$file_transport_with_updated_field )->status_is(200)->json_is( '/name' => 'Some name' ); |
| 316 |
->status_is(200)->json_is( '/name' => 'Some name' ); |
|
|
| 317 |
|
317 |
|
| 318 |
# Authorized attempt to write invalid data |
318 |
# Authorized attempt to write invalid data |
| 319 |
my $sftp_server_with_invalid_field = { |
319 |
my $file_transport_with_invalid_field = { |
| 320 |
blah => "Blah", |
320 |
blah => "Blah", |
| 321 |
name => 'Some name' |
321 |
name => 'Some name' |
| 322 |
}; |
322 |
}; |
| 323 |
|
323 |
|
| 324 |
$t->put_ok( |
324 |
$t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => |
| 325 |
"//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_invalid_field ) |
325 |
$file_transport_with_invalid_field )->status_is(400)->json_is( |
| 326 |
->status_is(400)->json_is( |
|
|
| 327 |
"/errors" => [ |
326 |
"/errors" => [ |
| 328 |
{ |
327 |
{ |
| 329 |
message => "Properties not allowed: blah.", |
328 |
message => "Properties not allowed: blah.", |
| 330 |
path => "/body" |
329 |
path => "/body" |
| 331 |
} |
330 |
} |
| 332 |
] |
331 |
] |
| 333 |
); |
332 |
); |
| 334 |
|
333 |
|
| 335 |
my $sftp_server_to_delete = $builder->build_object( |
334 |
my $file_transport_to_delete = $builder->build_object( |
| 336 |
{ |
335 |
{ |
| 337 |
class => 'Koha::File::Transports', |
336 |
class => 'Koha::File::Transports', |
| 338 |
value => { |
337 |
value => { |
|
Lines 343-361
subtest 'update() tests' => sub {
Link Here
|
| 343 |
}, |
342 |
}, |
| 344 |
} |
343 |
} |
| 345 |
); |
344 |
); |
| 346 |
my $non_existent_id = $sftp_server_to_delete->id; |
345 |
my $non_existent_id = $file_transport_to_delete->id; |
| 347 |
$sftp_server_to_delete->delete; |
346 |
$file_transport_to_delete->delete; |
| 348 |
|
347 |
|
| 349 |
$t->put_ok( |
348 |
$t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$non_existent_id" => json => |
| 350 |
"//$userid:$password@/api/v1/config/sftp_servers/$non_existent_id" => json => $sftp_server_with_updated_field ) |
349 |
$file_transport_with_updated_field )->status_is(404); |
| 351 |
->status_is(404); |
|
|
| 352 |
|
350 |
|
| 353 |
# Wrong method (POST) |
351 |
# Wrong method (POST) |
| 354 |
$sftp_server_with_updated_field->{sftp_server_id} = 2; |
352 |
$file_transport_with_updated_field->{file_transport_id} = 2; |
| 355 |
|
353 |
|
| 356 |
$t->post_ok( |
354 |
$t->post_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => |
| 357 |
"//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_updated_field ) |
355 |
$file_transport_with_updated_field )->status_is(404); |
| 358 |
->status_is(404); |
|
|
| 359 |
|
356 |
|
| 360 |
$schema->storage->txn_rollback; |
357 |
$schema->storage->txn_rollback; |
| 361 |
}; |
358 |
}; |
|
Lines 386-392
subtest 'delete() tests' => sub {
Link Here
|
| 386 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
383 |
$patron->set_password( { password => $password, skip_validation => 1 } ); |
| 387 |
my $unauth_userid = $patron->userid; |
384 |
my $unauth_userid = $patron->userid; |
| 388 |
|
385 |
|
| 389 |
my $sftp_server_id = $builder->build_object( |
386 |
my $file_transport_id = $builder->build_object( |
| 390 |
{ |
387 |
{ |
| 391 |
class => 'Koha::File::Transports', |
388 |
class => 'Koha::File::Transports', |
| 392 |
value => { |
389 |
value => { |
|
Lines 399-410
subtest 'delete() tests' => sub {
Link Here
|
| 399 |
)->id; |
396 |
)->id; |
| 400 |
|
397 |
|
| 401 |
# Unauthorized attempt to delete |
398 |
# Unauthorized attempt to delete |
| 402 |
$t->delete_ok("//$unauth_userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is(403); |
399 |
$t->delete_ok("//$unauth_userid:$password@/api/v1/config/file_transports/$file_transport_id")->status_is(403); |
| 403 |
|
400 |
|
| 404 |
$t->delete_ok("//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is( 204, 'SWAGGER3.2.4' ) |
401 |
$t->delete_ok("//$userid:$password@/api/v1/config/file_transports/$file_transport_id") |
| 405 |
->content_is( '', 'SWAGGER3.3.4' ); |
402 |
->status_is( 204, 'SWAGGER3.2.4' )->content_is( '', 'SWAGGER3.3.4' ); |
| 406 |
|
403 |
|
| 407 |
$t->delete_ok("//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is(404); |
404 |
$t->delete_ok("//$userid:$password@/api/v1/config/file_transports/$file_transport_id")->status_is(404); |
| 408 |
|
405 |
|
| 409 |
$schema->storage->txn_rollback; |
406 |
$schema->storage->txn_rollback; |
| 410 |
}; |
407 |
}; |
| 411 |
- |
|
|