Bugzilla – Attachment 185997 Details for
Bug 39190
Rework new (S)FTP classes to be polymorphic classes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 39190: Rename API from sftp_servers to file_transports
Bug-39190-Rename-API-from-sftpservers-to-filetrans.patch (text/plain), 34.08 KB, created by
Tomás Cohen Arazi (tcohen)
on 2025-08-30 15:35:58 UTC
(
hide
)
Description:
Bug 39190: Rename API from sftp_servers to file_transports
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2025-08-30 15:35:58 UTC
Size:
34.08 KB
patch
obsolete
>From 701b62ae623c37680a40083d7bb4ee3b82022f67 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Sat, 30 Aug 2025 12:13:33 -0300 >Subject: [PATCH] Bug 39190: Rename API from sftp_servers to file_transports > >This patch renames the entire API structure from SFTP-specific to generic >file transport terminology to reflect the polymorphic nature of the system. > >API Changes: >- Endpoints: /config/sftp_servers -> /config/file_transports >- Parameters: sftp_server_id -> file_transport_id >- Definitions: sftp_server -> file_transport >- Controller: Config::SFTP::Servers -> Config::File::Transports > >File Changes: >- api/v1/swagger/definitions/sftp_server.yaml -> file_transport.yaml >- api/v1/swagger/paths/config_sftp_servers.yaml -> config_file_transports.yaml >- Koha/REST/V1/Config/SFTP/Servers.pm -> Koha/REST/V1/Config/File/Transports.pm >- t/db_dependent/api/v1/sftp_servers.t -> file_transports.t > >Updated References: >- swagger.yaml: paths, definitions, parameters, tags >- Template JavaScript: API URLs and variable names >- Controller: package name, variable names, error messages >- Tests: endpoints, parameters, descriptions >- API mapping: to_api_mapping field name correction > >To test: >1. Apply this patch >2. Run: yarn api:bundle (to regenerate swagger bundle) >3. Run: prove t/db_dependent/api/v1/file_transports.t >4. All API tests should pass >5. Verify admin interface uses new API endpoints >6. Test CRUD operations work correctly > >The API now consistently uses 'file_transports' terminology matching >the polymorphic file transport system that supports FTP, SFTP, and >future transport types. > >Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> >--- > Koha/File/Transport.pm | 2 +- > .../{SFTP/Servers.pm => File/Transports.pm} | 44 +++--- > .../{sftp_server.yaml => file_transport.yaml} | 10 +- > ...rvers.yaml => config_file_transports.yaml} | 76 +++++------ > api/v1/swagger/swagger.yaml | 24 ++-- > .../prog/en/modules/admin/file_transports.tt | 26 ++-- > .../v1/{sftp_servers.t => file_transports.t} | 127 +++++++++--------- > 7 files changed, 153 insertions(+), 156 deletions(-) > rename Koha/REST/V1/Config/{SFTP/Servers.pm => File/Transports.pm} (70%) > rename api/v1/swagger/definitions/{sftp_server.yaml => file_transport.yaml} (84%) > rename api/v1/swagger/paths/{config_sftp_servers.yaml => config_file_transports.yaml} (75%) > rename t/db_dependent/api/v1/{sftp_servers.t => file_transports.t} (64%) > >diff --git a/Koha/File/Transport.pm b/Koha/File/Transport.pm >index 47ba6eea853..fc7ac459b0e 100644 >--- a/Koha/File/Transport.pm >+++ b/Koha/File/Transport.pm >@@ -142,7 +142,7 @@ on the API. > =cut > > sub to_api_mapping { >- return { id => 'sftp_server_id' }; >+ return { id => 'file_transport_id' }; > } > > =head3 test_connection >diff --git a/Koha/REST/V1/Config/SFTP/Servers.pm b/Koha/REST/V1/Config/File/Transports.pm >similarity index 70% >rename from Koha/REST/V1/Config/SFTP/Servers.pm >rename to Koha/REST/V1/Config/File/Transports.pm >index 0df33ee2c2c..d3f20f34028 100644 >--- a/Koha/REST/V1/Config/SFTP/Servers.pm >+++ b/Koha/REST/V1/Config/File/Transports.pm >@@ -1,4 +1,4 @@ >-package Koha::REST::V1::Config::SFTP::Servers; >+package Koha::REST::V1::Config::File::Transports; > > # This file is part of Koha. > # >@@ -37,11 +37,11 @@ sub list { > my $c = shift->openapi->valid_input or return; > > return try { >- my $sftp_servers_set = Koha::File::Transports->new; >- my $sftp_servers = $c->objects->search($sftp_servers_set); >+ my $file_transports_set = Koha::File::Transports->new; >+ my $file_transports = $c->objects->search($file_transports_set); > return $c->render( > status => 200, >- openapi => $sftp_servers >+ openapi => $file_transports > ); > } catch { > $c->unhandled_exception($_); >@@ -58,14 +58,14 @@ sub get { > my $c = shift->openapi->valid_input or return; > > return try { >- my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); >+ my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); > >- return $c->render_resource_not_found("FTP/SFTP server") >- unless $sftp_server; >+ return $c->render_resource_not_found("File transport") >+ unless $file_transport; > > return $c->render( > status => 200, >- openapi => $c->objects->to_api($sftp_server), >+ openapi => $c->objects->to_api($file_transport), > ); > } catch { > $c->unhandled_exception($_); >@@ -83,14 +83,14 @@ sub add { > > return try { > >- my $sftp_server = Koha::File::Transport->new_from_api( $c->req->json ); >- $sftp_server->store->discard_changes; >+ my $file_transport = Koha::File::Transport->new_from_api( $c->req->json ); >+ $file_transport->store->discard_changes; > >- $c->res->headers->location( $c->req->url->to_string . '/' . $sftp_server->id ); >+ $c->res->headers->location( $c->req->url->to_string . '/' . $file_transport->id ); > > return $c->render( > status => 201, >- openapi => $c->objects->to_api($sftp_server), >+ openapi => $c->objects->to_api($file_transport), > ); > } catch { > if ( blessed $_ and $_->isa('Koha::Exceptions::Object::DuplicateID') ) { >@@ -116,18 +116,18 @@ Controller method that handles updating a Koha::File::Transport object > sub update { > my $c = shift->openapi->valid_input or return; > >- my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); >+ my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); > >- return $c->render_resource_not_found("FTP/SFTP server") >- unless $sftp_server; >+ return $c->render_resource_not_found("File transport") >+ unless $file_transport; > > return try { >- $sftp_server->set_from_api( $c->req->json ); >- $sftp_server->store->discard_changes; >+ $file_transport->set_from_api( $c->req->json ); >+ $file_transport->store->discard_changes; > > return $c->render( > status => 200, >- openapi => $c->objects->to_api($sftp_server), >+ openapi => $c->objects->to_api($file_transport), > ); > } catch { > if ( blessed $_ and $_->isa('Koha::Exceptions::Object::DuplicateID') ) { >@@ -153,13 +153,13 @@ Controller method that handles deleting a Koha::File::Transport object > sub delete { > my $c = shift->openapi->valid_input or return; > >- my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); >+ my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); > >- return $c->render_resource_not_found("FTP/SFTP server") >- unless $sftp_server; >+ return $c->render_resource_not_found("File transport") >+ unless $file_transport; > > return try { >- $sftp_server->delete; >+ $file_transport->delete; > return $c->render_resource_deleted; > } catch { > $c->unhandled_exception($_); >diff --git a/api/v1/swagger/definitions/sftp_server.yaml b/api/v1/swagger/definitions/file_transport.yaml >similarity index 84% >rename from api/v1/swagger/definitions/sftp_server.yaml >rename to api/v1/swagger/definitions/file_transport.yaml >index 48216efae1b..8ad648577f9 100644 >--- a/api/v1/swagger/definitions/sftp_server.yaml >+++ b/api/v1/swagger/definitions/file_transport.yaml >@@ -1,13 +1,13 @@ > --- > type: object > properties: >- sftp_server_id: >+ file_transport_id: > type: integer >- description: Internal FTP/SFTP server identifier >+ description: Internal File transport identifier > readOnly: true > name: > type: string >- description: Name of the FTP/SFTP server >+ description: Name of the File transport > host: > type: string > description: FTP/SFTP host name (optional) >@@ -20,7 +20,7 @@ properties: > - ftp > - sftp > - file >- description: Transport of FTP/SFTP server (optional) >+ description: Transport of File transport (optional) > auth_mode: > type: string > enum: >@@ -60,7 +60,7 @@ properties: > type: > - object > - "null" >- description: Most recent status of the FTP/SFTP server (optional) >+ description: Most recent status of the File transport (optional) > debug: > type: boolean > description: If the SMTP connection is set to debug mode (optional) >diff --git a/api/v1/swagger/paths/config_sftp_servers.yaml b/api/v1/swagger/paths/config_file_transports.yaml >similarity index 75% >rename from api/v1/swagger/paths/config_sftp_servers.yaml >rename to api/v1/swagger/paths/config_file_transports.yaml >index 4e6919192b2..81830faf050 100644 >--- a/api/v1/swagger/paths/config_sftp_servers.yaml >+++ b/api/v1/swagger/paths/config_file_transports.yaml >@@ -1,11 +1,11 @@ > --- >-/config/sftp_servers: >+/config/file_transports: > get: >- x-mojo-to: Config::SFTP::Servers#list >- operationId: listSFTPServers >+ x-mojo-to: Config::File::Transports#list >+ operationId: listFileTransportServers > tags: >- - sftp_servers >- summary: List FTP/SFTP servers >+ - file_transports >+ summary: List File transports > produces: > - application/json > parameters: >@@ -18,11 +18,11 @@ > - $ref: "../swagger.yaml#/parameters/request_id_header" > responses: > "200": >- description: A list of FTP/SFTP servers >+ description: A list of File transports > schema: > type: array > items: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > "400": > description: | > Bad request. Possible `error_code` attribute values: >@@ -49,25 +49,25 @@ > permissions: > parameters: manage_file_transports > post: >- x-mojo-to: Config::SFTP::Servers#add >- operationId: addSFTPServer >+ x-mojo-to: Config::File::Transports#add >+ operationId: addFileTransportServer > tags: >- - sftp_servers >- summary: Add FTP/SFTP server >+ - file_transports >+ summary: Add File transport > parameters: > - name: body > in: body >- description: A JSON object representing a new FTP/SFTP server configuration >+ description: A JSON object representing a new File transport configuration > required: true > schema: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > produces: > - application/json > responses: > "201": >- description: An FTP/SFTP server object >+ description: An File transport object > schema: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > "400": > description: Bad request > schema: >@@ -98,22 +98,22 @@ > x-koha-authorization: > permissions: > parameters: manage_file_transports >-"/config/sftp_servers/{sftp_server_id}": >+"/config/file_transports/{file_transport_id}": > get: >- x-mojo-to: Config::SFTP::Servers#get >- operationId: getSFTPServer >+ x-mojo-to: Config::File::Transports#get >+ operationId: getFileTransportServer > tags: >- - sftp_servers >- summary: Get FTP/SFTP server >+ - file_transports >+ summary: Get File transport > parameters: >- - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" >+ - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" > produces: > - application/json > responses: > "200": >- description: An FTP/SFTP server object >+ description: An File transport object > schema: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > "400": > description: Bad request > schema: >@@ -141,26 +141,26 @@ > permissions: > parameters: manage_file_transports > put: >- x-mojo-to: Config::SFTP::Servers#update >- operationId: updateSFTPServer >+ x-mojo-to: Config::File::Transports#update >+ operationId: updateFileTransportServer > tags: >- - sftp_servers >- summary: Update FTP/SFTP server >+ - file_transports >+ summary: Update File transport > parameters: >- - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" >+ - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" > - name: body > in: body >- description: An FTP/SFTP server object >+ description: An File transport object > required: true > schema: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > produces: > - application/json > responses: > "200": >- description: An FTP/SFTP server object >+ description: An File transport object > schema: >- $ref: "../swagger.yaml#/definitions/sftp_server" >+ $ref: "../swagger.yaml#/definitions/file_transport" > "400": > description: Bad request > schema: >@@ -192,18 +192,18 @@ > permissions: > parameters: manage_file_transports > delete: >- x-mojo-to: Config::SFTP::Servers#delete >- operationId: deleteSFTPServer >+ x-mojo-to: Config::File::Transports#delete >+ operationId: deleteFileTransportServer > tags: >- - sftp_servers >- summary: Delete FTP/SFTP server >+ - file_transports >+ summary: Delete File transport > parameters: >- - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" >+ - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" > produces: > - application/json > responses: > "204": >- description: FTP/SFTP server deleted >+ description: File transport deleted > "400": > description: Bad request > schema: >diff --git a/api/v1/swagger/swagger.yaml b/api/v1/swagger/swagger.yaml >index 67c54647ccb..d1ca532726f 100644 >--- a/api/v1/swagger/swagger.yaml >+++ b/api/v1/swagger/swagger.yaml >@@ -178,8 +178,8 @@ definitions: > $ref: ./definitions/search_filter.yaml > smtp_server: > $ref: ./definitions/smtp_server.yaml >- sftp_server: >- $ref: ./definitions/sftp_server.yaml >+ file_transport: >+ $ref: ./definitions/file_transport.yaml > suggestion: > $ref: ./definitions/suggestion.yaml > ticket: >@@ -321,10 +321,10 @@ paths: > $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers > "/config/smtp_servers/{smtp_server_id}": > $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}" >- /config/sftp_servers: >- $ref: ./paths/config_sftp_servers.yaml#/~1config~1sftp_servers >- "/config/sftp_servers/{sftp_server_id}": >- $ref: "./paths/config_sftp_servers.yaml#/~1config~1sftp_servers~1{sftp_server_id}" >+ /config/file_transports: >+ $ref: ./paths/config_file_transports.yaml#/~1config~1file_transports >+ "/config/file_transports/{file_transport_id}": >+ $ref: "./paths/config_file_transports.yaml#/~1config~1file_transports~1{file_transport_id}" > "/deleted/biblios": > $ref: "./paths/deleted_biblios.yaml#/~1deleted~1biblios" > "/deleted/biblios/{biblio_id}": >@@ -961,10 +961,10 @@ parameters: > name: smtp_server_id > required: true > type: integer >- sftp_server_id_pp: >- description: FTP/SFTP server internal identifier >+ file_transport_id_pp: >+ description: File transport internal identifier > in: path >- name: sftp_server_id >+ name: file_transport_id > required: true > type: integer > suggestion_id_pp: >@@ -1317,9 +1317,9 @@ tags: > - description: "Manage SMTP servers configurations\n" > name: smtp_servers > x-displayName: SMTP servers >- - description: "Manage FTP/SFTP servers configurations\n" >- name: sftp_servers >- x-displayName: FTP/SFTP servers >+ - description: "Manage file transport configurations\n" >+ name: file_transports >+ x-displayName: File transports > - description: "Manage tickets\n" > name: tickets > x-displayName: Tickets >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt >index 9692ec4fc12..56c01e175d3 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt >@@ -274,7 +274,7 @@ > <form action="/cgi-bin/koha/admin/file_transports.pl" id="edit_save" name="edit_save" class="validated" method="post"> > [% INCLUDE 'csrf-token.inc' %] > <input type="hidden" name="op" value="cud-edit_save" /> >- <input type="hidden" name="sftp_server_id" value="[%- sftp_server.id | html -%]" /> >+ <input type="hidden" name="file_transport_id" value="[%- sftp_server.id | html -%]" /> > <fieldset class="rows"> > <ol> > <li> >@@ -415,7 +415,7 @@ > </div> > [% ELSE %] > <div class="page-section"> >- <table id="sftp_servers"> >+ <table id="file_transports"> > <thead> > <tr> > <th>Name</th> >@@ -475,10 +475,10 @@ > <script> > $(document).ready(function() { > >- var sftp_servers_url = '/api/v1/config/sftp_servers'; >- window.sftp_servers = $("#sftp_servers").kohaTable({ >+ var file_transports_url = '/api/v1/config/file_transports'; >+ window.file_transports = $("#file_transports").kohaTable({ > "ajax": { >- "url": sftp_servers_url >+ "url": file_transports_url > }, > "language": { > "emptyTable": "<div class=\"alert alert-info\">"+_("There are no file transports defined.")+"</div>" >@@ -617,8 +617,8 @@ > }, > { > "data": function(row, type, val, meta) { >- let result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/file_transports.pl?op=edit_form&sftp_server_id='+ encodeURIComponent(row.sftp_server_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n"; >- result += '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-sftp-server-id="'+ encodeURIComponent(row.sftp_server_id) +'" data-sftp-server-name="'+ encodeURIComponent(row.name.escapeHtml()) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>'; >+ let result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/file_transports.pl?op=edit_form&file_transport_id='+ encodeURIComponent(row.file_transport_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n"; >+ result += '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-sftp-server-id="'+ encodeURIComponent(row.file_transport_id) +'" data-sftp-server-name="'+ encodeURIComponent(row.name.escapeHtml()) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>'; > return result; > }, > "searchable": false, >@@ -635,27 +635,27 @@ > }, > }); > >- $('#sftp_servers').on("click", '.delete_server', function() { >- var sftp_server_id = $(this).data('sftp-server-id'); >+ $('#file_transports').on("click", '.delete_server', function() { >+ var file_transport_id = $(this).data('sftp-server-id'); > var sftp_server_name = decodeURIComponent($(this).data('sftp-server-name')); > > $("#delete_confirm_dialog").html( > _("You are about to delete the '%s' file transport.").format(sftp_server_name) > ); >- $("#delete_confirm_modal_button").data('sftp-server-id', sftp_server_id); >+ $("#delete_confirm_modal_button").data('sftp-server-id', file_transport_id); > $("#delete_confirm_modal_button").data('sftp-server-name', sftp_server_name); > }); > > $("#delete_confirm_modal_button").on("click", function() { > >- var sftp_server_id = $(this).data('sftp-server-id'); >+ var file_transport_id = $(this).data('sftp-server-id'); > var sftp_server_name = $(this).data('sftp-server-name'); > > $.ajax({ > method: "DELETE", >- url: "/api/v1/config/sftp_servers/"+sftp_server_id >+ url: "/api/v1/config/file_transports/"+file_transport_id > }).success(function() { >- window.sftp_servers.api().ajax.reload(function(data) { >+ window.file_transports.api().ajax.reload(function(data) { > $("#sftp_action_result_dialog").hide(); > $("#sftp_delete_success").html(_("Server '%s' deleted successfully.").format(sftp_server_name)).show(); > }); >diff --git a/t/db_dependent/api/v1/sftp_servers.t b/t/db_dependent/api/v1/file_transports.t >similarity index 64% >rename from t/db_dependent/api/v1/sftp_servers.t >rename to t/db_dependent/api/v1/file_transports.t >index 772833fff75..ebe3a56cfae 100755 >--- a/t/db_dependent/api/v1/sftp_servers.t >+++ b/t/db_dependent/api/v1/file_transports.t >@@ -61,10 +61,10 @@ subtest 'list() tests' => sub { > my $unauth_userid = $patron->userid; > > ## Authorized user tests >- # No FTP/SFTP servers, so empty array should be returned >- $t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200)->json_is( [] ); >+ # No File transports, so empty array should be returned >+ $t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200)->json_is( [] ); > >- my $sftp_server = $builder->build_object( >+ my $file_transport = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -76,10 +76,11 @@ subtest 'list() tests' => sub { > } > ); > >- # One sftp server created, should get returned >- $t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200)->json_is( [ $sftp_server->to_api ] ); >+ # One file transport created, should get returned >+ $t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200) >+ ->json_is( [ $file_transport->to_api ] ); > >- my $another_sftp_server = $builder->build_object( >+ my $another_file_transport = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -91,12 +92,12 @@ subtest 'list() tests' => sub { > } > ); > >- # Two FTP/SFTP servers created, they should both be returned >- $t->get_ok("//$userid:$password@/api/v1/config/sftp_servers")->status_is(200) >- ->json_is( [ $sftp_server->to_api, $another_sftp_server->to_api, ] ); >+ # Two File transports created, they should both be returned >+ $t->get_ok("//$userid:$password@/api/v1/config/file_transports")->status_is(200) >+ ->json_is( [ $file_transport->to_api, $another_file_transport->to_api, ] ); > > # Unauthorized access >- $t->get_ok("//$unauth_userid:$password@/api/v1/config/sftp_servers")->status_is(403); >+ $t->get_ok("//$unauth_userid:$password@/api/v1/config/file_transports")->status_is(403); > > $schema->storage->txn_rollback; > }; >@@ -107,7 +108,7 @@ subtest 'get() tests' => sub { > > $schema->storage->txn_begin; > >- my $sftp_server = $builder->build_object( >+ my $file_transport = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -138,12 +139,12 @@ subtest 'get() tests' => sub { > $patron->set_password( { password => $password, skip_validation => 1 } ); > my $unauth_userid = $patron->userid; > >- $t->get_ok( "//$userid:$password@/api/v1/config/sftp_servers/" . $sftp_server->id )->status_is(200) >- ->json_is( $sftp_server->to_api ); >+ $t->get_ok( "//$userid:$password@/api/v1/config/file_transports/" . $file_transport->id )->status_is(200) >+ ->json_is( $file_transport->to_api ); > >- $t->get_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers/" . $sftp_server->id )->status_is(403); >+ $t->get_ok( "//$unauth_userid:$password@/api/v1/config/file_transports/" . $file_transport->id )->status_is(403); > >- my $sftp_server_to_delete = $builder->build_object( >+ my $file_transport_to_delete = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -154,11 +155,11 @@ subtest 'get() tests' => sub { > }, > } > ); >- my $non_existent_id = $sftp_server_to_delete->id; >- $sftp_server_to_delete->delete; >+ my $non_existent_id = $file_transport_to_delete->id; >+ $file_transport_to_delete->delete; > >- $t->get_ok("//$userid:$password@/api/v1/config/sftp_servers/$non_existent_id")->status_is(404) >- ->json_is( '/error' => 'FTP/SFTP server not found' ); >+ $t->get_ok("//$userid:$password@/api/v1/config/file_transports/$non_existent_id")->status_is(404) >+ ->json_is( '/error' => 'File transport not found' ); > > $schema->storage->txn_rollback; > }; >@@ -191,7 +192,7 @@ subtest 'add() tests' => sub { > $patron->set_password( { password => $password, skip_validation => 1 } ); > my $unauth_userid = $patron->userid; > >- my $sftp_server = $builder->build_object( >+ my $file_transport = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -202,21 +203,21 @@ subtest 'add() tests' => sub { > }, > } > ); >- my $sftp_server_data = $sftp_server->to_api; >- delete $sftp_server_data->{sftp_server_id}; >- $sftp_server->delete; >+ my $file_transport_data = $file_transport->to_api; >+ delete $file_transport_data->{file_transport_id}; >+ $file_transport->delete; > > # Unauthorized attempt to write >- $t->post_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data ) >+ $t->post_ok( "//$unauth_userid:$password@/api/v1/config/file_transports" => json => $file_transport_data ) > ->status_is(403); > > # Authorized attempt to write invalid data >- my $sftp_server_with_invalid_field = { >+ my $file_transport_with_invalid_field = { > name => 'Some other server', > blah => 'blah' > }; > >- $t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_with_invalid_field ) >+ $t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_with_invalid_field ) > ->status_is(400)->json_is( > "/errors" => [ > { >@@ -227,25 +228,25 @@ subtest 'add() tests' => sub { > ); > > # Authorized attempt to write >- my $sftp_server_id = >- $t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data ) >+ my $file_transport_id = >+ $t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data ) > ->status_is( 201, 'SWAGGER3.2.1' ) >- ->header_like( Location => qr|^\/api\/v1\/config\/sftp_servers\/\d*|, 'SWAGGER3.4.1' ) >- ->json_is( '/name' => $sftp_server_data->{name} )->tx->res->json->{sftp_server_id}; >+ ->header_like( Location => qr|^\/api\/v1\/config\/file_transports\/\d*|, 'SWAGGER3.4.1' ) >+ ->json_is( '/name' => $file_transport_data->{name} )->tx->res->json->{file_transport_id}; > > # Authorized attempt to create with null id >- $sftp_server_data->{sftp_server_id} = undef; >- $t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data )->status_is(400) >+ $file_transport_data->{file_transport_id} = undef; >+ $t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data )->status_is(400) > ->json_has('/errors'); > > # Authorized attempt to create with existing id >- $sftp_server_data->{sftp_server_id} = $sftp_server_id; >- $t->post_ok( "//$userid:$password@/api/v1/config/sftp_servers" => json => $sftp_server_data )->status_is(400) >+ $file_transport_data->{file_transport_id} = $file_transport_id; >+ $t->post_ok( "//$userid:$password@/api/v1/config/file_transports" => json => $file_transport_data )->status_is(400) > ->json_is( > "/errors" => [ > { > message => "Read-only.", >- path => "/body/sftp_server_id" >+ path => "/body/file_transport_id" > } > ] > ); >@@ -279,7 +280,7 @@ subtest 'update() tests' => sub { > $patron->set_password( { password => $password, skip_validation => 1 } ); > my $unauth_userid = $patron->userid; > >- my $sftp_server_id = $builder->build_object( >+ my $file_transport_id = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -292,47 +293,45 @@ subtest 'update() tests' => sub { > )->id; > > # Unauthorized attempt to update >- $t->put_ok( "//$unauth_userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => >+ $t->put_ok( "//$unauth_userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => > { name => 'New unauthorized name change' } )->status_is(403); > > # Attempt partial update on a PUT >- my $sftp_server_with_missing_field = { >+ my $file_transport_with_missing_field = { > host => 'localhost', > passive => '1' > }; > >- $t->put_ok( >- "//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_missing_field ) >- ->status_is(400)->json_is( "/errors" => [ { message => "Missing property.", path => "/body/name" } ] ); >+ $t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => >+ $file_transport_with_missing_field )->status_is(400) >+ ->json_is( "/errors" => [ { message => "Missing property.", path => "/body/name" } ] ); > > # Full object update on PUT >- my $sftp_server_with_updated_field = { >+ my $file_transport_with_updated_field = { > name => "Some name", > password => "some_pass", > }; > >- $t->put_ok( >- "//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_updated_field ) >- ->status_is(200)->json_is( '/name' => 'Some name' ); >+ $t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => >+ $file_transport_with_updated_field )->status_is(200)->json_is( '/name' => 'Some name' ); > > # Authorized attempt to write invalid data >- my $sftp_server_with_invalid_field = { >+ my $file_transport_with_invalid_field = { > blah => "Blah", > name => 'Some name' > }; > >- $t->put_ok( >- "//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_invalid_field ) >- ->status_is(400)->json_is( >+ $t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => >+ $file_transport_with_invalid_field )->status_is(400)->json_is( > "/errors" => [ > { > message => "Properties not allowed: blah.", > path => "/body" > } > ] >- ); >+ ); > >- my $sftp_server_to_delete = $builder->build_object( >+ my $file_transport_to_delete = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -343,19 +342,17 @@ subtest 'update() tests' => sub { > }, > } > ); >- my $non_existent_id = $sftp_server_to_delete->id; >- $sftp_server_to_delete->delete; >+ my $non_existent_id = $file_transport_to_delete->id; >+ $file_transport_to_delete->delete; > >- $t->put_ok( >- "//$userid:$password@/api/v1/config/sftp_servers/$non_existent_id" => json => $sftp_server_with_updated_field ) >- ->status_is(404); >+ $t->put_ok( "//$userid:$password@/api/v1/config/file_transports/$non_existent_id" => json => >+ $file_transport_with_updated_field )->status_is(404); > > # Wrong method (POST) >- $sftp_server_with_updated_field->{sftp_server_id} = 2; >+ $file_transport_with_updated_field->{file_transport_id} = 2; > >- $t->post_ok( >- "//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id" => json => $sftp_server_with_updated_field ) >- ->status_is(404); >+ $t->post_ok( "//$userid:$password@/api/v1/config/file_transports/$file_transport_id" => json => >+ $file_transport_with_updated_field )->status_is(404); > > $schema->storage->txn_rollback; > }; >@@ -386,7 +383,7 @@ subtest 'delete() tests' => sub { > $patron->set_password( { password => $password, skip_validation => 1 } ); > my $unauth_userid = $patron->userid; > >- my $sftp_server_id = $builder->build_object( >+ my $file_transport_id = $builder->build_object( > { > class => 'Koha::File::Transports', > value => { >@@ -399,12 +396,12 @@ subtest 'delete() tests' => sub { > )->id; > > # Unauthorized attempt to delete >- $t->delete_ok("//$unauth_userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is(403); >+ $t->delete_ok("//$unauth_userid:$password@/api/v1/config/file_transports/$file_transport_id")->status_is(403); > >- $t->delete_ok("//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is( 204, 'SWAGGER3.2.4' ) >- ->content_is( '', 'SWAGGER3.3.4' ); >+ $t->delete_ok("//$userid:$password@/api/v1/config/file_transports/$file_transport_id") >+ ->status_is( 204, 'SWAGGER3.2.4' )->content_is( '', 'SWAGGER3.3.4' ); > >- $t->delete_ok("//$userid:$password@/api/v1/config/sftp_servers/$sftp_server_id")->status_is(404); >+ $t->delete_ok("//$userid:$password@/api/v1/config/file_transports/$file_transport_id")->status_is(404); > > $schema->storage->txn_rollback; > }; >-- >2.51.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 39190
:
178555
|
178556
|
178557
|
178558
|
178559
|
178560
|
178561
|
178562
|
178563
|
178564
|
178565
|
178566
|
178567
|
178568
|
178569
|
178570
|
178571
|
179252
|
179253
|
179254
|
179255
|
179256
|
179257
|
179258
|
179259
|
179260
|
179261
|
179262
|
179263
|
179264
|
179265
|
179266
|
179267
|
179268
|
179396
|
179397
|
179398
|
179399
|
179400
|
179401
|
179402
|
179403
|
179404
|
179405
|
179406
|
179407
|
179408
|
179409
|
179410
|
179411
|
179412
|
179413
|
179589
|
179590
|
179591
|
179592
|
179593
|
179594
|
179595
|
179596
|
179597
|
179598
|
179599
|
179600
|
179601
|
179602
|
179603
|
179604
|
179605
|
179606
|
179646
|
179647
|
179648
|
179649
|
179650
|
179651
|
179652
|
179653
|
179654
|
179655
|
179656
|
179657
|
179658
|
179659
|
179660
|
179661
|
179662
|
179663
|
179992
|
179993
|
179994
|
179995
|
179996
|
179997
|
179998
|
179999
|
180000
|
180001
|
180002
|
180003
|
180004
|
180005
|
180006
|
180010
|
180011
|
180012
|
180013
|
180014
|
180015
|
180016
|
180017
|
180018
|
180019
|
180020
|
180021
|
180022
|
180023
|
180024
|
180025
|
185014
|
185015
|
185016
|
185017
|
185018
|
185019
|
185020
|
185021
|
185022
|
185023
|
185024
|
185025
|
185026
|
185027
|
185028
|
185029
|
185972
|
185973
|
185974
|
185975
|
185976
|
185977
|
185978
|
185979
|
185980
|
185981
|
185982
|
185983
|
185984
|
185985
|
185986
|
185987
|
185988
|
185989
|
185990
|
185994
|
185995
|
185996
| 185997 |
185998