From 29ddc82a11f30f7fcb917dd062fc38f48640b4ea Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 21 Jul 2016 16:58:59 +0000 Subject: [PATCH] Removes calls to #assert_template and #assigns in functional tests. git-svn-id: http://svn.redmine.org/redmine/trunk@15724 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- test/fixtures/wiki_content_versions.yml | 11 +- test/functional/boards_controller_test.rb | 7 +- test/functional/roles_controller_test.rb | 32 +-- test/functional/search_controller_test.rb | 224 +++++++++++------- .../search_custom_fields_visibility_test.rb | 4 +- test/functional/settings_controller_test.rb | 6 +- .../time_entry_reports_controller_test.rb | 40 +--- test/functional/timelog_controller_test.rb | 81 +++---- .../timelog_custom_fields_visibility_test.rb | 6 +- test/functional/trackers_controller_test.rb | 10 +- test/functional/users_controller_test.rb | 61 ++--- test/functional/versions_controller_test.rb | 47 ++-- test/functional/watchers_controller_test.rb | 10 +- test/functional/welcome_controller_test.rb | 15 +- test/functional/wiki_controller_test.rb | 95 +++----- test/functional/wikis_controller_test.rb | 3 - test/functional/workflows_controller_test.rb | 36 +-- 17 files changed, 333 insertions(+), 355 deletions(-) diff --git a/test/fixtures/wiki_content_versions.yml b/test/fixtures/wiki_content_versions.yml index d3a614ac9..99be463d8 100644 --- a/test/fixtures/wiki_content_versions.yml +++ b/test/fixtures/wiki_content_versions.yml @@ -9,10 +9,10 @@ wiki_content_versions_001: wiki_content_id: 1 compression: "" data: |- - h1. CookBook documentation + h1. CookBook documentation v1 - + Line from v1 Some [[documentation]] here... wiki_content_versions_002: updated_on: 2007-03-07 00:08:34 +01:00 @@ -24,10 +24,10 @@ wiki_content_versions_002: wiki_content_id: 1 compression: "" data: |- - h1. CookBook documentation + h1. CookBook documentation v2 - + Line from v1 Some updated [[documentation]] here... wiki_content_versions_003: updated_on: 2007-03-07 00:10:51 +01:00 @@ -39,7 +39,8 @@ wiki_content_versions_003: wiki_content_id: 1 compression: "" data: |- - h1. CookBook documentation + h1. CookBook documentation v3 + Some updated [[documentation]] here... wiki_content_versions_004: data: |- diff --git a/test/functional/boards_controller_test.rb b/test/functional/boards_controller_test.rb index dcb32d708..ce70599be 100644 --- a/test/functional/boards_controller_test.rb +++ b/test/functional/boards_controller_test.rb @@ -161,14 +161,14 @@ class BoardsControllerTest < Redmine::ControllerTest post :create, :project_id => 1, :board => { :name => '', :description => 'Testing board creation'} end assert_response :success - assert_template 'new' + assert_select_error /Name cannot be blank/ end def test_edit @request.session[:user_id] = 2 get :edit, :project_id => 1, :id => 2 assert_response :success - assert_template 'edit' + assert_select 'input[name=?][value=?]', 'board[name]', 'Discussion' end def test_edit_with_parent @@ -176,7 +176,6 @@ class BoardsControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :edit, :project_id => 1, :id => board.id assert_response :success - assert_template 'edit' assert_select 'select[name=?]', 'board[parent_id]' do assert_select 'option[value="2"][selected=selected]' @@ -204,7 +203,7 @@ class BoardsControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 put :update, :project_id => 1, :id => 2, :board => { :name => '', :description => 'Testing board update'} assert_response :success - assert_template 'edit' + assert_select_error /Name cannot be blank/ end def test_destroy diff --git a/test/functional/roles_controller_test.rb b/test/functional/roles_controller_test.rb index 42fb3658b..ba26e0c63 100644 --- a/test/functional/roles_controller_test.rb +++ b/test/functional/roles_controller_test.rb @@ -28,18 +28,17 @@ class RolesControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'index' - assert_not_nil assigns(:roles) - assert_equal Role.order('builtin, position').to_a, assigns(:roles) - - assert_select 'a[href="/roles/1/edit"]', :text => 'Manager' + assert_select 'table.roles tbody' do + assert_select 'tr', Role.count + assert_select 'a[href="/roles/1/edit"]', :text => 'Manager' + end end def test_new get :new assert_response :success - assert_template 'new' + assert_select 'input[name=?]', 'role[name]' end def test_new_with_copy @@ -47,10 +46,7 @@ class RolesControllerTest < Redmine::ControllerTest get :new, :params => {:copy => copy_from.id.to_s} assert_response :success - assert_template 'new' - - role = assigns(:role) - assert_equal copy_from.permissions, role.permissions + assert_select 'input[name=?]', 'role[name]' assert_select 'form' do # blank name @@ -76,8 +72,7 @@ class RolesControllerTest < Redmine::ControllerTest } } assert_response :success - assert_template 'new' - assert_select 'div#errorExplanation' + assert_select_error /Name cannot be blank/ end def test_create_without_workflow_copy @@ -113,15 +108,16 @@ class RolesControllerTest < Redmine::ControllerTest def test_edit get :edit, :params => {:id => 1} assert_response :success - assert_template 'edit' - assert_equal Role.find(1), assigns(:role) + + assert_select 'input[name=?][value=?]', 'role[name]', 'Manager' assert_select 'select[name=?]', 'role[issues_visibility]' end def test_edit_anonymous get :edit, :params => {:id => Role.anonymous.id} assert_response :success - assert_template 'edit' + + assert_select 'input[name=?]', 'role[name]', 0 assert_select 'select[name=?]', 'role[issues_visibility]', 0 end @@ -165,7 +161,7 @@ class RolesControllerTest < Redmine::ControllerTest def test_update_with_failure put :update, :params => {:id => 1, :role => {:name => ''}} assert_response :success - assert_template 'edit' + assert_select_error /Name cannot be blank/ end def test_destroy @@ -186,10 +182,6 @@ class RolesControllerTest < Redmine::ControllerTest def test_get_permissions get :permissions assert_response :success - assert_template 'permissions' - - assert_not_nil assigns(:roles) - assert_equal Role.order('builtin, position').to_a, assigns(:roles) assert_select 'input[name=?][type=checkbox][value=add_issues][checked=checked]', 'permissions[3][]' assert_select 'input[name=?][type=checkbox][value=delete_issues]:not([checked])', 'permissions[3][]' diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index ae4943d9d..54148a2f4 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -30,15 +30,16 @@ class SearchControllerTest < Redmine::ControllerTest User.current = nil end - def test_search_for_projects + def test_search_without_q_should_display_search_form get :index assert_response :success - assert_template 'index' + assert_select '#content input[name=q]' + end + def test_search_for_projects get :index, :params => {:q => "cook"} assert_response :success - assert_template 'index' - assert assigns(:results).include?(Project.find(1)) + assert_select '#search-results dt.project a', :text => /eCookbook/ end def test_search_on_archived_project_should_return_404 @@ -69,29 +70,32 @@ class SearchControllerTest < Redmine::ControllerTest get :index, :params => {:q => 'recipe subproject commit', :all_words => ''} end assert_response :success - assert_template 'index' - assert assigns(:results).include?(Issue.find(2)) - assert assigns(:results).include?(Issue.find(5)) - assert assigns(:results).include?(Changeset.find(101)) - assert_select 'dt.issue a', :text => /Add ingredients categories/ - assert_select 'dd', :text => /should be classified by categories/ + assert_select '#search-results' do + assert_select 'dt.issue a', :text => /Feature request #2/ + assert_select 'dt.issue a', :text => /Bug #5/ + assert_select 'dt.changeset a', :text => /Revision 1/ + + assert_select 'dt.issue a', :text => /Add ingredients categories/ + assert_select 'dd', :text => /should be classified by categories/ + end - assert assigns(:result_count_by_type).is_a?(Hash) - assert_equal 5, assigns(:result_count_by_type)['changesets'] - assert_select 'a', :text => 'Changesets (5)' + assert_select '#search-results-counts' do + assert_select 'a', :text => 'Changesets (5)' + end end def test_search_issues get :index, :params => {:q => 'issue', :issues => 1} assert_response :success - assert_template 'index' - assert_equal true, assigns(:all_words) - assert_equal false, assigns(:titles_only) - assert assigns(:results).include?(Issue.find(8)) - assert assigns(:results).include?(Issue.find(5)) - assert_select 'dt.issue.closed a', :text => /Closed/ + assert_select 'input[name=all_words][checked=checked]' + assert_select 'input[name=titles_only]:not([checked])' + + assert_select '#search-results' do + assert_select 'dt.issue a', :text => /Bug #5/ + assert_select 'dt.issue.closed a', :text => /Bug #8 \(Closed\)/ + end end def test_search_issues_should_search_notes @@ -99,7 +103,10 @@ class SearchControllerTest < Redmine::ControllerTest get :index, :params => {:q => 'searchkeyword', :issues => 1} assert_response :success - assert_include Issue.find(2), assigns(:results) + + assert_select '#search-results' do + assert_select 'dt.issue a', :text => /Feature request #2/ + end end def test_search_issues_with_multiple_matches_in_journals_should_return_issue_once @@ -108,8 +115,11 @@ class SearchControllerTest < Redmine::ControllerTest get :index, :params => {:q => 'searchkeyword', :issues => 1} assert_response :success - assert_include Issue.find(2), assigns(:results) - assert_equal 1, assigns(:results).size + + assert_select '#search-results' do + assert_select 'dt.issue a', :text => /Feature request #2/ + assert_select 'dt', 1 + end end def test_search_issues_should_search_private_notes_with_permission_only @@ -119,66 +129,74 @@ class SearchControllerTest < Redmine::ControllerTest Role.find(1).add_permission! :view_private_notes get :index, :params => {:q => 'searchkeyword', :issues => 1} assert_response :success - assert_include Issue.find(2), assigns(:results) + assert_select '#search-results' do + assert_select 'dt.issue a', :text => /Feature request #2/ + end Role.find(1).remove_permission! :view_private_notes get :index, :params => {:q => 'searchkeyword', :issues => 1} assert_response :success - assert_not_include Issue.find(2), assigns(:results) + assert_select '#search-results' do + assert_select 'dt', :text => /Feature request #2/, :count => 0 + end end def test_search_all_projects_with_scope_param get :index, :params => {:q => 'issue', :scope => 'all'} assert_response :success - assert_template 'index' - assert assigns(:results).present? + + assert_select '#search-results dt' end def test_search_my_projects @request.session[:user_id] = 2 get :index, :params => {:id => 1, :q => 'recipe subproject', :scope => 'my_projects', :all_words => ''} assert_response :success - assert_template 'index' - assert assigns(:results).include?(Issue.find(1)) - assert !assigns(:results).include?(Issue.find(5)) + + assert_select '#search-results' do + assert_select 'dt.issue', :text => /Bug #1/ + assert_select 'dt', :text => /Bug #5/, :count => 0 + end end def test_search_my_projects_without_memberships # anonymous user has no memberships get :index, :params => {:id => 1, :q => 'recipe subproject', :scope => 'my_projects', :all_words => ''} assert_response :success - assert_template 'index' - assert assigns(:results).empty? + + assert_select '#search-results' do + assert_select 'dt', 0 + end end def test_search_project_and_subprojects get :index, :params => {:id => 1, :q => 'recipe subproject', :scope => 'subprojects', :all_words => ''} assert_response :success - assert_template 'index' - assert assigns(:results).include?(Issue.find(1)) - assert assigns(:results).include?(Issue.find(5)) + + assert_select '#search-results' do + assert_select 'dt.issue', :text => /Bug #1/ + assert_select 'dt.issue', :text => /Bug #5/ + end end def test_search_without_searchable_custom_fields - CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}" + CustomField.update_all :searchable => false get :index, :params => {:id => 1} assert_response :success - assert_template 'index' - assert_not_nil assigns(:project) get :index, :params => {:id => 1, :q => "can"} assert_response :success - assert_template 'index' end def test_search_with_searchable_custom_fields get :index, :params => {:id => 1, :q => "stringforcustomfield"} assert_response :success - results = assigns(:results) - assert_not_nil results - assert_equal 1, results.size - assert results.include?(Issue.find(7)) + + assert_select '#search-results' do + assert_select 'dt.issue', :text => /#7/ + assert_select 'dt', 1 + end end def test_search_without_attachments @@ -186,9 +204,12 @@ class SearchControllerTest < Redmine::ControllerTest attachment = Attachment.generate! :container => Issue.find(1), :filename => 'search_attachments.patch' get :index, :params => {:id => 1, :q => 'search_attachments', :attachments => '0'} - results = assigns(:results) - assert_equal 1, results.size - assert_equal issue, results.first + assert_response :success + + assert_select '#search-results' do + assert_select 'dt.issue', :text => /##{issue.id}/ + assert_select 'dt', 1 + end end def test_search_attachments_only @@ -196,18 +217,26 @@ class SearchControllerTest < Redmine::ControllerTest attachment = Attachment.generate! :container => Issue.find(1), :filename => 'search_attachments.patch' get :index, :params => {:id => 1, :q => 'search_attachments', :attachments => 'only'} - results = assigns(:results) - assert_equal 1, results.size - assert_equal attachment.container, results.first + assert_response :success + + assert_select '#search-results' do + assert_select 'dt.issue', :text => / #1 / + assert_select 'dt', 1 + end end def test_search_with_attachments - Issue.generate! :subject => 'search_attachments' + issue = Issue.generate! :subject => 'search_attachments' Attachment.generate! :container => Issue.find(1), :filename => 'search_attachments.patch' get :index, :params => {:id => 1, :q => 'search_attachments', :attachments => '1'} - results = assigns(:results) - assert_equal 2, results.size + assert_response :success + + assert_select '#search-results' do + assert_select 'dt.issue', :text => / #1 / + assert_select 'dt.issue', :text => / ##{issue.id} / + assert_select 'dt', 2 + end end def test_search_open_issues @@ -215,78 +244,98 @@ class SearchControllerTest < Redmine::ControllerTest Issue.generate! :subject => 'search_open', :status_id => 5 get :index, :params => {:id => 1, :q => 'search_open', :open_issues => '1'} - results = assigns(:results) - assert_equal 1, results.size + assert_response :success + + assert_select '#search-results' do + assert_select 'dt', 1 + end end def test_search_all_words # 'all words' is on by default get :index, :params => {:id => 1, :q => 'recipe updating saving', :all_words => '1'} - assert_equal true, assigns(:all_words) - results = assigns(:results) - assert_not_nil results - assert_equal 1, results.size - assert results.include?(Issue.find(3)) + assert_response :success + + assert_select 'input[name=all_words][checked=checked]' + assert_select '#search-results' do + assert_select 'dt.issue', :text => / #3 / + assert_select 'dt', 1 + end end def test_search_one_of_the_words get :index, :params => {:id => 1, :q => 'recipe updating saving', :all_words => ''} - assert_equal false, assigns(:all_words) - results = assigns(:results) - assert_not_nil results - assert_equal 3, results.size - assert results.include?(Issue.find(3)) + assert_response :success + + assert_select 'input[name=all_words]:not([checked])' + assert_select '#search-results' do + assert_select 'dt.issue', :text => / #3 / + assert_select 'dt', 3 + end end def test_search_titles_only_without_result get :index, :params => {:id => 1, :q => 'recipe updating saving', :titles_only => '1'} - results = assigns(:results) - assert_not_nil results - assert_equal 0, results.size + assert_response :success + + assert_select 'input[name=titles_only][checked=checked]' + assert_select '#search-results' do + assert_select 'dt', 0 + end end def test_search_titles_only get :index, :params => {:id => 1, :q => 'recipe', :titles_only => '1'} - assert_equal true, assigns(:titles_only) - results = assigns(:results) - assert_not_nil results - assert_equal 2, results.size + assert_response :success + + assert_select 'input[name=titles_only][checked=checked]' + assert_select '#search-results' do + assert_select 'dt', 2 + end end def test_search_content Issue.where(:id => 1).update_all("description = 'This is a searchkeywordinthecontent'") get :index, :params => {:id => 1, :q => 'searchkeywordinthecontent', :titles_only => ''} - assert_equal false, assigns(:titles_only) - results = assigns(:results) - assert_not_nil results - assert_equal 1, results.size + assert_response :success + + assert_select 'input[name=titles_only]:not([checked])' + assert_select '#search-results' do + assert_select 'dt.issue', :text => / #1 / + assert_select 'dt', 1 + end end def test_search_with_pagination - issue = (0..24).map {Issue.generate! :subject => 'search_with_limited_results'}.reverse + issues = (0..24).map {Issue.generate! :subject => 'search_with_limited_results'}.reverse get :index, :params => {:q => 'search_with_limited_results'} assert_response :success - assert_equal issue[0..9], assigns(:results) + issues[0..9].each do |issue| + assert_select '#search-results dt.issue', :text => / ##{issue.id} / + end get :index, :params => {:q => 'search_with_limited_results', :page => 2} assert_response :success - assert_equal issue[10..19], assigns(:results) + issues[10..19].each do |issue| + assert_select '#search-results dt.issue', :text => / ##{issue.id} / + end get :index, :params => {:q => 'search_with_limited_results', :page => 3} assert_response :success - assert_equal issue[20..24], assigns(:results) + issues[20..24].each do |issue| + assert_select '#search-results dt.issue', :text => / ##{issue.id} / + end get :index, :params => {:q => 'search_with_limited_results', :page => 4} assert_response :success - assert_equal [], assigns(:results) + assert_select '#search-results dt', 0 end def test_search_with_invalid_project_id get :index, :params => {:id => 195, :q => 'recipe'} assert_response 404 - assert_nil assigns(:results) end def test_quick_jump_to_issue @@ -297,18 +346,25 @@ class SearchControllerTest < Redmine::ControllerTest # issue of a private project get :index, :params => {:q => "4"} assert_response :success - assert_template 'index' end def test_large_integer get :index, :params => {:q => '4615713488'} assert_response :success - assert_template 'index' end def test_tokens_with_quotes - get :index, :params => {:id => 1, :q => '"good bye" hello "bye bye"'} - assert_equal ["good bye", "hello", "bye bye"], assigns(:tokens) + issue1 = Issue.generate! :subject => 'say hello' + issue2 = Issue.generate! :subject => 'say good bye' + issue3 = Issue.generate! :subject => 'say goodbye' + + get :index, :params => {:q => '"good bye" hello "bye bye"', :all_words => ''} + assert_response :success + assert_select '#search-results' do + assert_select 'dt.issue a', :text => / ##{issue1.id} / + assert_select 'dt.issue a', :text => / ##{issue2.id} / + assert_select 'dt.issue a', :text => / ##{issue3.id} /, :count => 0 + end end def test_results_should_be_escaped_once diff --git a/test/functional/search_custom_fields_visibility_test.rb b/test/functional/search_custom_fields_visibility_test.rb index b4910d37f..86539f5af 100644 --- a/test/functional/search_custom_fields_visibility_test.rb +++ b/test/functional/search_custom_fields_visibility_test.rb @@ -68,9 +68,9 @@ class SearchCustomFieldsVisibilityTest < Redmine::ControllerTest assert_response :success # we should get a result only if the custom field is visible if fields.include?(field) - assert_equal 1, assigns(:results).size + assert_select '#search-results dt', 1 else - assert_equal 0, assigns(:results).size + assert_select '#search-results dt', 0 end end end diff --git a/test/functional/settings_controller_test.rb b/test/functional/settings_controller_test.rb index eeb719b30..9af3ebca7 100644 --- a/test/functional/settings_controller_test.rb +++ b/test/functional/settings_controller_test.rb @@ -34,13 +34,13 @@ class SettingsControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'edit' + + assert_select 'input[name=?][value=?]', 'settings[app_title]', Setting.app_title end def test_get_edit get :edit assert_response :success - assert_template 'edit' assert_select 'input[name=?][value=""]', 'settings[enabled_scm][]' end @@ -195,7 +195,7 @@ class SettingsControllerTest < Redmine::ControllerTest get :plugin, :params => {:id => 'foo'} assert_response :success - assert_template 'plugin' + assert_select 'form[action="/settings/plugin/foo"]' do assert_select 'input[name=?][value=?]', 'settings[sample_setting]', 'Plugin setting value' end diff --git a/test/functional/time_entry_reports_controller_test.rb b/test/functional/time_entry_reports_controller_test.rb index 499b5553b..fa9f9c861 100644 --- a/test/functional/time_entry_reports_controller_test.rb +++ b/test/functional/time_entry_reports_controller_test.rb @@ -37,14 +37,12 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_at_project_level get :report, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'report' assert_select 'form#query_form[action=?]', '/projects/ecookbook/time_entries/report' end def test_report_all_projects get :report assert_response :success - assert_template 'report' assert_select 'form#query_form[action=?]', '/time_entries/report' end @@ -60,42 +58,32 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_all_projects_one_criteria get :report, :params => {:columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criteria => ['project']} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "8.65", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '8.65' end def test_report_all_time get :report, :params => {:project_id => 1, :criteria => ['project', 'issue']} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "162.90", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '162.90' end def test_report_all_time_by_day get :report, :params => {:project_id => 1, :criteria => ['project', 'issue'], :columns => 'day'} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "162.90", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '162.90' assert_select 'th', :text => '2007-03-12' end def test_report_one_criteria get :report, :params => {:project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criteria => ['project']} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "8.65", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '8.65' end def test_report_two_criteria get :report, :params => {:project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criteria => ["user", "activity"]} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "162.90", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '162.90' end def test_report_custom_field_criteria_with_multiple_values_on_single_value_custom_field_should_not_fail @@ -123,9 +111,7 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_one_day get :report, :params => {:project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criteria => ["user", "activity"]} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "4.25", "%.2f" % assigns(:report).total_hours + assert_select 'tr.total td:last', :text => '4.25' end def test_report_by_week_should_use_commercial_year @@ -157,7 +143,6 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_should_propose_association_custom_fields get :report assert_response :success - assert_template 'report' assert_select 'select[name=?]', 'criteria[]' do assert_select 'option[value=cf_1]', {:text => 'Database'}, 'Issue custom field not found' @@ -169,10 +154,8 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_with_association_custom_fields get :report, :params => {:criteria => ['cf_1', 'cf_3', 'cf_7']} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal 3, assigns(:report).criteria.size - assert_equal "162.90", "%.2f" % assigns(:report).total_hours + + assert_select 'tr.total td:last', :text => '162.90' # Custom fields columns assert_select 'th', :text => 'Database' @@ -189,15 +172,14 @@ class TimeEntryReportsControllerTest < Redmine::ControllerTest def test_report_one_criteria_no_result get :report, :params => {:project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criteria => ['project']} assert_response :success - assert_template 'report' - assert_not_nil assigns(:report) - assert_equal "0.00", "%.2f" % assigns(:report).total_hours + + assert_select '.nodata' end def test_report_status_criterion get :report, :params => {:project_id => 1, :criteria => ['status']} assert_response :success - assert_template 'report' + assert_select 'th', :text => 'Status' assert_select 'td', :text => 'New' end diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb index 6a7219060..15a70404a 100644 --- a/test/functional/timelog_controller_test.rb +++ b/test/functional/timelog_controller_test.rb @@ -32,7 +32,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 3 get :new assert_response :success - assert_template 'new' + assert_select 'input[name=?][type=hidden]', 'project_id', 0 assert_select 'input[name=?][type=hidden]', 'issue_id', 0 assert_select 'select[name=?]', 'time_entry[project_id]' do @@ -45,7 +45,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 3 get :new, :params => {:project_id => 1} assert_response :success - assert_template 'new' + assert_select 'input[name=?][type=hidden]', 'project_id' assert_select 'input[name=?][type=hidden]', 'issue_id', 0 assert_select 'select[name=?]', 'time_entry[project_id]', 0 @@ -55,7 +55,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 3 get :new, :params => {:issue_id => 2} assert_response :success - assert_template 'new' + assert_select 'input[name=?][type=hidden]', 'project_id', 0 assert_select 'input[name=?][type=hidden]', 'issue_id' assert_select 'select[name=?]', 'time_entry[project_id]', 0 @@ -65,7 +65,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 3 get :new, :params => {:time_entry => {:project_id => '1'}} assert_response :success - assert_template 'new' + assert_select 'select[name=?]', 'time_entry[project_id]' do assert_select 'option[value="1"][selected=selected]' end @@ -106,7 +106,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :edit, :params => {:id => 2, :project_id => nil} assert_response :success - assert_template 'edit' + assert_select 'form[action=?]', '/time_entries/2' end @@ -118,7 +118,7 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 1 get :edit, :params => {:project_id => 1, :id => 1} assert_response :success - assert_template 'edit' + # Blank option since nothing is pre-selected assert_select 'option', :text => '--- Please select ---' end @@ -341,7 +341,7 @@ class TimelogControllerTest < Redmine::ControllerTest post :create, :params => {:time_entry => {:issue_id => ''}} assert_response :success - assert_template 'new' + assert_select_error /Project cannot be blank/ end def test_create_with_failure @@ -356,7 +356,6 @@ class TimelogControllerTest < Redmine::ControllerTest } } assert_response :success - assert_template 'new' end def test_create_without_project @@ -393,7 +392,7 @@ class TimelogControllerTest < Redmine::ControllerTest end assert_response :success - assert assigns(:time_entry).errors[:issue_id].present? + assert_select_error /Issue is invalid/ end def test_create_without_project_should_deny_without_permission @@ -484,8 +483,8 @@ class TimelogControllerTest < Redmine::ControllerTest :issue_id => '5' } } - assert_response 200 - assert_include "Issue is invalid", assigns(:time_entry).errors.full_messages + assert_response :success + assert_select_error /Issue is invalid/ end def test_get_bulk_edit @@ -493,7 +492,6 @@ class TimelogControllerTest < Redmine::ControllerTest get :bulk_edit, :params => {:ids => [1, 2]} assert_response :success - assert_template 'bulk_edit' assert_select 'ul#bulk-selection' do assert_select 'li', 2 @@ -517,7 +515,6 @@ class TimelogControllerTest < Redmine::ControllerTest get :bulk_edit, :params => {:ids => [1, 2, 6]} assert_response :success - assert_template 'bulk_edit' end def test_bulk_edit_with_edit_own_time_entries_permission @@ -664,26 +661,28 @@ class TimelogControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :index assert_response :success - assert_template 'index' + assert_select 'a[href=?]', '/time_entries/new', :text => /Log time/ end def test_index_my_spent_time @request.session[:user_id] = 2 - get :index, :params => {:user_id => 'me'} + get :index, :params => {:user_id => 'me', :c => ['user']} assert_response :success - assert_template 'index' - assert assigns(:entries).all? {|entry| entry.user_id == 2} + + users = css_select('table.time-entries tbody td.user').map(&:text).uniq + assert_equal ["John Smith"], users end def test_index_at_project_level - get :index, :params => {:project_id => 'ecookbook'} + get :index, :params => {:project_id => 'ecookbook', :c => ['project']} assert_response :success - assert_template 'index' - assert_not_nil assigns(:entries) - assert_equal 4, assigns(:entries).size + + assert_select 'tr.time-entry', 4 + # project and subproject - assert_equal [1, 3], assigns(:entries).collect(&:project_id).uniq.sort + projects = css_select('table.time-entries tbody td.project').map(&:text).uniq.sort + assert_equal ["eCookbook", "eCookbook Subproject 1"], projects assert_select '.total-for-hours', :text => 'Hours: 162.90' assert_select 'form#query_form[action=?]', '/projects/ecookbook/time_entries' @@ -693,10 +692,11 @@ class TimelogControllerTest < Redmine::ControllerTest entry = TimeEntry.generate!(:project => Project.find(3)) with_settings :display_subprojects_issues => '0' do - get :index, :params => {:project_id => 'ecookbook'} + get :index, :params => {:project_id => 'ecookbook', :c => ['project']} assert_response :success - assert_template 'index' - assert_not_include entry, assigns(:entries) + + projects = css_select('table.time-entries tbody td.project').map(&:text).uniq.sort + assert_equal ["eCookbook"], projects end end @@ -704,10 +704,11 @@ class TimelogControllerTest < Redmine::ControllerTest entry = TimeEntry.generate!(:project => Project.find(3)) with_settings :display_subprojects_issues => '0' do - get :index, :params => {:project_id => 'ecookbook', :subproject_id => 3} + get :index, :params => {:project_id => 'ecookbook', :c => ['project'], :subproject_id => 3} assert_response :success - assert_template 'index' - assert_include entry, assigns(:entries) + + projects = css_select('table.time-entries tbody td.project').map(&:text).uniq.sort + assert_equal ["eCookbook", "eCookbook Subproject 1"], projects end end @@ -740,10 +741,8 @@ class TimelogControllerTest < Redmine::ControllerTest :v => {'spent_on' => ['2007-03-20', '2007-04-30']} } assert_response :success - assert_template 'index' - assert_not_nil assigns(:entries) - assert_equal 3, assigns(:entries).size + assert_select 'tr.time-entry', 3 assert_select '.total-for-hours', :text => 'Hours: 12.90' assert_select 'form#query_form[action=?]', '/projects/ecookbook/time_entries' end @@ -755,10 +754,8 @@ class TimelogControllerTest < Redmine::ControllerTest :to => '2007-04-30' } assert_response :success - assert_template 'index' - assert_not_nil assigns(:entries) - assert_equal 3, assigns(:entries).size + assert_select 'tr.time-entry', 3 assert_select '.total-for-hours', :text => 'Hours: 12.90' assert_select 'form#query_form[action=?]', '/projects/ecookbook/time_entries' end @@ -787,7 +784,7 @@ class TimelogControllerTest < Redmine::ControllerTest :v => {'spent_on' => ['2012-06-15', '2012-06-16']} } assert_response :success - assert_equal [t2, t1, t3], assigns(:entries) + assert_equal [t2, t1, t3].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')} get :index, :params => { :project_id => 1, @@ -797,7 +794,7 @@ class TimelogControllerTest < Redmine::ControllerTest :sort => 'spent_on' } assert_response :success - assert_equal [t3, t1, t2], assigns(:entries) + assert_equal [t3, t1, t2].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')} end def test_index_with_filter_on_issue_custom_field @@ -810,7 +807,7 @@ class TimelogControllerTest < Redmine::ControllerTest :v => {'issue.cf_2' => ['filter_on_issue_custom_field']} } assert_response :success - assert_equal [entry], assigns(:entries) + assert_equal [entry].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')} end def test_index_with_issue_custom_field_column @@ -821,7 +818,6 @@ class TimelogControllerTest < Redmine::ControllerTest :c => %w(project spent_on issue comments hours issue.cf_2) } assert_response :success - assert_include :'issue.cf_2', assigns(:query).column_names assert_select 'td.issue_cf_2', :text => 'filter_on_issue_custom_field' end @@ -834,7 +830,6 @@ class TimelogControllerTest < Redmine::ControllerTest :c => ["hours", field_name] } assert_response :success - assert_include field_name.to_sym, assigns(:query).column_names assert_select "td.#{field_name}", :text => 'CF Value' end @@ -850,13 +845,12 @@ class TimelogControllerTest < Redmine::ControllerTest :sort => field_name } assert_response :success - assert_include field_name.to_sym, assigns(:query).column_names assert_select "th a.sort", :text => 'String Field' # Make sure that values are properly sorted - values = assigns(:entries).map {|e| e.custom_field_value(field)}.compact - assert_equal 3, values.size + values = css_select("td.#{field_name}").map(&:text).reject(&:blank?) assert_equal values.sort, values + assert_equal 3, values.size end def test_index_with_query @@ -874,8 +868,7 @@ class TimelogControllerTest < Redmine::ControllerTest get :index, :params => {:project_id => 1, :format => 'atom'} assert_response :success assert_equal 'application/atom+xml', @response.content_type - assert_not_nil assigns(:items) - assert assigns(:items).first.is_a?(TimeEntry) + assert_select 'entry > title', :text => /7\.65 hours/ end def test_index_at_project_level_should_include_csv_export_dialog diff --git a/test/functional/timelog_custom_fields_visibility_test.rb b/test/functional/timelog_custom_fields_visibility_test.rb index 923dd462e..917ae5e71 100644 --- a/test/functional/timelog_custom_fields_visibility_test.rb +++ b/test/functional/timelog_custom_fields_visibility_test.rb @@ -122,7 +122,9 @@ class TimelogCustomFieldsVisibilityTest < Redmine::ControllerTest assert_select 'td', :text => 'ValueB', :count => 0 assert_select 'td', {:text => 'ValueC'}, "ValueC not found in:\n#{response.body}" - get :index, :params => {:set_filter => '1', "issue.cf_#{@field2.id}" => '*'} - assert_equal %w(ValueA ValueC), assigns(:entries).map{|i| i.issue.custom_field_value(@field2)}.sort + get :index, :params => {:set_filter => '1', "issue.cf_#{@field2.id}" => '*', :c => ["issue.cf_#{@field2.id}"]} + assert_select 'td', :text => "ValueA" + assert_select 'td', :text => "ValueC" + assert_select 'td', :text => "ValueB", :count => 0 end end diff --git a/test/functional/trackers_controller_test.rb b/test/functional/trackers_controller_test.rb index d7342b495..80ee10a69 100644 --- a/test/functional/trackers_controller_test.rb +++ b/test/functional/trackers_controller_test.rb @@ -28,7 +28,7 @@ class TrackersControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'index' + assert_select 'table.trackers' end def test_index_by_anonymous_should_redirect_to_login_form @@ -46,7 +46,7 @@ class TrackersControllerTest < Redmine::ControllerTest def test_new get :new assert_response :success - assert_template 'new' + assert_select 'input[name=?]', 'tracker[name]' end def test_create @@ -112,7 +112,6 @@ class TrackersControllerTest < Redmine::ControllerTest } end assert_response :success - assert_template 'new' assert_select_error /name cannot be blank/i end @@ -121,7 +120,6 @@ class TrackersControllerTest < Redmine::ControllerTest get :edit, :params => {:id => 1} assert_response :success - assert_template 'edit' assert_select 'input[name=?][value="1"][checked=checked]', 'tracker[project_ids][]' assert_select 'input[name=?][value="2"]:not([checked])', 'tracker[project_ids][]' @@ -136,7 +134,6 @@ class TrackersControllerTest < Redmine::ControllerTest get :edit, :params => {:id => 1} assert_response :success - assert_template 'edit' assert_select 'input[name=?][value=assigned_to_id][checked=checked]', 'tracker[core_fields][]' assert_select 'input[name=?][value=fixed_version_id][checked=checked]', 'tracker[core_fields][]' @@ -186,7 +183,7 @@ class TrackersControllerTest < Redmine::ControllerTest def test_update_with_failure put :update, :params => {:id => 1, :tracker => { :name => '' }} assert_response :success - assert_template 'edit' + assert_select_error /name cannot be blank/i end @@ -216,7 +213,6 @@ class TrackersControllerTest < Redmine::ControllerTest def test_get_fields get :fields assert_response :success - assert_template 'fields' assert_select 'form' do assert_select 'input[type=checkbox][name=?][value=assigned_to_id]', 'trackers[1][core_fields][]' diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index c5bfb6dc4..78a8b6c39 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -35,37 +35,30 @@ class UsersControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'index' - assert_not_nil assigns(:users) - # active users only - assert_nil assigns(:users).detect {|u| !u.active?} + assert_select 'table.users' + assert_select 'tr.user.active' + assert_select 'tr.user.locked', 0 end def test_index_with_status_filter get :index, :params => {:status => 3} assert_response :success - assert_template 'index' - assert_not_nil assigns(:users) - assert_equal [3], assigns(:users).map(&:status).uniq + assert_select 'tr.user.active', 0 + assert_select 'tr.user.locked' end def test_index_with_name_filter get :index, :params => {:name => 'john'} assert_response :success - assert_template 'index' - users = assigns(:users) - assert_not_nil users - assert_equal 1, users.size - assert_equal 'John', users.first.firstname + assert_select 'tr.user td.username', :text => 'jsmith' + assert_select 'tr.user', 1 end def test_index_with_group_filter get :index, :params => {:group_id => '10'} assert_response :success - assert_template 'index' - users = assigns(:users) - assert users.any? - assert_equal([], (users - Group.find(10).users)) + + assert_select 'tr.user', Group.find(10).users.count assert_select 'select[name=group_id]' do assert_select 'option[value="10"][selected=selected]' end @@ -75,8 +68,14 @@ class UsersControllerTest < Redmine::ControllerTest @request.session[:user_id] = nil get :show, :params => {:id => 2} assert_response :success - assert_template 'show' - assert_not_nil assigns(:user) + assert_select 'h2', :text => /John Smith/ + end + + def test_show_should_display_visible_custom_fields + @request.session[:user_id] = nil + UserCustomField.find_by_name('Phone number').update_attribute :visible, true + get :show, :params => {:id => 2} + assert_response :success assert_select 'li', :text => /Phone number/ end @@ -86,8 +85,6 @@ class UsersControllerTest < Redmine::ControllerTest UserCustomField.find_by_name('Phone number').update_attribute :visible, false get :show, :params => {:id => 2} assert_response :success - assert_template 'show' - assert_not_nil assigns(:user) assert_select 'li', :text => /Phone number/, :count => 0 end @@ -113,7 +110,7 @@ class UsersControllerTest < Redmine::ControllerTest @request.session[:user_id] = 1 get :show, :params => {:id => 5} assert_response 200 - assert_not_nil assigns(:user) + assert_select 'h2', :text => /Dave2 Lopper2/ end def test_show_user_who_is_not_visible_should_return_404 @@ -129,10 +126,9 @@ class UsersControllerTest < Redmine::ControllerTest @request.session[:user_id] = 1 get :show, :params => {:id => 2} assert_response :success - memberships = assigns(:memberships) - assert_not_nil memberships - project_ids = memberships.map(&:project_id) - assert project_ids.include?(2) #private project admin can see + + # membership of private project admin can see + assert_select 'li a', :text => "OnlineStore" end def test_show_current_should_require_authentication @@ -145,15 +141,13 @@ class UsersControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:id => 'current'} assert_response :success - assert_template 'show' - assert_equal User.find(2), assigns(:user) + assert_select 'h2', :text => /John Smith/ end def test_new get :new assert_response :success - assert_template :new - assert assigns(:user) + assert_select 'input[name=?]', 'user[login]' end def test_create @@ -266,7 +260,7 @@ class UsersControllerTest < Redmine::ControllerTest post :create, :params => {:user => {}} end assert_response :success - assert_template 'new' + assert_select_error /Email cannot be blank/ end def test_create_with_failure_sould_preserve_preference @@ -283,7 +277,6 @@ class UsersControllerTest < Redmine::ControllerTest } end assert_response :success - assert_template 'new' assert_select 'select#pref_time_zone option[selected=selected]', :text => /Paris/ assert_select 'input#pref_no_self_notified[value="1"][checked=checked]' @@ -336,8 +329,7 @@ class UsersControllerTest < Redmine::ControllerTest def test_edit get :edit, :params => {:id => 2} assert_response :success - assert_template 'edit' - assert_equal User.find(2), assigns(:user) + assert_select 'input[name=?][value=?]', 'user[login]', 'jsmith' end def test_edit_registered_user @@ -371,7 +363,7 @@ class UsersControllerTest < Redmine::ControllerTest } end assert_response :success - assert_template 'edit' + assert_select_error /First name cannot be blank/ end def test_update_with_group_ids_should_assign_groups @@ -476,7 +468,6 @@ class UsersControllerTest < Redmine::ControllerTest def test_update_notified_project get :edit, :params => {:id => 2} assert_response :success - assert_template 'edit' u = User.find(2) assert_equal [1, 2, 5], u.projects.collect{|p| p.id}.sort assert_equal [1, 2, 5], u.notified_projects_ids.sort diff --git a/test/functional/versions_controller_test.rb b/test/functional/versions_controller_test.rb index 6657aebb6..48cf6e641 100644 --- a/test/functional/versions_controller_test.rb +++ b/test/functional/versions_controller_test.rb @@ -29,12 +29,12 @@ class VersionsControllerTest < Redmine::ControllerTest def test_index get :index, :params => {:project_id => 1} assert_response :success - assert_template 'index' - assert_not_nil assigns(:versions) + # Version with no date set appears - assert assigns(:versions).include?(Version.find(3)) + assert_select 'h3', :text => Version.find(3).name # Completed version doesn't appear - assert !assigns(:versions).include?(Version.find(1)) + assert_select 'h3', :text => Version.find(1).name, :count => 0 + # Context menu on issues assert_select "script", :text => Regexp.new(Regexp.escape("contextMenuInit('/issues/context_menu')")) assert_select "div#sidebar" do @@ -48,31 +48,33 @@ class VersionsControllerTest < Redmine::ControllerTest def test_index_with_completed_versions get :index, :params => {:project_id => 1, :completed => 1} assert_response :success - assert_template 'index' - assert_not_nil assigns(:versions) + # Version with no date set appears - assert assigns(:versions).include?(Version.find(3)) + assert_select 'h3', :text => Version.find(3).name # Completed version appears - assert assigns(:versions).include?(Version.find(1)) + assert_select 'h3', :text => Version.find(1).name end def test_index_with_tracker_ids + (1..3).each do |tracker_id| + Issue.generate! :project_id => 1, :fixed_version_id => 3, :tracker_id => tracker_id + end get :index, :params => {:project_id => 1, :tracker_ids => [1, 3]} assert_response :success - assert_template 'index' - assert_not_nil assigns(:issues_by_version) - assert_nil assigns(:issues_by_version).values.flatten.detect {|issue| issue.tracker_id == 2} + assert_select 'a.issue.tracker-1' + assert_select 'a.issue.tracker-2', 0 + assert_select 'a.issue.tracker-3' end def test_index_showing_subprojects_versions @subproject_version = Version.create!(:project => Project.find(3), :name => "Subproject version") get :index, :params => {:project_id => 1, :with_subprojects => 1} assert_response :success - assert_template 'index' - assert_not_nil assigns(:versions) - assert assigns(:versions).include?(Version.find(4)), "Shared version not found" - assert assigns(:versions).include?(@subproject_version), "Subproject version not found" + # Shared version + assert_select 'h3', :text => Version.find(4).name + # Subproject version + assert_select 'h3', :text => /Subproject version/ end def test_index_should_prepend_shared_versions @@ -92,8 +94,6 @@ class VersionsControllerTest < Redmine::ControllerTest def test_show get :show, :params => {:id => 2} assert_response :success - assert_template 'show' - assert_not_nil assigns(:version) assert_select 'h2', :text => /1.0/ end @@ -127,14 +127,13 @@ class VersionsControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :new, :params => {:project_id => '1'} assert_response :success - assert_template 'new' + assert_select 'input[name=?]', 'version[name]' end def test_new_from_issue_form @request.session[:user_id] = 2 xhr :get, :new, :params => {:project_id => '1'} assert_response :success - assert_template 'new' assert_equal 'text/javascript', response.content_type end @@ -159,7 +158,6 @@ class VersionsControllerTest < Redmine::ControllerTest assert_equal 1, version.project_id assert_response :success - assert_template 'create' assert_equal 'text/javascript', response.content_type assert_include 'test_add_version_from_issue_form', response.body end @@ -170,7 +168,6 @@ class VersionsControllerTest < Redmine::ControllerTest xhr :post, :create, :params => {:project_id => '1', :version => {:name => ''}} end assert_response :success - assert_template 'new' assert_equal 'text/javascript', response.content_type end @@ -178,7 +175,7 @@ class VersionsControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :edit, :params => {:id => 2} assert_response :success - assert_template 'edit' + assert_select 'input[name=?][value=?]', 'version[name]', Version.find(2).name end def test_close_completed @@ -216,7 +213,7 @@ class VersionsControllerTest < Redmine::ControllerTest } } assert_response :success - assert_template 'edit' + assert_select_error /Name cannot be blank/ end def test_destroy @@ -243,15 +240,11 @@ class VersionsControllerTest < Redmine::ControllerTest def test_issue_status_by xhr :get, :status_by, :params => {:id => 2} assert_response :success - assert_template 'status_by' - assert_template '_issue_counts' end def test_issue_status_by_status xhr :get, :status_by, :params => {:id => 2, :status_by => 'status'} assert_response :success - assert_template 'status_by' - assert_template '_issue_counts' assert_include 'Assigned', response.body assert_include 'Closed', response.body end diff --git a/test/functional/watchers_controller_test.rb b/test/functional/watchers_controller_test.rb index 1b7b7bbeb..422fc6cda 100644 --- a/test/functional/watchers_controller_test.rb +++ b/test/functional/watchers_controller_test.rb @@ -144,7 +144,6 @@ class WatchersControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 xhr :get, :new, :params => {:project_id => 1} assert_response :success - assert_equal Project.find(1), assigns(:project) assert_match /ajax-modal/, response.body end @@ -152,7 +151,6 @@ class WatchersControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 xhr :get, :new, :params => {:project_id => 'ecookbook'} assert_response :success - assert_equal Project.find(1), assigns(:project) assert_match /ajax-modal/, response.body end @@ -266,16 +264,16 @@ class WatchersControllerTest < Redmine::ControllerTest def test_autocomplete_for_user_should_return_visible_users Role.update_all :users_visibility => 'members_of_visible_projects' - hidden = User.generate!(:lastname => 'autocomplete') - visible = User.generate!(:lastname => 'autocomplete') + hidden = User.generate!(:lastname => 'autocomplete_hidden') + visible = User.generate!(:lastname => 'autocomplete_visible') User.add_to_project(visible, Project.find(1)) @request.session[:user_id] = 2 xhr :get, :autocomplete_for_user, :params => {:q => 'autocomp', :project_id => 'ecookbook'} assert_response :success - assert_include visible, assigns(:users) - assert_not_include hidden, assigns(:users) + assert_include visible.name, response.body + assert_not_include hidden.name, response.body end def test_append diff --git a/test/functional/welcome_controller_test.rb b/test/functional/welcome_controller_test.rb index e75d8a4af..88b160bc9 100644 --- a/test/functional/welcome_controller_test.rb +++ b/test/functional/welcome_controller_test.rb @@ -28,33 +28,32 @@ class WelcomeControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'index' - assert_not_nil assigns(:news) + assert_select 'h3', :text => 'Latest news' end def test_browser_language @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' get :index - assert_equal :fr, @controller.current_language + assert_select 'html[lang=fr]' end def test_browser_language_alternate @request.env['HTTP_ACCEPT_LANGUAGE'] = 'zh-TW' get :index - assert_equal :"zh-TW", @controller.current_language + assert_select 'html[lang=zh-TW]' end def test_browser_language_alternate_not_valid @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr-CA' get :index - assert_equal :fr, @controller.current_language + assert_select 'html[lang=fr]' end def test_browser_language_should_be_ignored_with_force_default_language_for_anonymous @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' with_settings :force_default_language_for_anonymous => '1' do get :index - assert_equal :en, @controller.current_language + assert_select 'html[lang=en]' end end @@ -64,7 +63,7 @@ class WelcomeControllerTest < Redmine::ControllerTest @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' with_settings :default_language => 'fi' do get :index - assert_equal :it, @controller.current_language + assert_select 'html[lang=it]' end end @@ -74,7 +73,7 @@ class WelcomeControllerTest < Redmine::ControllerTest @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' with_settings :force_default_language_for_loggedin => '1', :default_language => 'fi' do get :index - assert_equal :fi, @controller.current_language + assert_select 'html[lang=fi]' end end diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 0cb395e25..ea200b60d 100644 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -30,9 +30,8 @@ class WikiControllerTest < Redmine::ControllerTest def test_show_start_page get :show, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'show' - assert_select 'h1', :text => /CookBook documentation/ + assert_select 'h1', :text => /CookBook documentation/ # child_pages macro assert_select 'ul.pages-hierarchy>li>a[href=?]', '/projects/ecookbook/wiki/Page_with_an_inline_image', :text => 'Page with an inline image' @@ -48,7 +47,7 @@ class WikiControllerTest < Redmine::ControllerTest def test_show_page_with_name get :show, :params => {:project_id => 1, :id => 'Another_page'} assert_response :success - assert_template 'show' + assert_select 'h1', :text => /Another page/ # Included page with an inline image assert_select 'p', :text => /This is an inline image/ @@ -60,7 +59,6 @@ class WikiControllerTest < Redmine::ControllerTest get :show, :params => {:project_id => 'ecookbook', :id => 'CookBook_documentation', :version => '2'} end assert_response :success - assert_template 'show' assert_select 'a[href=?]', '/projects/ecookbook/wiki/CookBook_documentation/1', :text => /Previous/ assert_select 'a[href=?]', '/projects/ecookbook/wiki/CookBook_documentation/2/diff', :text => /diff/ @@ -76,9 +74,8 @@ class WikiControllerTest < Redmine::ControllerTest content.save! get :show, :params => {:project_id => 'ecookbook', :id => page.title, :version => '1'} - assert_kind_of WikiContent::Version, assigns(:content) assert_response :success - assert_template 'show' + assert_select 'a[href=?]', '/projects/ecookbook/wiki/Page_with_an_inline_image', :text => /Current version/ end def test_show_old_version_without_permission_should_be_denied @@ -93,7 +90,6 @@ class WikiControllerTest < Redmine::ControllerTest get :show, :params => {:project_id => 'ecookbook', :id => 'CookBook_documentation', :version => '1'} end assert_response :success - assert_template 'show' assert_select 'a', :text => /Previous/, :count => 0 assert_select 'a', :text => /diff/, :count => 0 @@ -150,7 +146,7 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :id => 'Unexistent page'} assert_response :success - assert_template 'edit' + assert_select 'textarea[name=?]', 'content[text]' end def test_show_specific_version_of_an_unexistent_page_without_edit_right @@ -162,7 +158,6 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :id => 'Unexistent page', :parent => 'Another_page'} assert_response :success - assert_template 'edit' assert_select 'select[name=?] option[value="2"][selected=selected]', 'wiki_page[parent_id]' end @@ -179,7 +174,6 @@ class WikiControllerTest < Redmine::ControllerTest get :show, :params => {:project_id => 1, :id => 'NoContent'} assert_response :success - assert_template 'edit' assert_select 'textarea[name=?]', 'content[text]' end @@ -188,7 +182,7 @@ class WikiControllerTest < Redmine::ControllerTest get :new, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'new' + assert_select 'input[name=?]', 'title' end def test_get_new_xhr @@ -196,7 +190,7 @@ class WikiControllerTest < Redmine::ControllerTest xhr :get, :new, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'new' + assert_include 'Unallowed characters', response.body end def test_post_new_with_valid_title_should_redirect_to_edit @@ -219,7 +213,6 @@ class WikiControllerTest < Redmine::ControllerTest post :new, :params => {:project_id => 'ecookbook', :title => 'Another page'} assert_response :success - assert_template 'new' assert_select_error 'Title has already been taken' end @@ -228,7 +221,6 @@ class WikiControllerTest < Redmine::ControllerTest xhr :post, :new, :params => {:project_id => 'ecookbook', :title => 'Another page'} assert_response :success - assert_template 'new' assert_include 'Title has already been taken', response.body end @@ -298,7 +290,6 @@ class WikiControllerTest < Redmine::ControllerTest get :edit, :params => {:project_id => 'ecookbook', :id => 'Another_page'} assert_response :success - assert_template 'edit' assert_select 'textarea[name=?]', 'content[text]', :text => WikiPage.find_by_title('Another_page').content.text @@ -309,7 +300,6 @@ class WikiControllerTest < Redmine::ControllerTest get :edit, :params => {:project_id => 'ecookbook', :id => 'Page_with_sections', :section => 2} assert_response :success - assert_template 'edit' page = WikiPage.find_by_title('Page_with_sections') section, hash = Redmine::WikiFormatting::Textile::Formatter.new(page.content.text).get_section(2) @@ -398,7 +388,6 @@ class WikiControllerTest < Redmine::ControllerTest end end assert_response :success - assert_template 'edit' assert_select_error /Comment is too long/ assert_select 'textarea#content_text', :text => "edited" @@ -475,7 +464,6 @@ class WikiControllerTest < Redmine::ControllerTest end end assert_response :success - assert_template 'edit' assert_select 'div.error', :text => /Data has been updated by another user/ assert_select 'textarea[name=?]', 'content[text]', :text => /Text should not be lost/ assert_select 'input[name=?][value=?]', 'content[comments]', 'My comments' @@ -577,7 +565,6 @@ class WikiControllerTest < Redmine::ControllerTest end end assert_response :success - assert_template 'edit' assert_select 'div.error', :text => /Data has been updated by another user/ assert_select 'textarea[name=?]', 'content[text]', :text => /Text should not be lost/ assert_select 'input[name=?][value=?]', 'content[comments]', 'My comments' @@ -595,7 +582,6 @@ class WikiControllerTest < Redmine::ControllerTest } } assert_response :success - assert_template 'common/_preview' assert_select 'strong', :text => /previewed text/ end @@ -611,7 +597,6 @@ class WikiControllerTest < Redmine::ControllerTest } } assert_response :success - assert_template 'common/_preview' assert_select 'h1', :text => /New page/ end @@ -619,9 +604,10 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :history, :params => {:project_id => 'ecookbook', :id => 'CookBook_documentation'} assert_response :success - assert_template 'history' - assert_not_nil assigns(:versions) - assert_equal 3, assigns(:versions).size + + assert_select 'table.wiki-page-versions tbody' do + assert_select 'tr', 3 + end assert_select "input[type=submit][name=commit]" assert_select 'td' do @@ -635,9 +621,11 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :history, :params => {:project_id => 'ecookbook', :id => 'Another_page'} assert_response :success - assert_template 'history' - assert_not_nil assigns(:versions) - assert_equal 1, assigns(:versions).size + + assert_select 'table.wiki-page-versions tbody' do + assert_select 'tr', 1 + end + assert_select "input[type=submit][name=commit]", false assert_select 'td' do assert_select 'a[href=?]', '/projects/ecookbook/wiki/Another_page/1', :text => '1' @@ -661,7 +649,6 @@ class WikiControllerTest < Redmine::ControllerTest :version_from => (content.version - 1) } assert_response :success - assert_template 'diff' assert_select 'span.diff_out', :text => 'Line removed' assert_select 'span.diff_in', :text => 'Line added' end @@ -689,13 +676,19 @@ class WikiControllerTest < Redmine::ControllerTest :version => 2 } assert_response :success - assert_template 'annotate' # Line 1 assert_select 'table.annotate tr:nth-child(1)' do assert_select 'th.line-num', :text => '1' + assert_select 'td.author', :text => /Redmine Admin/ + assert_select 'td', :text => /h1\. CookBook documentation v2/ + end + + # Line 4 + assert_select 'table.annotate tr:nth-child(4)' do + assert_select 'th.line-num', :text => '4' assert_select 'td.author', :text => /John Smith/ - assert_select 'td', :text => /h1\. CookBook documentation/ + assert_select 'td', :text => /Line from v1/ end # Line 5 @@ -718,7 +711,6 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :rename, :params => {:project_id => 1, :id => 'Another_page'} assert_response :success - assert_template 'rename' assert_select 'select[name=?]', 'wiki_page[parent_id]' do assert_select 'option[value=""]', :text => '' @@ -730,7 +722,6 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :rename, :params => {:project_id => 1, :id => 'Child_1'} assert_response :success - assert_template 'rename' assert_select 'select[name=?]', 'wiki_page[parent_id]' do assert_select 'option[value=""]', :text => '' @@ -808,7 +799,6 @@ class WikiControllerTest < Redmine::ControllerTest get :rename, :params => {:project_id => 1, :id => 'Another_page'} assert_response :success - assert_template 'rename' assert_select 'select[name=?]', 'wiki_page[wiki_id]' do assert_select 'option', 2 @@ -849,7 +839,6 @@ class WikiControllerTest < Redmine::ControllerTest delete :destroy, :params => {:project_id => 1, :id => 'Another_page'} end assert_response :success - assert_template 'destroy' assert_select 'form' do assert_select 'input[name=todo][value=nullify]' assert_select 'input[name=todo][value=destroy]' @@ -913,11 +902,10 @@ class WikiControllerTest < Redmine::ControllerTest def test_index get :index, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'index' - pages = assigns(:pages) - assert_not_nil pages - assert_equal Project.find(1).wiki.pages.size, pages.size - assert_equal pages.first.content.updated_on, pages.first.updated_on + + assert_select 'ul.pages-hierarchy' do + assert_select 'li', Project.find(1).wiki.pages.count + end assert_select 'ul.pages-hierarchy' do assert_select 'li' do @@ -938,8 +926,6 @@ class WikiControllerTest < Redmine::ControllerTest get :export, :params => {:project_id => 'ecookbook'} assert_response :success - assert_not_nil assigns(:pages) - assert assigns(:pages).any? assert_equal "text/html", @response.content_type assert_select "a[name=?]", "CookBook_documentation" @@ -952,8 +938,6 @@ class WikiControllerTest < Redmine::ControllerTest get :export, :params => {:project_id => 'ecookbook', :format => 'pdf'} assert_response :success - assert_not_nil assigns(:pages) - assert assigns(:pages).any? assert_equal 'application/pdf', @response.content_type assert_equal 'attachment; filename="ecookbook.pdf"', @response.headers['Content-Disposition'] assert @response.body.starts_with?('%PDF') @@ -971,9 +955,6 @@ class WikiControllerTest < Redmine::ControllerTest get :date_index, :params => {:project_id => 'ecookbook'} assert_response :success - assert_template 'date_index' - assert_not_nil assigns(:pages) - assert_not_nil assigns(:pages_by_date) assert_select 'a[href=?]', '/projects/ecookbook/activity.atom?show_wiki_edits=1' end @@ -1005,7 +986,7 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1} assert_response :success - assert_template 'show' + assert_select 'a[href=?]', '/projects/1/wiki/CookBook_documentation/edit' end @@ -1013,7 +994,7 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 4 get :show, :params => {:project_id => 1} assert_response :success - assert_template 'show' + assert_select 'a[href=?]', '/projects/1/wiki/CookBook_documentation/edit', 0 end @@ -1021,7 +1002,7 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :format => 'pdf'} assert_response :success - assert_not_nil assigns(:page) + assert_equal 'application/pdf', @response.content_type assert_equal 'attachment; filename="CookBook_documentation.pdf"', @response.headers['Content-Disposition'] @@ -1031,7 +1012,7 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :format => 'html'} assert_response :success - assert_not_nil assigns(:page) + assert_equal 'text/html', @response.content_type assert_equal 'attachment; filename="CookBook_documentation.html"', @response.headers['Content-Disposition'] @@ -1042,19 +1023,18 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :format => 'html', :version => 2} assert_response :success - assert_not_nil assigns(:content) - assert_equal 2, assigns(:content).version + assert_equal 'text/html', @response.content_type assert_equal 'attachment; filename="CookBook_documentation.html"', @response.headers['Content-Disposition'] - assert_select 'h1', :text => /CookBook documentation/ + assert_select 'h1', :text => /CookBook documentation v2/ end def test_show_txt @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :format => 'txt'} assert_response :success - assert_not_nil assigns(:page) + assert_equal 'text/plain', @response.content_type assert_equal 'attachment; filename="CookBook_documentation.txt"', @response.headers['Content-Disposition'] @@ -1065,12 +1045,11 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :show, :params => {:project_id => 1, :format => 'txt', :version => 2} assert_response :success - assert_not_nil assigns(:content) - assert_equal 2, assigns(:content).version + assert_equal 'text/plain', @response.content_type assert_equal 'attachment; filename="CookBook_documentation.txt"', @response.headers['Content-Disposition'] - assert_include 'h1. CookBook documentation', @response.body + assert_include 'h1. CookBook documentation v2', @response.body end def test_edit_unprotected_page @@ -1078,7 +1057,6 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 4 get :edit, :params => {:project_id => 1, :id => 'Another_page'} assert_response :success - assert_template 'edit' end def test_edit_protected_page_by_nonmember @@ -1092,7 +1070,6 @@ class WikiControllerTest < Redmine::ControllerTest @request.session[:user_id] = 2 get :edit, :params => {:project_id => 1, :id => 'CookBook_documentation'} assert_response :success - assert_template 'edit' end def test_history_of_non_existing_page_should_return_404 diff --git a/test/functional/wikis_controller_test.rb b/test/functional/wikis_controller_test.rb index c4fffba48..7a37ca265 100644 --- a/test/functional/wikis_controller_test.rb +++ b/test/functional/wikis_controller_test.rb @@ -31,7 +31,6 @@ class WikisControllerTest < Redmine::ControllerTest assert_difference 'Wiki.count' do xhr :post, :edit, :params => {:id => 3, :wiki => { :start_page => 'Start page' }} assert_response :success - assert_template 'edit' assert_equal 'text/javascript', response.content_type end @@ -46,7 +45,6 @@ class WikisControllerTest < Redmine::ControllerTest assert_no_difference 'Wiki.count' do xhr :post, :edit, :params => {:id => 3, :wiki => { :start_page => '' }} assert_response :success - assert_template 'edit' assert_equal 'text/javascript', response.content_type end @@ -60,7 +58,6 @@ class WikisControllerTest < Redmine::ControllerTest assert_no_difference 'Wiki.count' do xhr :post, :edit, :params => {:id => 1, :wiki => { :start_page => 'Other start page' }} assert_response :success - assert_template 'edit' assert_equal 'text/javascript', response.content_type end diff --git a/test/functional/workflows_controller_test.rb b/test/functional/workflows_controller_test.rb index 8bacc7b84..d70a79896 100644 --- a/test/functional/workflows_controller_test.rb +++ b/test/functional/workflows_controller_test.rb @@ -28,7 +28,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest def test_index get :index assert_response :success - assert_template 'index' count = WorkflowTransition.where(:role_id => 1, :tracker_id => 2).count assert_select 'a[href=?]', '/workflows/edit?role_id=1&tracker_id=2', :content => count.to_s @@ -37,7 +36,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest def test_get_edit get :edit assert_response :success - assert_template 'edit' end def test_get_edit_with_role_and_tracker @@ -47,12 +45,12 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :edit, :params => {:role_id => 2, :tracker_id => 1} assert_response :success - assert_template 'edit' # used status only - assert_not_nil assigns(:statuses) - assert_equal [2, 3, 5], assigns(:statuses).collect(&:id) - + statuses = IssueStatus.where(:id => [2, 3, 5]).sorted.pluck(:name) + assert_equal ["New issue"] + statuses, + css_select('table.workflows.transitions-always tbody tr td:first').map(&:text).map(&:strip) + # allowed transitions assert_select 'input[type=checkbox][name=?][value="1"][checked=checked]', 'transitions[3][5][always]' # not allowed @@ -74,8 +72,13 @@ class WorkflowsControllerTest < Redmine::ControllerTest def test_get_edit_with_all_roles_and_all_trackers get :edit, :params => {:role_id => 'all', :tracker_id => 'all'} assert_response :success - assert_equal Role.sorted.to_a, assigns(:roles) - assert_equal Tracker.sorted.to_a, assigns(:trackers) + + assert_select 'select[name=?][multiple=multiple]', 'role_id[]' do + assert_select 'option[selected=selected]', Role.all.select(&:consider_workflow?).count + end + assert_select 'select[name=?]', 'tracker_id[]' do + assert_select 'option[selected=selected][value=all]' + end end def test_get_edit_with_role_and_tracker_and_all_statuses @@ -83,10 +86,10 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :edit, :params => {:role_id => 2, :tracker_id => 1, :used_statuses_only => '0'} assert_response :success - assert_template 'edit' - assert_not_nil assigns(:statuses) - assert_equal IssueStatus.count, assigns(:statuses).size + statuses = IssueStatus.all.sorted.pluck(:name) + assert_equal ["New issue"] + statuses, + css_select('table.workflows.transitions-always tbody tr td:first').map(&:text).map(&:strip) assert_select 'input[type=checkbox][name=?]', 'transitions[1][1][always]' end @@ -161,7 +164,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :permissions assert_response :success - assert_template 'permissions' end def test_get_permissions_with_role_and_tracker @@ -172,7 +174,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :permissions, :params => {:role_id => 1, :tracker_id => 2} assert_response :success - assert_template 'permissions' assert_select 'input[name=?][value="1"]', 'role_id[]' assert_select 'input[name=?][value="2"]', 'tracker_id[]' @@ -213,7 +214,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :permissions, :params => {:role_id => 1, :tracker_id => 1} assert_response :success - assert_template 'permissions' # Custom field that is always required # The default option is "(Required)" @@ -231,7 +231,6 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :permissions, :params => {:role_id => 2, :tracker_id => 1} assert_response :success - assert_template 'permissions' assert_select 'select[name=?]:not(.disabled)', "permissions[1][#{cf1.id}]" assert_select 'select[name=?]:not(.disabled)', "permissions[1][#{cf3.id}]" @@ -287,7 +286,10 @@ class WorkflowsControllerTest < Redmine::ControllerTest get :permissions, :params => {:role_id => 1, :tracker_id => 2, :used_statuses_only => '0'} assert_response :success - assert_equal IssueStatus.sorted.to_a, assigns(:statuses) + + statuses = IssueStatus.all.sorted.pluck(:name) + assert_equal statuses, + css_select('table.workflows.fields_permissions thead tr:nth-child(2) td:not(:first-child)').map(&:text).map(&:strip) end def test_get_permissions_should_set_css_class @@ -330,7 +332,7 @@ class WorkflowsControllerTest < Redmine::ControllerTest def test_get_copy get :copy assert_response :success - assert_template 'copy' + assert_select 'select[name=source_tracker_id]' do assert_select 'option[value="1"]', :text => 'Bug' end -- 2.39.5