From 1cb464c4f653257bde59fd06cd1176f99eac53d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Tue, 17 Mar 2020 13:31:15 +0100 Subject: [PATCH] #1080 Offset & limit --- app/controllers/dmsf_controller.rb | 4 +++- app/views/dmsf/_query_list.html.erb | 2 +- app/views/dmsf/_query_rows.erb | 7 ++++++- app/views/dmsf/query_rows.js.erb | 2 +- app/views/dmsf/show.api.rsb | 4 ++-- app/views/dmsf/show.html.erb | 2 +- test/functional/dmsf_controller_test.rb | 21 ++++++++++++++++++- .../rest_api/dmsf_folder_api_test.rb | 4 +++- 8 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 4352d76c..a550481b 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -75,7 +75,9 @@ class DmsfController < ApplicationController @dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] render layout: !request.xhr? } - format.api + format.api { + @offset, @limit = api_offset_and_limit + } format.csv { send_data query_to_csv(@query.dmsf_nodes, @query), type: 'text/csv; header=present', filename: 'dmsf.csv' } diff --git a/app/views/dmsf/_query_list.html.erb b/app/views/dmsf/_query_list.html.erb index 33424444..cdaa282c 100644 --- a/app/views/dmsf/_query_list.html.erb +++ b/app/views/dmsf/_query_list.html.erb @@ -41,7 +41,7 @@ - <%= render partial: 'query_rows', locals: { query: query } %> + <%= render partial: 'query_rows', locals: { query: query, dmsf_pages: dmsf_pages } %> diff --git a/app/views/dmsf/_query_rows.erb b/app/views/dmsf/_query_rows.erb index 0feca1ca..4b156b06 100644 --- a/app/views/dmsf/_query_rows.erb +++ b/app/views/dmsf/_query_rows.erb @@ -20,7 +20,12 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<% query.dmsf_nodes.each do |node| %> +<% options = {} %> +<% if dmsf_pages %> + <% options[:offset] = dmsf_pages.offset %> + <% options[:limit] = dmsf_pages.per_page %> +<% end %> +<% query.dmsf_nodes(options).each do |node| %> <% system = node.title =~ /^\./ %> <% @idnt ||= 0 %> "> diff --git a/app/views/dmsf/query_rows.js.erb b/app/views/dmsf/query_rows.js.erb index c06b21e8..89274068 100644 --- a/app/views/dmsf/query_rows.js.erb +++ b/app/views/dmsf/query_rows.js.erb @@ -1,2 +1,2 @@ // Add rows -$('#<%= params[:row_id] %>').after('<%= escape_javascript(render(partial: 'dmsf/query_rows', locals: { query: @query })) %>'); +$('#<%= params[:row_id] %>').after('<%= escape_javascript(render(partial: 'dmsf/query_rows', locals: { query: @query, dmsf_pages: nil })) %>'); diff --git a/app/views/dmsf/show.api.rsb b/app/views/dmsf/show.api.rsb index 76dfee1b..e2422d0e 100644 --- a/app/views/dmsf/show.api.rsb +++ b/app/views/dmsf/show.api.rsb @@ -1,7 +1,7 @@ api.dmsf do - api.array :dmsf_nodes, api_meta(total_count: @query.dmsf_nodes.count) do - @query.dmsf_nodes.each do |node| + api.array :dmsf_nodes, api_meta(total_count: @query.dmsf_nodes(offset: @offset, limit: @limit).count) do + @query.dmsf_nodes(offset: @offset, limit: @limit).each do |node| api.node do api.id node.id api.title node.title diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb index 869ae39f..337ed80d 100644 --- a/app/views/dmsf/show.html.erb +++ b/app/views/dmsf/show.html.erb @@ -94,7 +94,7 @@ <%= form_tag(dmsf_folder_path(d: @project, folder_id: @folder), method: :get, id: 'query_form') do %> <%= render partial: 'queries/query_form' %> <% end %> -<%= render partial: 'query_list', locals: { query: @query } %> +<%= render partial: 'query_list', locals: { query: @query, dmsf_pages: @dmsf_pages } %> <%= pagination_links_full @dmsf_pages, @dmsf_count %> <%= context_menu %> diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb index 35b7f12c..1aa33f5c 100644 --- a/test/functional/dmsf_controller_test.rb +++ b/test/functional/dmsf_controller_test.rb @@ -218,9 +218,28 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_show @role.add_permission! :view_dmsf_files @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_manipulation get :show, params: { id: @project.id } assert_response :success - assert_select 'tr.dmsf_tree' + # New file link + assert_select 'a.icon-add' + # Filters + assert_select 'fieldset#filters' + # Options + assert_select 'fieldset#options' + # The main table + assert_select 'table.dmsf' + # CSV export + assert_select 'a.csv' + end + + def test_show_without_file_manipulation + @role.add_permission! :view_dmsf_files + @role.add_permission! :view_dmsf_folders + get :show, params: { id: @project.id } + assert_response :success + # New file link should be missing + assert_select 'a.icon-add', false, 'Adding files is not allowed' end def test_show_csv diff --git a/test/integration/rest_api/dmsf_folder_api_test.rb b/test/integration/rest_api/dmsf_folder_api_test.rb index 7844e6ce..67f32664 100644 --- a/test/integration/rest_api/dmsf_folder_api_test.rb +++ b/test/integration/rest_api/dmsf_folder_api_test.rb @@ -92,6 +92,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&limit=1&offset=2" assert_response :success assert_equal 'application/xml', @response.content_type + puts response.body # # # @@ -99,10 +100,11 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest # 7 # folder7 # folder + # # # # - assert_select 'dmsf > dmsf_nodes', count: 1 + assert_select 'dmsf > dmsf_nodes > node', count: 1 assert_select 'dmsf > dmsf_nodes > node > id', text: @folder7.id.to_s assert_select 'dmsf > dmsf_nodes > node > title', text: @folder7.title end