From 7414e5ee31495812ebbe2c7bbde4d4ac4d244598 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Tue, 23 Feb 2021 12:24:03 +0100 Subject: [PATCH] #1207 Plugin's settings --- test/functional/dmsf_controller_test.rb | 46 +++++----- test/helpers/dmsf_helper_test.rb | 5 +- .../rest_api/dmsf_folder_api_test.rb | 24 +++++ .../dmsf_webdav_custom_middleware_test.rb | 7 +- .../webdav/dmsf_webdav_delete_test.rb | 44 +++++---- .../webdav/dmsf_webdav_get_test.rb | 26 +++--- .../webdav/dmsf_webdav_head_test.rb | 22 +++-- .../webdav/dmsf_webdav_mkcol_test.rb | 13 +-- .../webdav/dmsf_webdav_move_test.rb | 38 ++++---- .../webdav/dmsf_webdav_options_test.rb | 13 +-- .../webdav/dmsf_webdav_propfind_test.rb | 92 ++++++++++--------- .../webdav/dmsf_webdav_put_test.rb | 82 +++++++++-------- test/integration_test.rb | 9 +- test/test_case.rb | 14 +-- test/unit/dmsf_file_test.rb | 11 +-- test/unit_test.rb | 2 +- 16 files changed, 249 insertions(+), 199 deletions(-) diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb index f171db64..43a41547 100644 --- a/test/functional/dmsf_controller_test.rb +++ b/test/functional/dmsf_controller_test.rb @@ -259,30 +259,34 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_email_entries_email_from_forbidden @role_manager.remove_permission! :email_documents - Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com' - get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} - assert_response :forbidden + with_settings plugin_redmine_dmsf: {'dmsf_documents_email_from' => 'karel.picman@kontron.com'} do + get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} + assert_response :forbidden + end end def test_email_entries_email_from - Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com' - get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} - assert_response :success - assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] + with_settings plugin_redmine_dmsf: {'dmsf_documents_email_from' => 'karel.picman@kontron.com'} do + get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} + assert_response :success + assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] + end end def test_email_entries_reply_to - Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com' - get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} - assert_response :success - assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] + with_settings plugin_redmine_dmsf: {'dmsf_documents_email_reply_to' => 'karel.picman@kontron.com'} do + get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} + assert_response :success + assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] + end end def test_email_entries_links_only - Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1' - get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} - assert_response :success - assert_select "input[id=email_links_only][value=1]" + with_settings plugin_redmine_dmsf: {'dmsf_documents_email_links_only' => '1'} do + get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} + assert_response :success + assert_select "input[id=email_links_only][value=1]" + end end def test_entries_email @@ -347,12 +351,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_show_with_sub_projects - Setting.clear_cache - Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = '1' - get :show, params: { id: @project1.id } - assert_response :success - # @project3 is as a sub-folder - assert_select "tr##{@project3.id}pspan", count: 1 + with_settings plugin_redmine_dmsf: {'dmsf_projects_as_subfolders' => '1'} do + get :show, params: { id: @project1.id } + assert_response :success + # @project3 is as a sub-folder + assert_select "tr##{@project3.id}pspan", count: 1 + end end def test_show_without_sub_projects diff --git a/test/helpers/dmsf_helper_test.rb b/test/helpers/dmsf_helper_test.rb index 3f6e9814..df2037cb 100644 --- a/test/helpers/dmsf_helper_test.rb +++ b/test/helpers/dmsf_helper_test.rb @@ -29,8 +29,9 @@ class DmsfHelperTest < RedmineDmsf::Test::HelperTest assert_equal "#{base_url}/", webdav_url(nil, nil) assert_equal "#{base_url}/ecookbook/", webdav_url(@project1, nil) assert_equal "#{base_url}/ecookbook/folder1/", webdav_url(@project1, @folder1) - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - assert_equal "#{base_url}/eCookbook 1/", webdav_url(@project1, nil) + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1'} do + assert_equal "#{base_url}/eCookbook 1/", webdav_url(@project1, nil) + end end end diff --git a/test/integration/rest_api/dmsf_folder_api_test.rb b/test/integration/rest_api/dmsf_folder_api_test.rb index 1c069227..e566aefa 100644 --- a/test/integration/rest_api/dmsf_folder_api_test.rb +++ b/test/integration/rest_api/dmsf_folder_api_test.rb @@ -53,6 +53,30 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest assert_select 'dmsf > dmsf_nodes > node > type', text: 'folder' end + def test_list_folder_with_sub_projects + with_settings plugin_redmine_dmsf: {'dmsf_projects_as_subfolders' => '1'} do + #curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} http://localhost:3000/dmsf/files/17216.xml + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}" + assert_response :success + assert_equal 'application/xml', @response.content_type + # + # + # + # + # 3 + # eCookbook Subproject 1 + # project + # + # ... + # + # + # @project3 is as a sub-folder + assert_select 'dmsf > dmsf_nodes > node > id', text: @project3.id.to_s + assert_select 'dmsf > dmsf_nodes > node > title', text: @project3.name + assert_select 'dmsf > dmsf_nodes > node > type', text: 'project' + end + end + def test_list_folder_limit_and_offset #curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} "http://localhost:3000/dmsf/files/17216.xml?limit=1&offset=1" get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&limit=1&offset=2" diff --git a/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb b/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb index e3109d78..66d885b1 100644 --- a/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb +++ b/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb @@ -46,9 +46,10 @@ class DmsfWebdavCustomMiddlewareTest < RedmineDmsf::Test::IntegrationTest end def test_webdav_not_enabled - Setting.plugin_redmine_dmsf['dmsf_webdav'] = nil - process :options, '/dmsf/webdav' - assert_response :not_found + with_settings plugin_redmine_dmsf: {'dmsf_webdav' => nil} do + process :options, '/dmsf/webdav' + assert_response :not_found + end end def test_webdav_enabled diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 694190aa..b8434d26 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -25,7 +25,7 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest include Redmine::I18n - fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks + fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks def test_not_authenticated delete '/dmsf/webdav' @@ -69,9 +69,11 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_delete_when_ro - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY' - delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @admin - assert_response :bad_gateway # Item does not exist, as project is not enabled. + with_settings plugin_redmine_dmsf: {'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY', 'dmsf_webdav' => '1'} do + puts Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] + delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @admin + assert_response :bad_gateway # WebDAV is read only + end end def test_unlocked_file @@ -128,14 +130,15 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_folder_delete_by_user_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith - assert_response :conflict - p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", params: nil, headers: @jsmith - assert_response :success - @folder6.reload - assert @folder6.deleted?, "Folder #{@folder6.title} is not expected to exist" + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith + assert_response :conflict + p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", params: nil, headers: @jsmith + assert_response :success + @folder6.reload + assert @folder6.deleted?, "Folder #{@folder6.title} is not expected to exist" + end end def test_file_delete_by_administrator @@ -153,14 +156,15 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_file_delete_by_user_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith - assert_response :conflict - p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", params: nil, headers: @jsmith - assert_response :success - @file1.reload - assert @file1.deleted?, "File #{@file1.name} is not expected to exist" + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith + assert_response :conflict + p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", params: nil, headers: @jsmith + assert_response :success + @file1.reload + assert @file1.deleted?, "File #{@file1.name} is not expected to exist" + end end def test_folder_delete_fragments diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index 66454a90..6686e7b1 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -53,12 +53,13 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest assert_response :success assert !response.body.match(@project1.identifier).nil?, "Expected to find project #{@project1.identifier} in return data" - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = Addressable::URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - get '/dmsf/webdav', params: nil, headers: @admin - assert_response :success - assert_no_match @project1.identifier, response.body - assert_match project1_uri, response.body + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = Addressable::URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + get '/dmsf/webdav', params: nil, headers: @admin + assert_response :success + assert_no_match @project1.identifier, response.body + assert_match project1_uri, response.body + end end def test_should_not_list_non_dmsf_enabled_project @@ -113,12 +114,13 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest def test_download_file_from_dmsf_enabled_project get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :success - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin - assert_response :conflict - get "/dmsf/webdav/#{project1_uri}/test.txt", params: nil, headers: @admin - assert_response :success + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin + assert_response :conflict + get "/dmsf/webdav/#{project1_uri}/test.txt", params: nil, headers: @admin + assert_response :success + end end def test_should_list_dmsf_contents_within_project diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index 0fbd6fc0..0ded6fda 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -36,11 +36,12 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :success check_headers_exist - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin - assert_response :not_found - head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin - assert_response :success + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin + assert_response :not_found + head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin + assert_response :success + end end # Note: @@ -52,11 +53,12 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :success check_headers_exist - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin - assert_response :conflict - head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin - assert_response :success + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin + assert_response :conflict + head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin + assert_response :success + end end def test_head_responds_to_file_anonymous_other_user_agent diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index fb32d41f..cfd163f2 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -62,12 +62,13 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest def test_should_create_folder_for_non_admin_user_with_rights process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", params: nil, headers: @jsmith assert_response :success - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", params: nil, headers: @jsmith - assert_response :conflict - process :mkcol, "/dmsf/webdav/#{project1_uri}/test3", params: nil, headers: @jsmith - assert_response :success # Created + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", params: nil, headers: @jsmith + assert_response :conflict + process :mkcol, "/dmsf/webdav/#{project1_uri}/test3", params: nil, headers: @jsmith + assert_response :success # Created + end end def test_create_folder_in_subproject diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index 87df8bea..29ca2e21 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -107,15 +107,16 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest end def test_move_to_new_filename_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - new_name = "#{@file1.name}.moved" - assert_difference '@file1.dmsf_file_revisions.count', +1 do - process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil, - headers: @jsmith.merge!({ destination: "http://www.example.com/dmsf/webdav/#{project1_uri}/#{new_name}" }) - assert_response :created - f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}" - assert f, "Moved file '#{new_name}' not found in project." + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + new_name = "#{@file1.name}.moved" + assert_difference '@file1.dmsf_file_revisions.count', +1 do + process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil, + headers: @jsmith.merge!({ destination: "http://www.example.com/dmsf/webdav/#{project1_uri}/#{new_name}" }) + assert_response :created + f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}" + assert f, "Moved file '#{new_name}' not found in project." + end end end @@ -142,15 +143,16 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest end def test_move_to_new_folder_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - assert_difference '@file1.dmsf_file_revisions.count', +1 do - process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil, - headers: @jsmith.merge!({ - destination: "http://www.example.com/dmsf/webdav/#{project1_uri}/#{@folder1.title}/#{@file1.name}" }) - assert_response :created - @file1.reload - assert_equal @folder1.id, @file1.dmsf_folder_id + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + assert_difference '@file1.dmsf_file_revisions.count', +1 do + process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil, + headers: @jsmith.merge!({ + destination: "http://www.example.com/dmsf/webdav/#{project1_uri}/#{@folder1.title}/#{@file1.name}" }) + assert_response :created + @file1.reload + assert_equal @folder1.id, @file1.dmsf_folder_id + end end end diff --git a/test/integration/webdav/dmsf_webdav_options_test.rb b/test/integration/webdav/dmsf_webdav_options_test.rb index 30f7e5bd..31a17589 100644 --- a/test/integration/webdav/dmsf_webdav_options_test.rb +++ b/test/integration/webdav/dmsf_webdav_options_test.rb @@ -32,12 +32,13 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest end def test_options_returns_expected_allow_header_for_ro - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY' - process :options, '/dmsf/webdav' - assert_response :success - assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty' - assert response.headers['Allow'] , 'Allow header is empty or does not exist' - assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND' + with_settings plugin_redmine_dmsf: {'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY', 'dmsf_webdav' => '1'} do + process :options, '/dmsf/webdav' + assert_response :success + assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty' + assert response.headers['Allow'] , 'Allow header is empty or does not exist' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND' + end end def test_options_returns_expected_allow_header_for_rw diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index d572823e..9b32c270 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -54,17 +54,18 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest end def test_propfind_depth1_on_root_for_admin_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - process :propfind, '/dmsf/webdav/', params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) - assert_response :multi_status - assert response.body.include?('http://www.example.com:80/dmsf/webdav/') - assert response.body.include?('/') - # project.identifier should not match when using project names - assert !response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/") - assert !response.body.include?("#{@project1.identifier}") - # but the project name should match - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") - assert response.body.include?("#{@project1_name}") + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + process :propfind, '/dmsf/webdav/', params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) + assert_response :multi_status + assert response.body.include?('http://www.example.com:80/dmsf/webdav/') + assert response.body.include?('/') + # project.identifier should not match when using project names + assert !response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/") + assert !response.body.include?("#{@project1.identifier}") + # but the project name should match + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") + assert response.body.include?("#{@project1_name}") + end end def test_propfind_depth0_on_project1_for_non_member @@ -92,13 +93,14 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest end def test_propfind_depth0_on_project1_for_admin_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) - assert_response :not_found - process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) - assert_response :multi_status - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") - assert response.body.include?("#{@project1_name}") + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) + assert_response :not_found + process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) + assert_response :multi_status + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") + assert response.body.include?("#{@project1_name}") + end end def test_propfind_depth1_on_project1_for_admin @@ -122,35 +124,37 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest end def test_propfind_depth1_on_project1_for_admin_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) - assert_response :not_found - process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) - assert_response :multi_status - # Project - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") - # Folders - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/") - assert response.body.include?("#{@folder1.title}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/") - assert response.body.include?("#{@folder6.title}") - # Files - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}") - assert response.body.include?("#{@file1.name}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}") - assert response.body.include?("#{@file9.name}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}") - assert response.body.include?("#{@file10.name}") + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) + assert_response :not_found + process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) + assert_response :multi_status + # Project + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") + # Folders + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/") + assert response.body.include?("#{@folder1.title}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/") + assert response.body.include?("#{@folder6.title}") + # Files + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}") + assert response.body.include?("#{@file1.name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}") + assert response.body.include?("#{@file9.name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}") + assert response.body.include?("#{@file10.name}") + end end def test_propfind_depth1_on_root_for_admin - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) - project1_new_uri = ERB::Util.url_encode(project1_new_name) - process :propfind, "/dmsf/webdav/#{project1_new_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) - assert_response :multi_status - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/") - assert response.body.include?("#{project1_new_name}") + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_new_uri = ERB::Util.url_encode(project1_new_name) + process :propfind, "/dmsf/webdav/#{project1_new_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) + assert_response :multi_status + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/") + assert response.body.include?("#{project1_new_name}") + end end def test_propfind_for_subproject diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 79936b79..4ed5d610 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -74,13 +74,14 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest # Lets check for our file file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' assert file, 'Check for files existance' - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', - headers: @admin.merge!({ content_type: :text }) - assert_response :conflict - put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text }) - assert_response :created + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :conflict + put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :created + end end def test_put_failed_as_jsmith_on_non_dmsf_enabled_project @@ -110,14 +111,15 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert file.last_revision assert_equal 'SHA256', file.last_revision.digest_type - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', - headers: @jsmith.merge!({ content_type: :text }) - assert_response :conflict + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :conflict - project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text }) - assert_response :created # Now we have permissions + project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text }) + assert_response :created # Now we have permissions + end end def test_put_writes_revision_successfully_for_unlocked_file @@ -216,11 +218,10 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert_response :no_content put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_response :no_content - original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] - Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$' - put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) - assert_response :no_content - Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original + with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore' => '.dump$', 'dmsf_webdav' => '1'} do + put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :no_content + end end def test_put_non_versioned_files @@ -252,18 +253,19 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert_response :created end - Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$' - put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials - assert_response :success - file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') - assert file3 - assert_difference 'file3.dmsf_file_revisions.count', 0 do - put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '5678', headers: credentials - assert_response :created - end - assert_difference 'file3.dmsf_file_revisions.count', 0 do - put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '9ABC', headers: credentials - assert_response :created + with_settings plugin_redmine_dmsf: {'dmsf_webdav_disable_versioning' => '.dump$', 'dmsf_webdav' => '1'} do + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials + assert_response :success + file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') + assert file3 + assert_difference 'file3.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '5678', headers: credentials + assert_response :created + end + assert_difference 'file3.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '9ABC', headers: credentials + assert_response :created + end end end @@ -299,17 +301,19 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_ignore_1b_files_on - Setting.plugin_redmine_dmsf['dmsf_webdav_ignore_1b_file_for_authentication'] = '1' - put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', - headers: @jsmith.merge!({ content_type: :text }) - assert_response :no_content + with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore_1b_file_for_authentication' => '1', 'dmsf_webdav' => '1'} do + put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :no_content + end end def test_ignore_1b_files_off - Setting.plugin_redmine_dmsf['dmsf_webdav_ignore_1b_file_for_authentication'] = '' - put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', - headers: @jsmith.merge!({ content_type: :text }) - assert_response :created + with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore_1b_file_for_authentication' => nil, 'dmsf_webdav' => '1'} do + put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end end def test_files_exceeded_max_attachment_size diff --git a/test/integration_test.rb b/test/integration_test.rb index a921b16e..4252b70d 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -36,9 +36,9 @@ module RedmineDmsf @someone = credentials('someone', 'foo') @anonymous = credentials('') @project1 = Project.find 1 - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = nil - @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1'} do + @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + end @project1_uri = Addressable::URI.escape(@project1_name) @project2 = Project.find 2 @project3 = Project.find 3 @@ -65,6 +65,7 @@ module RedmineDmsf Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil + Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = nil Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf)) FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path User.current = nil @@ -75,7 +76,7 @@ module RedmineDmsf begin FileUtils.rm_rf DmsfFile.storage_path rescue => e - error e.message + Rails.logger.error e.message end end diff --git a/test/test_case.rb b/test/test_case.rb index 46e177ae..9a48b85d 100644 --- a/test/test_case.rb +++ b/test/test_case.rb @@ -49,9 +49,9 @@ module RedmineDmsf @dlopper = User.find_by(login: 'dlopper') @someone = User.find_by(login: 'someone') @project1 = Project.find 1 - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' - Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = nil - @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1'} do + @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + end @project1_uri = Addressable::URI.escape(@project1_name) @project2 = Project.find 2 @project3 = Project.find 3 @@ -86,9 +86,9 @@ module RedmineDmsf role.add_permission! :manage_workflows role.add_permission! :file_approval end - Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil + #Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' + #Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + #Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf)) Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = nil Setting.text_formatting = 'Textile' @@ -101,7 +101,7 @@ module RedmineDmsf begin FileUtils.rm_rf DmsfFile.storage_path rescue => e - error e.message + Rails.logger.error e.message end end diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index 55c54eab..5c86458a 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -238,12 +238,11 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest end def test_storage_path - setting = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf' - sp = DmsfFile.storage_path - assert_kind_of Pathname, sp - assert_equal Rails.root.join(Setting.plugin_redmine_dmsf['dmsf_storage_directory']).to_s, sp.to_s - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = setting + with_settings plugin_redmine_dmsf: {'dmsf_storage_directory' => 'files/dmsf'} do + sp = DmsfFile.storage_path + assert_kind_of Pathname, sp + assert_equal Rails.root.join(Setting.plugin_redmine_dmsf['dmsf_storage_directory']).to_s, sp.to_s + end end def test_owner diff --git a/test/unit_test.rb b/test/unit_test.rb index ae138c4c..91129bf0 100644 --- a/test/unit_test.rb +++ b/test/unit_test.rb @@ -67,7 +67,7 @@ module RedmineDmsf begin FileUtils.rm_rf DmsfFile.storage_path rescue => e - error e.message + Rails.logger.error e.message end end