mirror of
https://github.com/redmine/redmine.git
synced 2025-10-26 07:46:17 +01:00
Upgrade to Rails 4.2.0 (#14534).
git-svn-id: http://svn.redmine.org/redmine/trunk@13892 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
5
Gemfile
5
Gemfile
@@ -1,6 +1,6 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem "rails", "4.1.8"
|
||||
gem "rails", "4.2.0"
|
||||
gem "jquery-rails", "~> 3.1.1"
|
||||
gem "coderay", "~> 1.1.0"
|
||||
gem "builder", ">= 3.0.4"
|
||||
@@ -86,7 +86,8 @@ end
|
||||
|
||||
group :test do
|
||||
gem "minitest"
|
||||
gem "mocha", "~> 1.0.0", :require => 'mocha/api'
|
||||
gem "rails-dom-testing"
|
||||
gem "mocha", "~> 1.0.0"
|
||||
gem "simplecov", "~> 0.9.1", :require => false
|
||||
# For running UI tests
|
||||
gem "capybara"
|
||||
|
||||
@@ -80,7 +80,7 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
only_path = options[:only_path].nil? ? true : options[:only_path]
|
||||
s = link_to(text, issue_path(issue, :only_path => only_path),
|
||||
s = link_to(text, issue_url(issue, :only_path => only_path),
|
||||
:class => issue.css_classes, :title => title)
|
||||
s << h(": #{subject}") if subject
|
||||
s = h("#{issue.project} - ") + s if options[:project]
|
||||
@@ -93,8 +93,9 @@ module ApplicationHelper
|
||||
# * :download - Force download (default: false)
|
||||
def link_to_attachment(attachment, options={})
|
||||
text = options.delete(:text) || attachment.filename
|
||||
route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path
|
||||
route_method = options.delete(:download) ? :download_named_attachment_url : :named_attachment_url
|
||||
html_options = options.slice!(:only_path)
|
||||
options[:only_path] = true unless options.key?(:only_path)
|
||||
url = send(route_method, attachment, attachment.filename, options)
|
||||
link_to text, url, html_options
|
||||
end
|
||||
@@ -120,9 +121,10 @@ module ApplicationHelper
|
||||
def link_to_message(message, options={}, html_options = nil)
|
||||
link_to(
|
||||
message.subject.truncate(60),
|
||||
board_message_path(message.board_id, message.parent_id || message.id, {
|
||||
board_message_url(message.board_id, message.parent_id || message.id, {
|
||||
:r => (message.parent_id && message.id),
|
||||
:anchor => (message.parent_id ? "message-#{message.id}" : nil)
|
||||
:anchor => (message.parent_id ? "message-#{message.id}" : nil),
|
||||
:only_path => true
|
||||
}.merge(options)),
|
||||
html_options
|
||||
)
|
||||
@@ -139,7 +141,9 @@ module ApplicationHelper
|
||||
if project.archived?
|
||||
h(project.name)
|
||||
else
|
||||
link_to project.name, project_path(project, options), html_options
|
||||
link_to project.name,
|
||||
project_url(project, {:only_path => true}.merge(options)),
|
||||
html_options
|
||||
end
|
||||
end
|
||||
|
||||
@@ -626,7 +630,7 @@ module ApplicationHelper
|
||||
filename, ext, alt, alttext = $1.downcase, $2, $3, $4
|
||||
# search for the picture in attachments
|
||||
if found = Attachment.latest_attach(attachments, filename)
|
||||
image_url = download_named_attachment_path(found, found.filename, :only_path => only_path)
|
||||
image_url = download_named_attachment_url(found, found.filename, :only_path => only_path)
|
||||
desc = found.description.to_s.gsub('"', '')
|
||||
if !desc.blank? && alttext.blank?
|
||||
alt = " title=\"#{desc}\" alt=\"#{desc}\""
|
||||
@@ -769,17 +773,17 @@ module ApplicationHelper
|
||||
issue = Issue.visible.find_by_id(oid)
|
||||
anchor = comment_id ? "note-#{comment_id}" : nil
|
||||
link = link_to("##{oid}#{comment_suffix}",
|
||||
issue_path(issue, :only_path => only_path, :anchor => anchor),
|
||||
issue_url(issue, :only_path => only_path, :anchor => anchor),
|
||||
:class => issue.css_classes,
|
||||
:title => "#{issue.subject.truncate(100)} (#{issue.status.name})")
|
||||
end
|
||||
when 'document'
|
||||
if document = Document.visible.find_by_id(oid)
|
||||
link = link_to(document.title, document_path(document, :only_path => only_path), :class => 'document')
|
||||
link = link_to(document.title, document_url(document, :only_path => only_path), :class => 'document')
|
||||
end
|
||||
when 'version'
|
||||
if version = Version.visible.find_by_id(oid)
|
||||
link = link_to(version.name, version_path(version, :only_path => only_path), :class => 'version')
|
||||
link = link_to(version.name, version_url(version, :only_path => only_path), :class => 'version')
|
||||
end
|
||||
when 'message'
|
||||
if message = Message.visible.find_by_id(oid)
|
||||
@@ -787,11 +791,11 @@ module ApplicationHelper
|
||||
end
|
||||
when 'forum'
|
||||
if board = Board.visible.find_by_id(oid)
|
||||
link = link_to(board.name, project_board_path(board.project, board, :only_path => only_path), :class => 'board')
|
||||
link = link_to(board.name, project_board_url(board.project, board, :only_path => only_path), :class => 'board')
|
||||
end
|
||||
when 'news'
|
||||
if news = News.visible.find_by_id(oid)
|
||||
link = link_to(news.title, news_path(news, :only_path => only_path), :class => 'news')
|
||||
link = link_to(news.title, news_url(news, :only_path => only_path), :class => 'news')
|
||||
end
|
||||
when 'project'
|
||||
if p = Project.visible.find_by_id(oid)
|
||||
@@ -805,19 +809,19 @@ module ApplicationHelper
|
||||
case prefix
|
||||
when 'document'
|
||||
if project && document = project.documents.visible.find_by_title(name)
|
||||
link = link_to(document.title, document_path(document, :only_path => only_path), :class => 'document')
|
||||
link = link_to(document.title, document_url(document, :only_path => only_path), :class => 'document')
|
||||
end
|
||||
when 'version'
|
||||
if project && version = project.versions.visible.find_by_name(name)
|
||||
link = link_to(version.name, version_path(version, :only_path => only_path), :class => 'version')
|
||||
link = link_to(version.name, version_url(version, :only_path => only_path), :class => 'version')
|
||||
end
|
||||
when 'forum'
|
||||
if project && board = project.boards.visible.find_by_name(name)
|
||||
link = link_to(board.name, project_board_path(board.project, board, :only_path => only_path), :class => 'board')
|
||||
link = link_to(board.name, project_board_url(board.project, board, :only_path => only_path), :class => 'board')
|
||||
end
|
||||
when 'news'
|
||||
if project && news = project.news.visible.find_by_title(name)
|
||||
link = link_to(news.title, news_path(news, :only_path => only_path), :class => 'news')
|
||||
link = link_to(news.title, news_url(news, :only_path => only_path), :class => 'news')
|
||||
end
|
||||
when 'commit', 'source', 'export'
|
||||
if project
|
||||
|
||||
@@ -76,8 +76,7 @@ class Issue < ActiveRecord::Base
|
||||
attr_protected :id
|
||||
|
||||
scope :visible, lambda {|*args|
|
||||
includes(:project).
|
||||
references(:project).
|
||||
joins(:project).
|
||||
where(Issue.visible_condition(args.shift || User.current, *args))
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
class JournalDetail < ActiveRecord::Base
|
||||
belongs_to :journal
|
||||
before_save :normalize_values
|
||||
attr_protected :id
|
||||
|
||||
def custom_field
|
||||
@@ -26,13 +25,16 @@ class JournalDetail < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def normalize_values
|
||||
self.value = normalize(value)
|
||||
self.old_value = normalize(old_value)
|
||||
def value=(arg)
|
||||
write_attribute :value, normalize(arg)
|
||||
end
|
||||
|
||||
def old_value=(arg)
|
||||
write_attribute :old_value, normalize(arg)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def normalize(v)
|
||||
case v
|
||||
when true
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<td class="last_login_on"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
|
||||
<td class="buttons">
|
||||
<%= change_status_link(user) %>
|
||||
<%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %>
|
||||
<%= delete_link user_path(user, :back_url => request.original_fullpath) unless User.current == user %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end -%>
|
||||
|
||||
@@ -29,5 +29,7 @@ Rails.application.configure do
|
||||
# Print deprecation notices to stderr and the Rails logger.
|
||||
config.active_support.deprecation = [:stderr, :log]
|
||||
|
||||
config.secret_token = 'a secret token for running the tests'
|
||||
config.secret_key_base = 'a secret token for running the tests'
|
||||
|
||||
config.active_support.test_order = :random
|
||||
end
|
||||
|
||||
@@ -146,6 +146,16 @@ module ActionMailer
|
||||
end
|
||||
end
|
||||
|
||||
# #deliver is deprecated in Rails 4.2
|
||||
# Prevents massive deprecation warnings
|
||||
module ActionMailer
|
||||
class MessageDelivery < Delegator
|
||||
def deliver
|
||||
deliver_now
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module ActionController
|
||||
module MimeResponds
|
||||
class Collector
|
||||
@@ -163,32 +173,8 @@ module ActionController
|
||||
# TODO: remove it in a later version
|
||||
def self.session=(*args)
|
||||
$stderr.puts "Please remove config/initializers/session_store.rb and run `rake generate_secret_token`.\n" +
|
||||
"Setting the session secret with ActionController.session= is no longer supported in Rails 3."
|
||||
"Setting the session secret with ActionController.session= is no longer supported."
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Rails::VERSION::MAJOR < 4 && RUBY_VERSION >= "2.1"
|
||||
module ActiveSupport
|
||||
class HashWithIndifferentAccess
|
||||
def select(*args, &block)
|
||||
dup.tap { |hash| hash.select!(*args, &block) }
|
||||
end
|
||||
|
||||
def reject(*args, &block)
|
||||
dup.tap { |hash| hash.reject!(*args, &block) }
|
||||
end
|
||||
end
|
||||
|
||||
class OrderedHash
|
||||
def select(*args, &block)
|
||||
dup.tap { |hash| hash.select!(*args, &block) }
|
||||
end
|
||||
|
||||
def reject(*args, &block)
|
||||
dup.tap { |hash| hash.reject!(*args, &block) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -217,15 +217,16 @@ Rails.application.routes.draw do
|
||||
get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats'
|
||||
get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph'
|
||||
|
||||
get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))',
|
||||
:to => 'repositories#changes'
|
||||
get 'projects/:id/repository/:repository_id/changes(/*path)',
|
||||
:to => 'repositories#changes',
|
||||
:format => false
|
||||
|
||||
get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision'
|
||||
get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision'
|
||||
post 'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue'
|
||||
delete 'projects/:id/repository/:repository_id/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue'
|
||||
get 'projects/:id/repository/:repository_id/revisions', :to => 'repositories#revisions'
|
||||
get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))',
|
||||
get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path)',
|
||||
:controller => 'repositories',
|
||||
:format => false,
|
||||
:constraints => {
|
||||
@@ -236,27 +237,30 @@ Rails.application.routes.draw do
|
||||
get 'projects/:id/repository/statistics', :to => 'repositories#stats'
|
||||
get 'projects/:id/repository/graph', :to => 'repositories#graph'
|
||||
|
||||
get 'projects/:id/repository/changes(/*path(.:ext))',
|
||||
:to => 'repositories#changes'
|
||||
get 'projects/:id/repository/changes(/*path)',
|
||||
:to => 'repositories#changes',
|
||||
:format => false
|
||||
|
||||
get 'projects/:id/repository/revisions', :to => 'repositories#revisions'
|
||||
get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision'
|
||||
get 'projects/:id/repository/revision', :to => 'repositories#revision'
|
||||
post 'projects/:id/repository/revisions/:rev/issues', :to => 'repositories#add_related_issue'
|
||||
delete 'projects/:id/repository/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue'
|
||||
get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))',
|
||||
get 'projects/:id/repository/revisions/:rev/:action(/*path)',
|
||||
:controller => 'repositories',
|
||||
:format => false,
|
||||
:constraints => {
|
||||
:action => /(browse|show|entry|raw|annotate|diff)/,
|
||||
:rev => /[a-z0-9\.\-_]+/
|
||||
}
|
||||
get 'projects/:id/repository/:repository_id/:action(/*path(.:ext))',
|
||||
get 'projects/:id/repository/:repository_id/:action(/*path)',
|
||||
:controller => 'repositories',
|
||||
:action => /(browse|show|entry|raw|changes|annotate|diff)/
|
||||
get 'projects/:id/repository/:action(/*path(.:ext))',
|
||||
:action => /(browse|show|entry|raw|changes|annotate|diff)/,
|
||||
:format => false
|
||||
get 'projects/:id/repository/:action(/*path)',
|
||||
:controller => 'repositories',
|
||||
:action => /(browse|show|entry|raw|changes|annotate|diff)/
|
||||
:action => /(browse|show|entry|raw|changes|annotate|diff)/,
|
||||
:format => false
|
||||
|
||||
get 'projects/:id/repository/:repository_id', :to => 'repositories#show', :path => nil
|
||||
get 'projects/:id/repository', :to => 'repositories#show', :path => nil
|
||||
|
||||
@@ -15,7 +15,7 @@ file 'config/initializers/secret_token.rb' do
|
||||
# change this key, all old sessions will become invalid! Make sure the
|
||||
# secret is at least 30 characters and all random, no regular words or
|
||||
# you'll be exposed to dictionary attacks.
|
||||
RedmineApp::Application.config.secret_token = '#{secret}'
|
||||
RedmineApp::Application.config.secret_key_base = '#{secret}'
|
||||
EOF
|
||||
end
|
||||
end
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace :test do
|
||||
Rake::TestTask.new(:ui => "db:test:prepare") do |t|
|
||||
t.libs << "test"
|
||||
t.verbose = true
|
||||
t.test_files = FileList['test/ui/**/*_test.rb']
|
||||
t.test_files = FileList['test/ui/**/*_test_ui.rb']
|
||||
end
|
||||
Rake::Task['test:ui'].comment = "Run the UI tests with Capybara (PhantomJS listening on port 4444 is required)"
|
||||
end
|
||||
|
||||
@@ -118,8 +118,8 @@ class ActivitiesControllerTest < ActionController::TestCase
|
||||
assert_template 'common/feed'
|
||||
|
||||
assert_select 'feed' do
|
||||
assert_select 'link[rel=self][href=?]', 'http://test.host/activity.atom?show_changesets=1&show_documents=1&show_files=1&show_issues=1&show_messages=1&show_news=1&show_time_entries=1&show_wiki_edits=1&with_subprojects=0'
|
||||
assert_select 'link[rel=alternate][href=?]', 'http://test.host/activity?show_changesets=1&show_documents=1&show_files=1&show_issues=1&show_messages=1&show_news=1&show_time_entries=1&show_wiki_edits=1&with_subprojects=0'
|
||||
assert_select 'link[rel=self][href=?]', 'http://test.host/activity.atom?show_changesets=1&show_documents=1&show_files=1&show_issues=1&show_messages=1&show_news=1&show_time_entries=1&show_wiki_edits=1&with_subprojects=0'
|
||||
assert_select 'link[rel=alternate][href=?]', 'http://test.host/activity?show_changesets=1&show_documents=1&show_files=1&show_issues=1&show_messages=1&show_news=1&show_time_entries=1&show_wiki_edits=1&with_subprojects=0'
|
||||
assert_select 'entry' do
|
||||
assert_select 'link[href=?]', 'http://test.host/issues/11'
|
||||
end
|
||||
|
||||
@@ -94,7 +94,7 @@ class AuthSourcesControllerTest < ActionController::TestCase
|
||||
get :edit, :id => 1
|
||||
assert_response :success
|
||||
assert_select 'input[value=secret]', 0
|
||||
assert_select 'input[name=dummy_password][value=?]', /x+/
|
||||
assert_select 'input[name=dummy_password][value^=xxxxxx]'
|
||||
end
|
||||
|
||||
def test_edit_invalid_should_respond_with_404
|
||||
|
||||
@@ -117,9 +117,13 @@ class BoardsControllerTest < ActionController::TestCase
|
||||
|
||||
assert_select 'select[name=?]', 'board[parent_id]' do
|
||||
assert_select 'option', (Project.find(1).boards.size + 1)
|
||||
assert_select 'option[value=""]', :text => ' '
|
||||
assert_select 'option[value=""]'
|
||||
assert_select 'option[value="1"]', :text => 'Help'
|
||||
end
|
||||
|
||||
# replaced by nokogiri, not easy to test in DOM assertions
|
||||
assert_not_include '<option value=""></option>', response.body
|
||||
assert_include '<option value=""> </option>', response.body
|
||||
end
|
||||
|
||||
def test_new_without_project_boards
|
||||
|
||||
@@ -44,15 +44,15 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1', :text => 'Delete'
|
||||
|
||||
# Statuses
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate'
|
||||
# No inactive priorities
|
||||
assert_select 'a', :text => /Inactive Priority/, :count => 0
|
||||
# Versions
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0'
|
||||
# Assignees
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper'
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper'
|
||||
end
|
||||
|
||||
def test_context_menu_one_issue_by_anonymous
|
||||
@@ -72,15 +72,15 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
assert_not_nil assigns(:issues)
|
||||
assert_equal [1, 2], assigns(:issues).map(&:id).sort
|
||||
|
||||
ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
||||
ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
||||
|
||||
assert_select 'a.icon-edit[href=?]', "/issues/bulk_edit?#{ids}", :text => 'Edit'
|
||||
assert_select 'a.icon-copy[href=?]', "/issues/bulk_edit?copy=1&#{ids}", :text => 'Copy'
|
||||
assert_select 'a.icon-copy[href=?]', "/issues/bulk_edit?copy=1&#{ids}", :text => 'Copy'
|
||||
assert_select 'a.icon-del[href=?]', "/issues?#{ids}", :text => 'Delete'
|
||||
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5", :text => 'Closed'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8", :text => 'Immediate'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=3", :text => 'Dave Lopper'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5", :text => 'Closed'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8", :text => 'Immediate'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=3", :text => 'Dave Lopper'
|
||||
end
|
||||
|
||||
def test_context_menu_multiple_issues_of_different_projects
|
||||
@@ -91,14 +91,14 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
assert_not_nil assigns(:issues)
|
||||
assert_equal [1, 2, 6], assigns(:issues).map(&:id).sort
|
||||
|
||||
ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
||||
ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
||||
|
||||
assert_select 'a.icon-edit[href=?]', "/issues/bulk_edit?#{ids}", :text => 'Edit'
|
||||
assert_select 'a.icon-del[href=?]', "/issues?#{ids}", :text => 'Delete'
|
||||
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5", :text => 'Closed'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8", :text => 'Immediate'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=2", :text => 'John Smith'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5", :text => 'Closed'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8", :text => 'Immediate'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=2", :text => 'John Smith'
|
||||
end
|
||||
|
||||
def test_context_menu_should_include_list_custom_fields
|
||||
@@ -108,11 +108,11 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'List'
|
||||
assert_select 'a[href="#"]', :text => 'List'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', 3
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=Foo", :text => 'Foo'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=Foo", :text => 'Foo'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -124,7 +124,7 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1, 2]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'List'
|
||||
assert_select 'a[href="#"]', :text => 'List'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', 2
|
||||
assert_select 'a', :text => 'none', :count => 0
|
||||
@@ -142,7 +142,7 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'List'
|
||||
assert_select 'a[href="#"]', :text => 'List'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', 3
|
||||
assert_select 'a.icon-checked', :text => 'Bar'
|
||||
@@ -157,12 +157,12 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'Bool'
|
||||
assert_select 'a[href="#"]', :text => 'Bool'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', 3
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=0", :text => 'No'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=1", :text => 'Yes'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=0", :text => 'No'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=1", :text => 'Yes'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -174,11 +174,11 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'User'
|
||||
assert_select 'a[href="#"]', :text => 'User'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', Project.find(1).members.count + 1
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=2", :text => 'John Smith'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=2", :text => 'John Smith'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -189,11 +189,11 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :issues, :ids => [1]
|
||||
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => 'Version'
|
||||
assert_select 'a[href="#"]', :text => 'Version'
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', Project.find(1).shared_versions.count + 1
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=3", :text => '2.0'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=3", :text => '2.0'
|
||||
assert_select 'a[href=?]', "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -216,7 +216,7 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'context_menus/issues'
|
||||
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=2', :text => / me /
|
||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=2', :text => / me /
|
||||
end
|
||||
|
||||
def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects
|
||||
@@ -266,12 +266,12 @@ class ContextMenusControllerTest < ActionController::TestCase
|
||||
get :time_entries, :ids => [1, 2]
|
||||
assert_response :success
|
||||
assert_select "li.cf_#{field.id}" do
|
||||
assert_select 'a[href=#]', :text => "Field"
|
||||
assert_select 'a[href="#"]', :text => "Field"
|
||||
assert_select 'ul' do
|
||||
assert_select 'a', 3
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=foo", :text => 'foo'
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=bar", :text => 'bar'
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=foo", :text => 'foo'
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=bar", :text => 'bar'
|
||||
assert_select 'a[href=?]', "/time_entries/bulk_update?ids%5B%5D=1&ids%5B%5D=2&time_entry%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__", :text => 'none'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -371,7 +371,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_select 'a.atom[href="/issues.atom"]'
|
||||
assert_select 'a.csv[href="/issues.csv"]'
|
||||
assert_select 'a.pdf[href="/issues.pdf"]'
|
||||
assert_select 'form#csv-export-form[action=/issues.csv]'
|
||||
assert_select 'form#csv-export-form[action="/issues.csv"]'
|
||||
end
|
||||
|
||||
def test_index_should_not_warn_when_not_exceeding_export_limit
|
||||
@@ -861,7 +861,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
get :index, :set_filter => 1, :c => %w(subject description)
|
||||
|
||||
assert_select 'table.issues thead th', 3 # columns: chekbox + id + subject
|
||||
assert_select 'td.description[colspan=3]', :text => 'Unable to print recipes'
|
||||
assert_select 'td.description[colspan="3"]', :text => 'Unable to print recipes'
|
||||
|
||||
get :index, :set_filter => 1, :c => %w(subject description), :format => 'pdf'
|
||||
assert_response :success
|
||||
@@ -1012,7 +1012,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
@request.session[:user_id] = 2
|
||||
get :show, :id => 1
|
||||
|
||||
assert_select 'form#issue-form[method=post][enctype=multipart/form-data]' do
|
||||
assert_select 'form#issue-form[method=post][enctype="multipart/form-data"]' do
|
||||
assert_select 'input[type=file][name=?]', 'attachments[dummy][file]'
|
||||
end
|
||||
end
|
||||
@@ -1622,7 +1622,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
@request.session[:user_id] = 2
|
||||
get :new, :project_id => 1, :tracker_id => 1
|
||||
|
||||
assert_select 'form[id=issue-form][method=post][enctype=multipart/form-data]' do
|
||||
assert_select 'form[id=issue-form][method=post][enctype="multipart/form-data"]' do
|
||||
assert_select 'input[name=?][type=file]', 'attachments[dummy][file]'
|
||||
end
|
||||
end
|
||||
@@ -2429,7 +2429,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_equal orig.subject, assigns(:issue).subject
|
||||
assert assigns(:issue).copy?
|
||||
|
||||
assert_select 'form[id=issue-form][action=/projects/ecookbook/issues]' do
|
||||
assert_select 'form[id=issue-form][action="/projects/ecookbook/issues"]' do
|
||||
assert_select 'select[name=?]', 'issue[project_id]' do
|
||||
assert_select 'option[value="1"][selected=selected]', :text => 'eCookbook'
|
||||
assert_select 'option[value="2"]:not([selected])', :text => 'OnlineStore'
|
||||
@@ -2629,7 +2629,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_not_nil assigns(:issue)
|
||||
assert assigns(:issue).copy?
|
||||
|
||||
assert_select 'form#issue-form[action=/projects/ecookbook/issues]' do
|
||||
assert_select 'form#issue-form[action="/projects/ecookbook/issues"]' do
|
||||
assert_select 'select[name=?]', 'issue[project_id]' do
|
||||
assert_select 'option[value="1"]:not([selected])', :text => 'eCookbook'
|
||||
assert_select 'option[value="2"][selected=selected]', :text => 'OnlineStore'
|
||||
@@ -2701,7 +2701,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_select 'option[value="7"][selected=selected]', :text => 'Urgent'
|
||||
end
|
||||
|
||||
assert_select 'input[name=?][value=2.5]', 'time_entry[hours]'
|
||||
assert_select 'input[name=?][value="2.5"]', 'time_entry[hours]'
|
||||
assert_select 'select[name=?]', 'time_entry[activity_id]' do
|
||||
assert_select 'option[value="10"][selected=selected]', :text => 'Development'
|
||||
end
|
||||
|
||||
@@ -245,7 +245,7 @@ class IssuesControllerTransactionTest < ActionController::TestCase
|
||||
assert_select 'input[name=?][value=?]', 'time_entry[hours]', '2.5'
|
||||
assert_select 'input[name=?][value=?]', 'time_entry[comments]', 'should not be added'
|
||||
assert_select 'select[name=?]', 'time_entry[activity_id]' do
|
||||
assert_select 'option[value=?][selected=selected]', TimeEntryActivity.first.id
|
||||
assert_select 'option[value=?][selected=selected]', TimeEntryActivity.first.id.to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -83,9 +83,9 @@ class IssuesCustomFieldsVisibilityTest < ActionController::TestCase
|
||||
end
|
||||
@fields.each_with_index do |field, i|
|
||||
if fields.include?(field)
|
||||
assert_select "custom_field[id=#{field.id}] value", {:text => "Value#{i}", :count => 1}, "User #{user.id} was not able to view #{field.name} in API"
|
||||
assert_select "custom_field[id=?] value", field.id.to_s, {:text => "Value#{i}", :count => 1}, "User #{user.id} was not able to view #{field.name} in API"
|
||||
else
|
||||
assert_select "custom_field[id=#{field.id}] value", {:text => "Value#{i}", :count => 0}, "User #{user.id} was not able to view #{field.name} in API"
|
||||
assert_select "custom_field[id=?] value", field.id.to_s, {:text => "Value#{i}", :count => 0}, "User #{user.id} was not able to view #{field.name} in API"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -126,7 +126,7 @@ class MyControllerTest < ActionController::TestCase
|
||||
get :destroy
|
||||
assert_response :success
|
||||
assert_template 'destroy'
|
||||
assert_select 'form[action=/my/account/destroy]' do
|
||||
assert_select 'form[action="/my/account/destroy"]' do
|
||||
assert_select 'input[name=confirm]'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -123,7 +123,7 @@ class RepositoriesBazaarControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
# Line 11 removed
|
||||
assert_select 'th.line-num:content(11) ~ td.diff_out', :text => /Display more information/
|
||||
assert_select 'th.line-num:contains(11) ~ td.diff_out', :text => /Display more information/
|
||||
end
|
||||
end
|
||||
|
||||
@@ -157,7 +157,7 @@ class RepositoriesBazaarControllerTest < ActionController::TestCase
|
||||
assert_select "th.line-num", :text => '1' do
|
||||
assert_select "+ td.revision" do
|
||||
assert_select "a", :text => '2'
|
||||
assert_select "+ td.author", :text => "test &" do
|
||||
assert_select "+ td.author", :text => "test &" do
|
||||
assert_select "+ td",
|
||||
:text => "author escaping test"
|
||||
end
|
||||
|
||||
@@ -275,14 +275,8 @@ class RepositoriesControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'committers'
|
||||
|
||||
assert_select 'td:content(dlopper) + td select' do
|
||||
assert_select 'option[value="3"][selected=selected]', :text => 'Dave Lopper'
|
||||
end
|
||||
|
||||
assert_select 'td:content(foo) + td select' do
|
||||
assert_select 'option[value=""]'
|
||||
assert_select 'option[selected=selected]', 0 # no option selected
|
||||
end
|
||||
assert_select 'input[value=dlopper] + select option[value="3"][selected=selected]', :text => 'Dave Lopper'
|
||||
assert_select 'input[value=foo] + select option[selected=selected]', 0 # no option selected
|
||||
end
|
||||
|
||||
def test_post_committers
|
||||
|
||||
@@ -116,7 +116,7 @@ class RepositoriesDarcsControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
# Line 22 removed
|
||||
assert_select 'th.line-num:content(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
# Line 22 removed
|
||||
assert_select 'th.line-num:content(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'h2', :text => /2f9c0091/
|
||||
end
|
||||
end
|
||||
@@ -286,7 +286,7 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
# Line 22 removed
|
||||
assert_select 'th.line-num:content(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'h2', :text => /2f9c0091/
|
||||
end
|
||||
end
|
||||
|
||||
@@ -293,7 +293,7 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
||||
assert_template 'diff'
|
||||
if @diff_c_support
|
||||
# Line 22 removed
|
||||
assert_select 'th.line-num:content(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
|
||||
assert_select 'h2', :text => /4:def6d2f1254a/
|
||||
end
|
||||
end
|
||||
|
||||
@@ -315,8 +315,8 @@ class SearchControllerTest < ActionController::TestCase
|
||||
get :index, :q => 'escaped_once'
|
||||
assert_response :success
|
||||
assert_select '#search-results' do
|
||||
assert_select 'dt.issue a', :text => /<subject>/
|
||||
assert_select 'dd', :text => /<description>/
|
||||
assert_select 'dt.issue a', :text => /<subject>/
|
||||
assert_select 'dd', :text => /<description>/
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -139,9 +139,9 @@ class SettingsControllerTest < ActionController::TestCase
|
||||
def test_get_plugin_settings
|
||||
ActionController::Base.append_view_path(File.join(Rails.root, "test/fixtures/plugins"))
|
||||
Redmine::Plugin.register :foo do
|
||||
settings :partial => "foo_plugin/foo_plugin_settings",
|
||||
:default => {'sample_setting' => 'Plugin setting value'}
|
||||
settings :partial => "foo_plugin/foo_plugin_settings"
|
||||
end
|
||||
Setting.plugin_foo = {'sample_setting' => 'Plugin setting value'}
|
||||
|
||||
get :plugin, :id => 'foo'
|
||||
assert_response :success
|
||||
|
||||
@@ -667,7 +667,7 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
assert_select 'form[action=?][method=get]', '/projects/ecookbook/time_entries.csv' do
|
||||
# filter
|
||||
assert_select 'input[name=?][value=?]', 'f[]', 'spent_on'
|
||||
assert_select 'input[name=?][value=?]', 'op[spent_on]', '>='
|
||||
assert_select 'input[name=?][value=?]', 'op[spent_on]', '>='
|
||||
assert_select 'input[name=?][value=?]', 'v[spent_on][]', '2007-04-01'
|
||||
# columns
|
||||
assert_select 'input[name=?][value=?]', 'c[]', 'spent_on'
|
||||
|
||||
@@ -127,7 +127,7 @@ class WelcomeControllerTest < ActionController::TestCase
|
||||
|
||||
get :index
|
||||
assert_select "#header select" do
|
||||
assert_select "option", :text => 'Foo & Bar'
|
||||
assert_select "option", :text => 'Foo & Bar'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ class WorkflowsControllerTest < ActionController::TestCase
|
||||
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
|
||||
assert_select 'a[href=?]', '/workflows/edit?role_id=1&tracker_id=2', :content => count.to_s
|
||||
end
|
||||
|
||||
def test_get_edit
|
||||
|
||||
@@ -41,7 +41,7 @@ class Redmine::ApiTest::AttachmentsTest < Redmine::ApiTest::Base
|
||||
get '/attachments/7.xml', {}, credentials('jsmith')
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'attachment id:content(7)' do
|
||||
assert_select 'attachment id', :text => '7' do
|
||||
assert_select '~ filename', :text => 'archive.zip'
|
||||
assert_select '~ content_url', :text => 'http://www.example.com/attachments/download/7/archive.zip'
|
||||
end
|
||||
@@ -51,7 +51,7 @@ class Redmine::ApiTest::AttachmentsTest < Redmine::ApiTest::Base
|
||||
get '/attachments/16.xml', {}, credentials('jsmith')
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'attachment id:content(16)' do
|
||||
assert_select 'attachment id:contains(16)' do
|
||||
assert_select '~ thumbnail_url', :text => 'http://www.example.com/attachments/thumbnail/16'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -105,7 +105,7 @@ class Redmine::ApiTest::GroupsTest < Redmine::ApiTest::Base
|
||||
assert_select 'group' do
|
||||
assert_select 'users' do
|
||||
assert_select 'user', Group.find(10).users.count
|
||||
assert_select 'user[id=8]'
|
||||
assert_select 'user[id="8"]'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,7 +25,7 @@ class Redmine::ApiTest::IssueStatusesTest < Redmine::ApiTest::Base
|
||||
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'issue_statuses[type=array] issue_status id:content(2)' do
|
||||
assert_select 'issue_statuses[type=array] issue_status id', :text => '2' do
|
||||
assert_select '~ name', :text => 'Assigned'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -74,12 +74,12 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'issue id:content(3)' do
|
||||
assert_select 'issue id', :text => '3' do
|
||||
assert_select '~ relations relation', 1
|
||||
assert_select '~ relations relation[id="2"][issue_id="2"][issue_to_id="3"][relation_type=relates]'
|
||||
end
|
||||
|
||||
assert_select 'issue id:content(1)' do
|
||||
assert_select 'issue id', :text => '1' do
|
||||
assert_select '~ relations'
|
||||
assert_select '~ relations relation', 0
|
||||
end
|
||||
@@ -281,7 +281,7 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base
|
||||
|
||||
assert_select 'issue attachments[type=array]' do
|
||||
assert_select 'attachment', 5
|
||||
assert_select 'attachment id:content(4)' do
|
||||
assert_select 'attachment id', :text => '4' do
|
||||
assert_select '~ filename', :text => 'source.rb'
|
||||
assert_select '~ content_url', :text => 'http://www.example.com/attachments/download/4/source.rb'
|
||||
end
|
||||
@@ -292,9 +292,9 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base
|
||||
issue = Issue.generate_with_descendants!(:project_id => 1)
|
||||
get "/issues/#{issue.id}.xml?include=children"
|
||||
|
||||
assert_select 'issue children[type=array]' do
|
||||
assert_select 'issue', 2
|
||||
assert_select 'issue children', 1
|
||||
assert_select 'issue id', :text => issue.id.to_s do
|
||||
assert_select '~ children[type=array] > issue', 2
|
||||
assert_select '~ children[type=array] > issue > children', 1
|
||||
end
|
||||
end
|
||||
|
||||
@@ -322,7 +322,7 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base
|
||||
assert_select 'issue' do
|
||||
assert_select 'watchers', Issue.find(1).watchers.count
|
||||
assert_select 'watchers' do
|
||||
assert_select 'user[id=3]'
|
||||
assert_select 'user[id="3"]'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,9 +25,9 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
|
||||
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'memberships[type=array] membership id:content(2)' do
|
||||
assert_select '~ user[id=3][name=Dave Lopper]'
|
||||
assert_select '~ roles role[id=2][name=Developer]'
|
||||
assert_select 'memberships[type=array] membership id', :text => '2' do
|
||||
assert_select '~ user[id="3"][name="Dave Lopper"]'
|
||||
assert_select '~ roles role[id="2"][name=Developer]'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -94,9 +94,9 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
|
||||
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'membership id:content(2)' do
|
||||
assert_select '~ user[id=3][name=Dave Lopper]'
|
||||
assert_select '~ roles role[id=2][name=Developer]'
|
||||
assert_select 'membership id', :text => '2' do
|
||||
assert_select '~ user[id="3"][name="Dave Lopper"]'
|
||||
assert_select '~ roles role[id="2"][name=Developer]'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'issue_categories[type=array] issue_category[id=2][name=Recipes]'
|
||||
assert_select 'issue_categories[type=array] issue_category[id="2"][name=Recipes]'
|
||||
end
|
||||
|
||||
test "GET /projects.xml with include=trackers should return trackers" do
|
||||
@@ -62,7 +62,7 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'trackers[type=array] tracker[id=2][name=Feature request]'
|
||||
assert_select 'trackers[type=array] tracker[id="2"][name="Feature request"]'
|
||||
end
|
||||
|
||||
test "GET /projects.xml with include=enabled_modules should return enabled modules" do
|
||||
@@ -81,7 +81,7 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
|
||||
assert_select 'project>id', :text => '1'
|
||||
assert_select 'project>status', :text => '1'
|
||||
assert_select 'project>is_public', :text => 'true'
|
||||
assert_select 'custom_field[name=Development status]', :text => 'Stable'
|
||||
assert_select 'custom_field[name="Development status"]', :text => 'Stable'
|
||||
|
||||
assert_select 'trackers', 0
|
||||
assert_select 'issue_categories', 0
|
||||
@@ -111,7 +111,7 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'issue_categories[type=array] issue_category[id=2][name=Recipes]'
|
||||
assert_select 'issue_categories[type=array] issue_category[id="2"][name=Recipes]'
|
||||
end
|
||||
|
||||
test "GET /projects/:id.xml with include=trackers should return trackers" do
|
||||
@@ -119,7 +119,7 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'trackers[type=array] tracker[id=2][name=Feature request]'
|
||||
assert_select 'trackers[type=array] tracker[id="2"][name="Feature request"]'
|
||||
end
|
||||
|
||||
test "GET /projects/:id.xml with include=enabled_modules should return enabled modules" do
|
||||
|
||||
@@ -32,7 +32,7 @@ class Redmine::ApiTest::QueriesTest < Redmine::ApiTest::Base
|
||||
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'queries[type=array] query id:content(4)' do
|
||||
assert_select 'queries[type=array] query id', :text => '4' do
|
||||
assert_select '~ name', :text => 'Public query for all projects'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -27,7 +27,7 @@ class Redmine::ApiTest::RolesTest < Redmine::ApiTest::Base
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_equal 3, assigns(:roles).size
|
||||
|
||||
assert_select 'roles[type=array] role id:content(2)' do
|
||||
assert_select 'roles[type=array] role id', :text => '2' do
|
||||
assert_select '~ name', :text => 'Developer'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ class Redmine::ApiTest::TrackersTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'trackers[type=array] tracker id:content(2)' do
|
||||
assert_select 'trackers[type=array] tracker id', :text => '2' do
|
||||
assert_select '~ name', :text => 'Feature request'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ class Redmine::ApiTest::VersionsTest < Redmine::ApiTest::Base
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
|
||||
assert_select 'versions[type=array] version id:content(2)' do
|
||||
assert_select 'versions[type=array] version id', :text => '2' do
|
||||
assert_select '~ name', :text => '1.0'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -172,7 +172,7 @@ class IssuesTest < Redmine::IntegrationTest
|
||||
|
||||
# Issue view
|
||||
follow_redirect!
|
||||
assert_select 'th:content(Tester:) + td', :text => tester.name
|
||||
assert_select 'th:contains("Tester:") + td', :text => tester.name
|
||||
assert_select 'select[name=?]', "issue[custom_field_values][#{@field.id}]" do
|
||||
assert_select 'option', users.size + 1 # +1 for blank value
|
||||
assert_select 'option[value=?][selected=selected]', tester.id.to_s, :text => tester.name
|
||||
|
||||
@@ -105,11 +105,11 @@ class LayoutTest < Redmine::IntegrationTest
|
||||
|
||||
def test_search_field_outside_project_should_link_to_global_search
|
||||
get '/'
|
||||
assert_select 'div#quick-search form[action=/search]'
|
||||
assert_select 'div#quick-search form[action="/search"]'
|
||||
end
|
||||
|
||||
def test_search_field_inside_project_should_link_to_project_search
|
||||
get '/projects/ecookbook'
|
||||
assert_select 'div#quick-search form[action=/projects/ecookbook/search]'
|
||||
assert_select 'div#quick-search form[action="/projects/ecookbook/search"]'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,6 +20,7 @@ require File.expand_path('../../../../test_helper', __FILE__)
|
||||
class ThemesTest < Redmine::IntegrationTest
|
||||
|
||||
def setup
|
||||
Redmine::Themes.rescan
|
||||
@theme = Redmine::Themes.themes.last
|
||||
Setting.ui_theme = @theme.id
|
||||
end
|
||||
@@ -32,14 +33,14 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "link[rel=stylesheet][href^=/themes/#{@theme.dir}/stylesheets/application.css]"
|
||||
assert_select "link[rel=stylesheet][href^=?]", "/themes/#{@theme.dir}/stylesheets/application.css"
|
||||
end
|
||||
|
||||
def test_without_theme_js
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "script[src^=/themes/#{@theme.dir}/javascripts/theme.js]", 0
|
||||
assert_select "script[src^=?]", "/themes/#{@theme.dir}/javascripts/theme.js", 0
|
||||
end
|
||||
|
||||
def test_with_theme_js
|
||||
@@ -48,7 +49,7 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "script[src^=/themes/#{@theme.dir}/javascripts/theme.js]", 1
|
||||
assert_select "script[src^=?]", "/themes/#{@theme.dir}/javascripts/theme.js", 1
|
||||
ensure
|
||||
@theme.javascripts.delete 'theme'
|
||||
end
|
||||
@@ -57,7 +58,7 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select 'link[rel=shortcut icon][href^=/favicon.ico]'
|
||||
assert_select 'link[rel="shortcut icon"][href^="/favicon.ico"]'
|
||||
end
|
||||
|
||||
def test_use_theme_favicon_if_theme_provides_one
|
||||
@@ -66,7 +67,7 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "link[rel=shortcut icon][href^=/themes/#{@theme.dir}/favicon/a.ico]"
|
||||
assert_select 'link[rel="shortcut icon"][href^=?]', "/themes/#{@theme.dir}/favicon/a.ico"
|
||||
ensure
|
||||
@theme.favicons.delete 'a.ico'
|
||||
end
|
||||
@@ -76,8 +77,8 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "link[rel=shortcut icon]", 1
|
||||
assert_select "link[rel=shortcut icon][href^=/themes/#{@theme.dir}/favicon/b.ico]"
|
||||
assert_select 'link[rel="shortcut icon"]', 1
|
||||
assert_select 'link[rel="shortcut icon"][href^=?]', "/themes/#{@theme.dir}/favicon/b.ico"
|
||||
ensure
|
||||
@theme.favicons.delete("b.ico")
|
||||
@theme.favicons.delete("a.png")
|
||||
@@ -90,9 +91,9 @@ class ThemesTest < Redmine::IntegrationTest
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select "link[rel=stylesheet][href^=/foo/themes/#{@theme.dir}/stylesheets/application.css]"
|
||||
assert_select "script[src^=/foo/themes/#{@theme.dir}/javascripts/theme.js]"
|
||||
assert_select "link[rel=shortcut icon][href^=/foo/themes/#{@theme.dir}/favicon/a.ico]"
|
||||
assert_select "link[rel=stylesheet][href^=?]", "/foo/themes/#{@theme.dir}/stylesheets/application.css"
|
||||
assert_select "script[src^=?]", "/foo/themes/#{@theme.dir}/javascripts/theme.js"
|
||||
assert_select 'link[rel="shortcut icon"][href^=?]', "/foo/themes/#{@theme.dir}/favicon/a.ico"
|
||||
ensure
|
||||
Redmine::Utils.relative_url_root = ''
|
||||
end
|
||||
|
||||
@@ -31,6 +31,7 @@ require File.expand_path(File.dirname(__FILE__) + '/object_helpers')
|
||||
include ObjectHelpers
|
||||
|
||||
require 'net/ldap'
|
||||
require 'mocha/setup'
|
||||
|
||||
class ActionView::TestCase
|
||||
helper :application
|
||||
@@ -189,10 +190,18 @@ class ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def assert_select_in(text, *args, &block)
|
||||
d = HTML::Document.new(CGI::unescapeHTML(String.new(text))).root
|
||||
d = Nokogiri::HTML(CGI::unescapeHTML(String.new(text))).root
|
||||
assert_select(d, *args, &block)
|
||||
end
|
||||
|
||||
def assert_select_email(*args, &block)
|
||||
email = ActionMailer::Base.deliveries.last
|
||||
assert_not_nil email
|
||||
html_body = email.parts.detect {|part| part.content_type.include?('text/html')}.try(&:body)
|
||||
assert_not_nil html_body
|
||||
assert_select_in html_body.encoded, *args, &block
|
||||
end
|
||||
|
||||
def assert_mail_body_match(expected, mail, message=nil)
|
||||
if expected.is_a?(String)
|
||||
assert_include expected, mail_body(mail), message
|
||||
|
||||
@@ -1217,15 +1217,15 @@ RAW
|
||||
result = textilizable(raw, :edit_section_links => {:controller => 'wiki', :action => 'edit', :project_id => '1', :id => 'Test'}).gsub("\n", "")
|
||||
|
||||
# heading that contains inline code
|
||||
assert_match Regexp.new('<div class="contextual" id="section-4" title="Edit this section">' +
|
||||
'<a href="/projects/1/wiki/Test/edit\?section=4"><img alt="Edit" src="/images/edit.png(\?\d+)?" /></a></div>' +
|
||||
assert_match Regexp.new('<div class="contextual" title="Edit this section" id="section-4">' +
|
||||
'<a href="/projects/1/wiki/Test/edit\?section=4"><img src="/images/edit.png(\?\d+)?" alt="Edit" /></a></div>' +
|
||||
'<a name="Subtitle-with-inline-code"></a>' +
|
||||
'<h2 >Subtitle with <code>inline code</code><a href="#Subtitle-with-inline-code" class="wiki-anchor">¶</a></h2>'),
|
||||
result
|
||||
|
||||
# last heading
|
||||
assert_match Regexp.new('<div class="contextual" id="section-5" title="Edit this section">' +
|
||||
'<a href="/projects/1/wiki/Test/edit\?section=5"><img alt="Edit" src="/images/edit.png(\?\d+)?" /></a></div>' +
|
||||
assert_match Regexp.new('<div class="contextual" title="Edit this section" id="section-5">' +
|
||||
'<a href="/projects/1/wiki/Test/edit\?section=5"><img src="/images/edit.png(\?\d+)?" alt="Edit" /></a></div>' +
|
||||
'<a name="Subtitle-after-pre-tag"></a>' +
|
||||
'<h2 >Subtitle after pre tag<a href="#Subtitle-after-pre-tag" class="wiki-anchor">¶</a></h2>'),
|
||||
result
|
||||
@@ -1323,8 +1323,9 @@ RAW
|
||||
|
||||
def test_thumbnail_tag
|
||||
a = Attachment.find(3)
|
||||
assert_equal '<a href="/attachments/3/logo.gif" title="logo.gif"><img alt="3" src="/attachments/thumbnail/3" /></a>',
|
||||
thumbnail_tag(a)
|
||||
assert_select_in thumbnail_tag(a),
|
||||
'a[href=?][title=?] img[alt="3"][src=?]',
|
||||
"/attachments/3/logo.gif", "logo.gif", "/attachments/thumbnail/3"
|
||||
end
|
||||
|
||||
def test_link_to_project
|
||||
|
||||
@@ -28,7 +28,7 @@ class GroupsHelperTest < ActionView::TestCase
|
||||
group = Group.generate!
|
||||
|
||||
result = render_principals_for_new_group_users(group)
|
||||
assert_select_in result, 'input[name=?][value=2]', 'user_ids[]'
|
||||
assert_select_in result, 'input[name=?][value="2"]', 'user_ids[]'
|
||||
end
|
||||
|
||||
def test_render_principals_for_new_group_users_with_limited_results_should_paginate
|
||||
|
||||
@@ -29,7 +29,7 @@ class MembersHelperTest < ActionView::TestCase
|
||||
project = Project.generate!
|
||||
|
||||
result = render_principals_for_new_members(project)
|
||||
assert_select_in result, 'input[name=?][value=2]', 'membership[user_ids][]'
|
||||
assert_select_in result, 'input[name=?][value="2"]', 'membership[user_ids][]'
|
||||
end
|
||||
|
||||
def test_render_principals_for_new_members_with_limited_results_should_paginate
|
||||
|
||||
@@ -42,12 +42,12 @@ class ProjectsHelperTest < ActionView::TestCase
|
||||
def test_link_to_version_within_project
|
||||
@project = Project.find(2)
|
||||
User.current = User.find(1)
|
||||
assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', link_to_version(Version.find(5))
|
||||
assert_equal '<a title="07/01/2006" href="/versions/5">Alpha</a>', link_to_version(Version.find(5))
|
||||
end
|
||||
|
||||
def test_link_to_version
|
||||
User.current = User.find(1)
|
||||
assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', link_to_version(Version.find(5))
|
||||
assert_equal '<a title="07/01/2006" href="/versions/5">Alpha</a>', link_to_version(Version.find(5))
|
||||
end
|
||||
|
||||
def test_link_to_version_without_effective_date
|
||||
|
||||
@@ -128,14 +128,14 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
setup_subjects
|
||||
@output_buffer = @gantt.subjects
|
||||
assert_select "div.project-name a", /#{@project.name}/
|
||||
assert_select "div.project-name[style*=left:4px]"
|
||||
assert_select 'div.project-name[style*="left:4px"]'
|
||||
end
|
||||
|
||||
test "#subjects version should be rendered" do
|
||||
setup_subjects
|
||||
@output_buffer = @gantt.subjects
|
||||
assert_select "div.version-name a", /#{@version.name}/
|
||||
assert_select "div.version-name[style*=left:24px]"
|
||||
assert_select 'div.version-name[style*="left:24px"]'
|
||||
end
|
||||
|
||||
test "#subjects version without assigned issues should not be rendered" do
|
||||
@@ -152,7 +152,7 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
setup_subjects
|
||||
@output_buffer = @gantt.subjects
|
||||
assert_select "div.issue-subject", /#{@issue.subject}/
|
||||
assert_select "div.issue-subject[style*=left:44px]"
|
||||
assert_select 'div.issue-subject[style*="left:44px"]'
|
||||
end
|
||||
|
||||
test "#subjects issue assigned to a shared version of another project should be rendered" do
|
||||
@@ -197,12 +197,12 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
)
|
||||
@output_buffer = @gantt.subjects
|
||||
# parent task 44px
|
||||
assert_select "div.issue-subject[style*=left:44px]", /#{@issue.subject}/
|
||||
assert_select 'div.issue-subject[style*="left:44px"]', /#{@issue.subject}/
|
||||
# children 64px
|
||||
assert_select "div.issue-subject[style*=left:64px]", /child1/
|
||||
assert_select "div.issue-subject[style*=left:64px]", /child2/
|
||||
assert_select 'div.issue-subject[style*="left:64px"]', /child1/
|
||||
assert_select 'div.issue-subject[style*="left:64px"]', /child2/
|
||||
# grandchild 84px
|
||||
assert_select "div.issue-subject[style*=left:84px]", /grandchild/, @output_buffer
|
||||
assert_select 'div.issue-subject[style*="left:84px"]', /grandchild/, @output_buffer
|
||||
end
|
||||
|
||||
test "#lines" do
|
||||
@@ -298,7 +298,7 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
test "#subject should use the indent option to move the div to the right" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.subject('subject', :format => :html, :indent => 40)
|
||||
assert_select "div[style*=left:40]"
|
||||
assert_select 'div[style*="left:40"]'
|
||||
end
|
||||
|
||||
test "#line_for_project" do
|
||||
@@ -332,65 +332,65 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
test "#line todo line should start from the starting point on the left" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_todo[style*=left:28px]", 1
|
||||
assert_select 'div.task_todo[style*="left:28px"]', 1
|
||||
end
|
||||
|
||||
test "#line todo line should be the total width" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_todo[style*=width:58px]", 1
|
||||
assert_select 'div.task_todo[style*="width:58px"]', 1
|
||||
end
|
||||
|
||||
test "#line late line should start from the starting point on the left" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_late[style*=left:28px]", 1
|
||||
assert_select 'div.task_late[style*="left:28px"]', 1
|
||||
end
|
||||
|
||||
test "#line late line should be the total delayed width" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_late[style*=width:30px]", 1
|
||||
assert_select 'div.task_late[style*="width:30px"]', 1
|
||||
end
|
||||
|
||||
test "#line done line should start from the starting point on the left" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_done[style*=left:28px]", 1
|
||||
assert_select 'div.task_done[style*="left:28px"]', 1
|
||||
end
|
||||
|
||||
test "#line done line should be the width for the done ratio" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
# 15 days * 4 px * 30% - 2 px for borders = 16 px
|
||||
assert_select "div.task_done[style*=width:16px]", 1
|
||||
assert_select 'div.task_done[style*="width:16px"]', 1
|
||||
end
|
||||
|
||||
test "#line done line should be the total width for 100% done ratio" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 100, false, 'line', :format => :html, :zoom => 4)
|
||||
# 15 days * 4 px - 2 px for borders = 58 px
|
||||
assert_select "div.task_done[style*=width:58px]", 1
|
||||
assert_select 'div.task_done[style*="width:58px"]', 1
|
||||
end
|
||||
|
||||
test "#line done line should be the total width for 100% done ratio with same start and end dates" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today + 7, today + 7, 100, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_done[style*=width:2px]", 1
|
||||
assert_select 'div.task_done[style*="width:2px"]', 1
|
||||
end
|
||||
|
||||
test "#line done line should not be the total done width if the gantt starts after start date" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 16, today - 2, 30, false, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.task_done[style*=left:0px]", 1
|
||||
assert_select "div.task_done[style*=width:8px]", 1
|
||||
assert_select 'div.task_done[style*="left:0px"]', 1
|
||||
assert_select 'div.task_done[style*="width:8px"]', 1
|
||||
end
|
||||
|
||||
test "#line starting marker should appear at the start date" do
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, true, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.starting", 1
|
||||
assert_select "div.starting[style*=left:28px]", 1
|
||||
assert_select 'div.starting[style*="left:28px"]', 1
|
||||
end
|
||||
|
||||
test "#line starting marker should not appear if the start date is before gantt start date" do
|
||||
@@ -403,7 +403,7 @@ class Redmine::Helpers::GanttHelperTest < ActionView::TestCase
|
||||
create_gantt
|
||||
@output_buffer = @gantt.line(today - 7, today + 7, 30, true, 'line', :format => :html, :zoom => 4)
|
||||
assert_select "div.ending", 1
|
||||
assert_select "div.ending[style*=left:88px]", 1
|
||||
assert_select 'div.ending[style*="left:88px"]', 1
|
||||
end
|
||||
|
||||
test "#line ending marker should not appear if the end date is before gantt start date" do
|
||||
|
||||
@@ -51,14 +51,14 @@ class Redmine::MenuManager::MenuHelperTest < ActionView::TestCase
|
||||
node = Redmine::MenuManager::MenuItem.new(:testing, :issues_path)
|
||||
@output_buffer = render_menu_node(node, nil)
|
||||
|
||||
assert_select "a[href=/issues]", "Testing"
|
||||
assert_select 'a[href="/issues"]', "Testing"
|
||||
end
|
||||
|
||||
def test_render_menu_node_with_symbol_as_url_and_project
|
||||
node = Redmine::MenuManager::MenuItem.new(:testing, :project_issues_path)
|
||||
@output_buffer = render_menu_node(node, Project.find(1))
|
||||
|
||||
assert_select "a[href=/projects/ecookbook/issues]", "Testing"
|
||||
assert_select 'a[href="/projects/ecookbook/issues"]', "Testing"
|
||||
end
|
||||
|
||||
def test_render_menu_node_with_nested_items
|
||||
|
||||
@@ -19,7 +19,7 @@ require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class MailerTest < ActiveSupport::TestCase
|
||||
include Redmine::I18n
|
||||
include ActionDispatch::Assertions::SelectorAssertions
|
||||
include Rails::Dom::Testing::Assertions
|
||||
fixtures :projects, :enabled_modules, :issues, :users, :email_addresses, :members,
|
||||
:member_roles, :roles, :documents, :attachments, :news,
|
||||
:tokens, :journals, :journal_details, :changesets,
|
||||
@@ -61,11 +61,14 @@ class MailerTest < ActiveSupport::TestCase
|
||||
# link to a changeset
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'https://mydomain.foo/projects/ecookbook/repository/revisions/2',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
:text => 'r2'
|
||||
# link to a description diff
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'https://mydomain.foo/journals/diff/3?detail_id=4',
|
||||
assert_select 'a[href^=?][title=?]',
|
||||
# should be https://mydomain.foo/journals/diff/3?detail_id=4
|
||||
# but the Rails 4.2 DOM assertion doesn't handle the ? in the
|
||||
# attribute value
|
||||
'https://mydomain.foo/journals/diff/3',
|
||||
'View differences',
|
||||
:text => 'diff'
|
||||
# link to an attachment
|
||||
@@ -100,11 +103,14 @@ class MailerTest < ActiveSupport::TestCase
|
||||
# link to a changeset
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
:text => 'r2'
|
||||
# link to a description diff
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'http://mydomain.foo/rdm/journals/diff/3?detail_id=4',
|
||||
assert_select 'a[href^=?][title=?]',
|
||||
# should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
|
||||
# but the Rails 4.2 DOM assertion doesn't handle the ? in the
|
||||
# attribute value
|
||||
'http://mydomain.foo/rdm/journals/diff/3',
|
||||
'View differences',
|
||||
:text => 'diff'
|
||||
# link to an attachment
|
||||
@@ -150,11 +156,14 @@ class MailerTest < ActiveSupport::TestCase
|
||||
# link to a changeset
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
'This commit fixes #1, #2 and references #1 & #3',
|
||||
:text => 'r2'
|
||||
# link to a description diff
|
||||
assert_select 'a[href=?][title=?]',
|
||||
'http://mydomain.foo/rdm/journals/diff/3?detail_id=4',
|
||||
assert_select 'a[href^=?][title=?]',
|
||||
# should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
|
||||
# but the Rails 4.2 DOM assertion doesn't handle the ? in the
|
||||
# attribute value
|
||||
'http://mydomain.foo/rdm/journals/diff/3',
|
||||
'View differences',
|
||||
:text => 'diff'
|
||||
# link to an attachment
|
||||
@@ -762,10 +771,6 @@ class MailerTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_mail_should_return_a_mail_message
|
||||
assert_kind_of ::Mail::Message, Mailer.test_email(User.find(1))
|
||||
end
|
||||
|
||||
def test_with_synched_deliveries_should_yield_with_synced_deliveries
|
||||
ActionMailer::Base.delivery_method = :async_smtp
|
||||
ActionMailer::Base.async_smtp_settings = {:foo => 'bar'}
|
||||
|
||||
Reference in New Issue
Block a user