You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

object_helpers.rb 8.7KB

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