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.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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. def Issue.generate(attributes={})
  81. issue = Issue.new(attributes)
  82. issue.project ||= Project.find(1)
  83. issue.tracker ||= issue.project.trackers.first
  84. issue.subject = 'Generated' if issue.subject.blank?
  85. issue.author ||= User.find(2)
  86. yield issue if block_given?
  87. issue
  88. end
  89. # Generates a saved Issue
  90. def Issue.generate!(attributes={}, &block)
  91. issue = Issue.generate(attributes, &block)
  92. issue.save!
  93. issue
  94. end
  95. # Generates an issue with 2 children and a grandchild
  96. def Issue.generate_with_descendants!(attributes={})
  97. issue = Issue.generate!(attributes)
  98. child = Issue.generate!(:project => issue.project, :subject => 'Child1', :parent_issue_id => issue.id)
  99. Issue.generate!(:project => issue.project, :subject => 'Child2', :parent_issue_id => issue.id)
  100. Issue.generate!(:project => issue.project, :subject => 'Child11', :parent_issue_id => child.id)
  101. issue.reload
  102. end
  103. def Issue.generate_with_child!(attributes={})
  104. issue = Issue.generate!(attributes)
  105. Issue.generate!(:parent_issue_id => issue.id)
  106. issue.reload
  107. end
  108. def Journal.generate!(attributes={})
  109. journal = Journal.new(attributes)
  110. journal.user ||= User.first
  111. journal.journalized ||= Issue.first
  112. yield journal if block_given?
  113. journal.save!
  114. journal
  115. end
  116. def Version.generate!(attributes={})
  117. @generated_version_name ||= 'Version 0'
  118. @generated_version_name.succ!
  119. version = Version.new(attributes)
  120. version.name = @generated_version_name.dup if version.name.blank?
  121. version.project ||= Project.find(1)
  122. yield version if block_given?
  123. version.save!
  124. version
  125. end
  126. def TimeEntry.generate(attributes={})
  127. entry = TimeEntry.new(attributes)
  128. entry.user ||= User.find(2)
  129. entry.issue ||= Issue.find(1) unless entry.project
  130. entry.project ||= entry.issue.project
  131. entry.activity ||= TimeEntryActivity.first
  132. entry.spent_on ||= Date.today
  133. entry.hours ||= 1.0
  134. entry
  135. end
  136. def TimeEntry.generate!(attributes={}, &block)
  137. entry = TimeEntry.generate(attributes, &block)
  138. entry.save!
  139. entry
  140. end
  141. def AuthSource.generate!(attributes={})
  142. @generated_auth_source_name ||= 'Auth 0'
  143. @generated_auth_source_name.succ!
  144. source = AuthSource.new(attributes)
  145. source.name = @generated_auth_source_name.dup if source.name.blank?
  146. yield source if block_given?
  147. source.save!
  148. source
  149. end
  150. def Board.generate!(attributes={})
  151. @generated_board_name ||= 'Forum 0'
  152. @generated_board_name.succ!
  153. board = Board.new(attributes)
  154. board.name = @generated_board_name.dup if board.name.blank?
  155. board.description = @generated_board_name.dup if board.description.blank?
  156. yield board if block_given?
  157. board.save!
  158. board
  159. end
  160. def Attachment.generate!(attributes={})
  161. @generated_filename ||= 'testfile0'
  162. @generated_filename.succ!
  163. attributes = attributes.dup
  164. attachment = Attachment.new(attributes)
  165. attachment.container ||= Issue.find(1)
  166. attachment.author ||= User.find(2)
  167. attachment.filename = @generated_filename.dup if attachment.filename.blank?
  168. attachment.save!
  169. attachment
  170. end
  171. def CustomField.generate!(attributes={})
  172. @generated_custom_field_name ||= 'Custom field 0'
  173. @generated_custom_field_name.succ!
  174. field = new(attributes)
  175. field.name = @generated_custom_field_name.dup if field.name.blank?
  176. field.field_format = 'string' if field.field_format.blank?
  177. yield field if block_given?
  178. field.save!
  179. field
  180. end
  181. def IssueCustomField.generate!(attributes={})
  182. super do |field|
  183. field.is_for_all = true unless attributes.key?(:is_for_all)
  184. field.tracker_ids = Tracker.all.ids unless attributes.key?(:tracker_ids) || attributes.key?(:trackers)
  185. end
  186. end
  187. def Changeset.generate!(attributes={})
  188. @generated_changeset_rev ||= '123456'
  189. @generated_changeset_rev.succ!
  190. changeset = new(attributes)
  191. changeset.repository ||= Project.find(1).repository
  192. changeset.revision ||= @generated_changeset_rev.dup
  193. changeset.committed_on ||= Time.now
  194. yield changeset if block_given?
  195. changeset.save!
  196. changeset
  197. end
  198. def Query.generate!(attributes={})
  199. query = new(attributes)
  200. query.name = "Generated query" if query.name.blank?
  201. query.user ||= User.find(1)
  202. query.save!
  203. query
  204. end
  205. def generate_import(fixture_name='import_issues.csv')
  206. import = IssueImport.new
  207. import.user_id = 2
  208. import.file = uploaded_test_file(fixture_name, 'text/csv')
  209. import.save!
  210. import
  211. end
  212. def generate_import_with_mapping(fixture_name='import_issues.csv')
  213. import = generate_import(fixture_name)
  214. import.settings = {
  215. 'separator' => ";", 'wrapper' => '"', 'encoding' => "UTF-8",
  216. 'mapping' => {'project_id' => '1', 'tracker' => '13', 'subject' => '1'}
  217. }
  218. import.save!
  219. import
  220. end
  221. end
  222. module TrackerObjectHelpers
  223. def generate_transitions!(arg)
  224. if arg.delete(:clear)
  225. WorkflowTransition.where(:tracker_id => id).delete_all
  226. end
  227. role_id = arg.delete(:role_id) || 1
  228. arg.each do |old_status_id, new_status_ids|
  229. Array.wrap(new_status_ids).each do |new_status_id|
  230. WorkflowTransition.create!(
  231. :tracker => self,
  232. :role_id => role_id,
  233. :old_status_id => old_status_id,
  234. :new_status_id => new_status_id
  235. )
  236. end
  237. end
  238. end
  239. end
  240. Tracker.send :include, TrackerObjectHelpers
  241. module IssueObjectHelpers
  242. def close!
  243. self.status = IssueStatus.where(:is_closed => true).first
  244. save!
  245. end
  246. def generate_child!(attributes={})
  247. Issue.generate!(attributes.merge(:parent_issue_id => self.id))
  248. end
  249. end
  250. Issue.send :include, IssueObjectHelpers