1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
|
# frozen_string_literal: true
module ObjectHelpers
def User.generate!(attributes={})
@generated_user_login ||= +'user0'
@generated_user_login.succ!
user = User.new(attributes)
user.login = @generated_user_login.dup if user.login.blank?
user.mail = "#{@generated_user_login}@example.com" if user.mail.blank?
user.firstname = "Bob" if user.firstname.blank?
user.lastname = "Doe" if user.lastname.blank?
yield user if block_given?
user.save!
user
end
def User.add_to_project(user, project, roles=nil)
roles = Role.find(1) if roles.nil?
roles = [roles] if roles.is_a?(Role)
Member.create!(:principal => user, :project => project, :roles => roles)
end
def Group.generate!(attributes={})
@generated_group_name ||= +'Group 0'
@generated_group_name.succ!
group = Group.new(attributes)
group.name = @generated_group_name.dup if group.name.blank?
yield group if block_given?
group.save!
group
end
def Project.generate!(attributes={})
@generated_project_identifier ||= +'project-0000'
@generated_project_identifier.succ!
project = Project.new(attributes)
project.name = @generated_project_identifier.dup if project.name.blank?
project.identifier = @generated_project_identifier.dup if project.identifier.blank?
yield project if block_given?
project.save!
project
end
def Project.generate_with_parent!(*args)
attributes = args.last.is_a?(Hash) ? args.pop : {}
parent = args.size > 0 ? args.first : Project.generate!
project = Project.generate!(attributes) do |p|
p.parent = parent
end
parent.reload if parent
project
end
def IssueStatus.generate!(attributes={})
@generated_status_name ||= +'Status 0'
@generated_status_name.succ!
status = IssueStatus.new(attributes)
status.name = @generated_status_name.dup if status.name.blank?
yield status if block_given?
status.save!
status
end
def Tracker.generate(attributes={})
@generated_tracker_name ||= +'Tracker 0'
@generated_tracker_name.succ!
tracker = Tracker.new(attributes)
tracker.name = @generated_tracker_name.dup if tracker.name.blank?
tracker.default_status ||= IssueStatus.order(:position).first || IssueStatus.generate!
yield tracker if block_given?
tracker
end
def Tracker.generate!(attributes={}, &block)
tracker = Tracker.generate(attributes, &block)
tracker.save!
tracker
end
def Role.generate!(attributes={})
@generated_role_name ||= +'Role 0'
@generated_role_name.succ!
role = Role.new(attributes)
role.name = @generated_role_name.dup if role.name.blank?
yield role if block_given?
role.save!
role
end
# Generates an unsaved Issue
# Doesn't send notifications by default, use :notify => true to send them
def Issue.generate(attributes={})
issue = Issue.new(attributes.reverse_merge(:notify => false))
issue.project ||= Project.find(1)
issue.tracker ||= issue.project.trackers.first
issue.subject = 'Generated' if issue.subject.blank?
issue.author ||= (User.current || User.find(2))
yield issue if block_given?
issue
end
# Generates a saved Issue
# Doesn't send notifications by default, use :notify => true to send them
def Issue.generate!(attributes={}, &block)
issue = Issue.generate(attributes, &block)
issue.save!
issue.reload
end
# Generates an issue with 2 children and a grandchild
def Issue.generate_with_descendants!(attributes={})
issue = Issue.generate!(attributes)
child = Issue.generate!(:project => issue.project, :subject => 'Child1', :parent_issue_id => issue.id)
Issue.generate!(:project => issue.project, :subject => 'Child2', :parent_issue_id => issue.id)
Issue.generate!(:project => issue.project, :subject => 'Child11', :parent_issue_id => child.id)
issue.reload
end
def Issue.generate_with_child!(attributes={})
issue = Issue.generate!(attributes)
Issue.generate!(:parent_issue_id => issue.id)
issue.reload
end
def Journal.generate!(attributes={})
journal = Journal.new(attributes)
journal.user ||= User.first
journal.journalized ||= Issue.first
yield journal if block_given?
journal.save!
journal
end
def Version.generate!(attributes={})
@generated_version_name ||= +'Version 0'
@generated_version_name.succ!
version = Version.new(attributes)
version.name = @generated_version_name.dup if version.name.blank?
version.project ||= Project.find(1)
yield version if block_given?
version.save!
version
end
def TimeEntry.generate(attributes={})
entry = TimeEntry.new(attributes)
entry.user ||= User.find(2)
entry.author ||= entry.user
entry.issue ||= Issue.find(1) unless entry.project
entry.project ||= entry.issue.project
entry.activity ||= TimeEntryActivity.first
entry.spent_on ||= Date.today
entry.hours ||= 1.0
entry
end
def TimeEntry.generate!(attributes={}, &block)
entry = TimeEntry.generate(attributes, &block)
entry.save!
entry
end
def AuthSource.generate!(attributes={})
@generated_auth_source_name ||= +'Auth 0'
@generated_auth_source_name.succ!
source = AuthSource.new(attributes)
source.name = @generated_auth_source_name.dup if source.name.blank?
yield source if block_given?
source.save!
source
end
def Board.generate!(attributes={})
@generated_board_name ||= +'Forum 0'
@generated_board_name.succ!
board = Board.new(attributes)
board.name = @generated_board_name.dup if board.name.blank?
board.description = @generated_board_name.dup if board.description.blank?
yield board if block_given?
board.save!
board
end
def Attachment.generate!(attributes={})
@generated_filename ||= +'testfile0'
@generated_filename.succ!
attributes = attributes.dup
attachment = Attachment.new(attributes)
attachment.container ||= Issue.find(1)
attachment.author ||= User.find(2)
attachment.filename = @generated_filename.dup if attachment.filename.blank?
attachment.save!
attachment
end
def CustomField.generate!(attributes={})
@generated_custom_field_name ||= +'Custom field 0'
@generated_custom_field_name.succ!
field = new(attributes)
field.name = @generated_custom_field_name.dup if field.name.blank?
field.field_format = 'string' if field.field_format.blank?
yield field if block_given?
field.save!
field
end
def IssueCustomField.generate!(attributes={})
super do |field|
field.is_for_all = true unless attributes.key?(:is_for_all)
field.tracker_ids = Tracker.all.ids unless attributes.key?(:tracker_ids) || attributes.key?(:trackers)
yield field if block_given?
end
end
def Changeset.generate!(attributes={})
@generated_changeset_rev ||= +'123456'
@generated_changeset_rev.succ!
changeset = new(attributes)
changeset.repository ||= Project.find(1).repository
changeset.revision ||= @generated_changeset_rev.dup
changeset.committed_on ||= Time.now
yield changeset if block_given?
changeset.save!
changeset
end
def Query.generate!(attributes={})
query = new(attributes)
query.name = "Generated query" if query.name.blank?
query.user ||= User.find(1)
query.save!
query
end
def Document.generate!(attributes={})
document = new(attributes)
document.title = "Generated document" if document.title.blank?
document.category ||= DocumentCategory.find(1)
document.save!
document
end
def generate_import(fixture_name='import_issues.csv')
import = IssueImport.new
import.user_id = 2
import.file = uploaded_test_file(fixture_name, 'text/csv')
import.save!
import
end
def generate_import_with_mapping(fixture_name='import_issues.csv')
import = generate_import(fixture_name)
import.settings = {
'separator' => ";", 'wrapper' => '"', 'encoding' => "UTF-8",
'mapping' => {'project_id' => '1', 'tracker' => '13', 'subject' => '1'}
}
import.save!
import
end
def generate_time_entry_import(fixture_name='import_time_entries.csv')
import = TimeEntryImport.new
import.user_id = 2
import.file = uploaded_test_file(fixture_name, 'text/csv')
import.save!
import
end
end
module TrackerObjectHelpers
def generate_transitions!(arg)
if arg.delete(:clear)
WorkflowTransition.where(:tracker_id => id).delete_all
end
role_id = arg.delete(:role_id) || 1
arg.each do |old_status_id, new_status_ids|
Array.wrap(new_status_ids).each do |new_status_id|
WorkflowTransition.create!(
:tracker => self,
:role_id => role_id,
:old_status_id => old_status_id,
:new_status_id => new_status_id
)
end
end
end
end
Tracker.send :include, TrackerObjectHelpers
module IssueObjectHelpers
def close!
self.status = IssueStatus.where(:is_closed => true).first
save!
end
def generate_child!(attributes={})
Issue.generate!(attributes.merge(:parent_issue_id => self.id))
end
end
Issue.send :include, IssueObjectHelpers
|