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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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.save!
  135. entry
  136. end
  137. def AuthSource.generate!(attributes={})
  138. @generated_auth_source_name ||= 'Auth 0'
  139. @generated_auth_source_name.succ!
  140. source = AuthSource.new(attributes)
  141. source.name = @generated_auth_source_name.dup if source.name.blank?
  142. yield source if block_given?
  143. source.save!
  144. source
  145. end
  146. def Board.generate!(attributes={})
  147. @generated_board_name ||= 'Forum 0'
  148. @generated_board_name.succ!
  149. board = Board.new(attributes)
  150. board.name = @generated_board_name.dup if board.name.blank?
  151. board.description = @generated_board_name.dup if board.description.blank?
  152. yield board if block_given?
  153. board.save!
  154. board
  155. end
  156. def Attachment.generate!(attributes={})
  157. @generated_filename ||= 'testfile0'
  158. @generated_filename.succ!
  159. attributes = attributes.dup
  160. attachment = Attachment.new(attributes)
  161. attachment.container ||= Issue.find(1)
  162. attachment.author ||= User.find(2)
  163. attachment.filename = @generated_filename.dup if attachment.filename.blank?
  164. attachment.save!
  165. attachment
  166. end
  167. def CustomField.generate!(attributes={})
  168. @generated_custom_field_name ||= 'Custom field 0'
  169. @generated_custom_field_name.succ!
  170. field = new(attributes)
  171. field.name = @generated_custom_field_name.dup if field.name.blank?
  172. field.field_format = 'string' if field.field_format.blank?
  173. yield field if block_given?
  174. field.save!
  175. field
  176. end
  177. def IssueCustomField.generate!(attributes={})
  178. super do |field|
  179. field.is_for_all = true unless attributes.key?(:is_for_all)
  180. field.tracker_ids = Tracker.all.ids unless attributes.key?(:tracker_ids) || attributes.key?(:trackers)
  181. end
  182. end
  183. def Changeset.generate!(attributes={})
  184. @generated_changeset_rev ||= '123456'
  185. @generated_changeset_rev.succ!
  186. changeset = new(attributes)
  187. changeset.repository ||= Project.find(1).repository
  188. changeset.revision ||= @generated_changeset_rev
  189. changeset.committed_on ||= Time.now
  190. yield changeset if block_given?
  191. changeset.save!
  192. changeset
  193. end
  194. def Query.generate!(attributes={})
  195. query = new(attributes)
  196. query.name = "Generated query" if query.name.blank?
  197. query.user ||= User.find(1)
  198. query.save!
  199. query
  200. end
  201. def generate_import(fixture_name='import_issues.csv')
  202. import = IssueImport.new
  203. import.user_id = 2
  204. import.file = uploaded_test_file(fixture_name, 'text/csv')
  205. import.save!
  206. import
  207. end
  208. def generate_import_with_mapping(fixture_name='import_issues.csv')
  209. import = generate_import(fixture_name)
  210. import.settings = {
  211. 'separator' => ";", 'wrapper' => '"', 'encoding' => "UTF-8",
  212. 'mapping' => {'project_id' => '1', 'tracker_id' => '2', 'subject' => '1'}
  213. }
  214. import.save!
  215. import
  216. end
  217. end
  218. module TrackerObjectHelpers
  219. def generate_transitions!(*args)
  220. options = args.last.is_a?(Hash) ? args.pop : {}
  221. if args.size == 1
  222. args << args.first
  223. end
  224. if options[:clear]
  225. WorkflowTransition.where(:tracker_id => id).delete_all
  226. end
  227. args.each_cons(2) do |old_status_id, new_status_id|
  228. WorkflowTransition.create!(
  229. :tracker => self,
  230. :role_id => (options[:role_id] || 1),
  231. :old_status_id => old_status_id,
  232. :new_status_id => new_status_id
  233. )
  234. end
  235. end
  236. end
  237. Tracker.send :include, TrackerObjectHelpers
  238. module IssueObjectHelpers
  239. def close!
  240. self.status = IssueStatus.where(:is_closed => true).first
  241. save!
  242. end
  243. def generate_child!(attributes={})
  244. Issue.generate!(attributes.merge(:parent_issue_id => self.id))
  245. end
  246. end
  247. Issue.send :include, IssueObjectHelpers