To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / integration / issues_test.rb @ 442:753f1380d6bc

History | View | Annotate | Download (6.82 KB)

1 441:cbce1fd3b1b7 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3 0:513646585e45 Chris
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17
18 119:8661b858af72 Chris
require File.expand_path('../../test_helper', __FILE__)
19 0:513646585e45 Chris
20
class IssuesTest < ActionController::IntegrationTest
21
  fixtures :projects,
22
           :users,
23
           :roles,
24
           :members,
25
           :trackers,
26
           :projects_trackers,
27
           :enabled_modules,
28
           :issue_statuses,
29
           :issues,
30
           :enumerations,
31
           :custom_fields,
32
           :custom_values,
33
           :custom_fields_trackers
34
35
  # create an issue
36
  def test_add_issue
37
    log_user('jsmith', 'jsmith')
38
    get 'projects/1/issues/new', :tracker_id => '1'
39
    assert_response :success
40
    assert_template 'issues/new'
41
42
    post 'projects/1/issues', :tracker_id => "1",
43
                                 :issue => { :start_date => "2006-12-26",
44
                                             :priority_id => "4",
45
                                             :subject => "new test issue",
46
                                             :category_id => "",
47
                                             :description => "new issue",
48
                                             :done_ratio => "0",
49
                                             :due_date => "",
50
                                             :assigned_to_id => "" },
51
                                 :custom_fields => {'2' => 'Value for field 2'}
52
    # find created issue
53
    issue = Issue.find_by_subject("new test issue")
54
    assert_kind_of Issue, issue
55
56
    # check redirection
57
    assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
58
    follow_redirect!
59
    assert_equal issue, assigns(:issue)
60
61
    # check issue attributes
62
    assert_equal 'jsmith', issue.author.login
63
    assert_equal 1, issue.project.id
64
    assert_equal 1, issue.status.id
65
  end
66
67
  # add then remove 2 attachments to an issue
68 441:cbce1fd3b1b7 Chris
  def test_issue_attachments
69 0:513646585e45 Chris
    log_user('jsmith', 'jsmith')
70
    set_tmp_attachments_directory
71
72 22:40f7cfd4df19 chris
    put 'issues/1',
73 0:513646585e45 Chris
         :notes => 'Some notes',
74
         :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'This is an attachment'}}
75 37:94944d00e43c chris
    assert_redirected_to "/issues/1"
76 0:513646585e45 Chris
77
    # make sure attachment was saved
78
    attachment = Issue.find(1).attachments.find_by_filename("testfile.txt")
79
    assert_kind_of Attachment, attachment
80
    assert_equal Issue.find(1), attachment.container
81
    assert_equal 'This is an attachment', attachment.description
82
    # verify the size of the attachment stored in db
83
    #assert_equal file_data_1.length, attachment.filesize
84
    # verify that the attachment was written to disk
85
    assert File.exist?(attachment.diskfile)
86
87
    # remove the attachments
88
    Issue.find(1).attachments.each(&:destroy)
89
    assert_equal 0, Issue.find(1).attachments.length
90
  end
91
92
  def test_other_formats_links_on_get_index
93
    get '/projects/ecookbook/issues'
94
95
    %w(Atom PDF CSV).each do |format|
96
      assert_tag :a, :content => format,
97
                     :attributes => { :href => "/projects/ecookbook/issues.#{format.downcase}",
98
                                      :rel => 'nofollow' }
99
    end
100
  end
101
102
  def test_other_formats_links_on_post_index_without_project_id_in_url
103
    post '/issues', :project_id => 'ecookbook'
104
105
    %w(Atom PDF CSV).each do |format|
106
      assert_tag :a, :content => format,
107
                     :attributes => { :href => "/projects/ecookbook/issues.#{format.downcase}",
108
                                      :rel => 'nofollow' }
109
    end
110
  end
111
112
  def test_pagination_links_on_get_index
113
    Setting.per_page_options = '2'
114
    get '/projects/ecookbook/issues'
115
116
    assert_tag :a, :content => '2',
117
                   :attributes => { :href => '/projects/ecookbook/issues?page=2' }
118
119
  end
120
121
  def test_pagination_links_on_post_index_without_project_id_in_url
122
    Setting.per_page_options = '2'
123
    post '/issues', :project_id => 'ecookbook'
124
125
    assert_tag :a, :content => '2',
126
                   :attributes => { :href => '/projects/ecookbook/issues?page=2' }
127
128
  end
129 441:cbce1fd3b1b7 Chris
130
  def test_issue_with_user_custom_field
131
    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true, :trackers => Tracker.all)
132
    Role.anonymous.add_permission! :add_issues, :edit_issues
133
    users = Project.find(1).users
134
    tester = users.first
135
136
    # Issue form
137
    get '/projects/ecookbook/issues/new'
138
    assert_response :success
139
    assert_tag :select,
140
      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
141
      :children => {:count => (users.size + 1)}, # +1 for blank value
142
      :child => {
143
        :tag => 'option',
144
        :attributes => {:value => tester.id.to_s},
145
        :content => tester.name
146
      }
147
148
    # Create issue
149
    assert_difference 'Issue.count' do
150
      post '/projects/ecookbook/issues',
151
        :issue => {
152
          :tracker_id => '1',
153
          :priority_id => '4',
154
          :subject => 'Issue with user custom field',
155
          :custom_field_values => {@field.id.to_s => users.first.id.to_s}
156
        }
157
    end
158
    issue = Issue.first(:order => 'id DESC')
159
    assert_response 302
160
161
    # Issue view
162
    follow_redirect!
163
    assert_tag :th,
164
      :content => /Tester/,
165
      :sibling => {
166
        :tag => 'td',
167
        :content => tester.name
168
      }
169
    assert_tag :select,
170
      :attributes => {:name => "issue[custom_field_values][#{@field.id}]"},
171
      :children => {:count => (users.size + 1)}, # +1 for blank value
172
      :child => {
173
        :tag => 'option',
174
        :attributes => {:value => tester.id.to_s, :selected => 'selected'},
175
        :content => tester.name
176
      }
177
178
    # Update issue
179
    new_tester = users[1]
180
    assert_difference 'Journal.count' do
181
      put "/issues/#{issue.id}",
182
        :notes => 'Updating custom field',
183
        :issue => {
184
          :custom_field_values => {@field.id.to_s => new_tester.id.to_s}
185
        }
186
    end
187
    assert_response 302
188
189
    # Issue view
190
    follow_redirect!
191
    assert_tag :content => 'Tester',
192
      :ancestor => {:tag => 'ul', :attributes => {:class => /details/}},
193
      :sibling => {
194
        :content => tester.name,
195
        :sibling => {
196
          :content => new_tester.name
197
        }
198
      }
199
  end
200 0:513646585e45 Chris
end