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 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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!(parent, attributes={})
  39. project = Project.generate!(attributes) do |p|
  40. p.parent = parent
  41. end
  42. parent.reload if parent
  43. project
  44. end
  45. def IssueStatus.generate!(attributes={})
  46. @generated_status_name ||= 'Status 0'
  47. @generated_status_name.succ!
  48. status = IssueStatus.new(attributes)
  49. status.name = @generated_status_name.dup if status.name.blank?
  50. yield status if block_given?
  51. status.save!
  52. status
  53. end
  54. def Tracker.generate!(attributes={})
  55. @generated_tracker_name ||= 'Tracker 0'
  56. @generated_tracker_name.succ!
  57. tracker = Tracker.new(attributes)
  58. tracker.name = @generated_tracker_name.dup if tracker.name.blank?
  59. tracker.default_status ||= IssueStatus.order('position').first || IssueStatus.generate!
  60. yield tracker if block_given?
  61. tracker.save!
  62. tracker
  63. end
  64. def Role.generate!(attributes={})
  65. @generated_role_name ||= 'Role 0'
  66. @generated_role_name.succ!
  67. role = Role.new(attributes)
  68. role.name = @generated_role_name.dup if role.name.blank?
  69. yield role if block_given?
  70. role.save!
  71. role
  72. end
  73. # Generates an unsaved Issue
  74. def Issue.generate(attributes={})
  75. issue = Issue.new(attributes)
  76. issue.project ||= Project.find(1)
  77. issue.tracker ||= issue.project.trackers.first
  78. issue.subject = 'Generated' if issue.subject.blank?
  79. issue.author ||= User.find(2)
  80. yield issue if block_given?
  81. issue
  82. end
  83. # Generates a saved Issue
  84. def Issue.generate!(attributes={}, &block)
  85. issue = Issue.generate(attributes, &block)
  86. issue.save!
  87. issue
  88. end
  89. # Generates an issue with 2 children and a grandchild
  90. def Issue.generate_with_descendants!(attributes={})
  91. issue = Issue.generate!(attributes)
  92. child = Issue.generate!(:project => issue.project, :subject => 'Child1', :parent_issue_id => issue.id)
  93. Issue.generate!(:project => issue.project, :subject => 'Child2', :parent_issue_id => issue.id)
  94. Issue.generate!(:project => issue.project, :subject => 'Child11', :parent_issue_id => child.id)
  95. issue.reload
  96. end
  97. def Issue.generate_with_child!(attributes={})
  98. issue = Issue.generate!(attributes)
  99. Issue.generate!(:parent_issue_id => issue.id)
  100. issue.reload
  101. end
  102. def Journal.generate!(attributes={})
  103. journal = Journal.new(attributes)
  104. journal.user ||= User.first
  105. journal.journalized ||= Issue.first
  106. yield journal if block_given?
  107. journal.save!
  108. journal
  109. end
  110. def Version.generate!(attributes={})
  111. @generated_version_name ||= 'Version 0'
  112. @generated_version_name.succ!
  113. version = Version.new(attributes)
  114. version.name = @generated_version_name.dup if version.name.blank?
  115. version.project ||= Project.find(1)
  116. yield version if block_given?
  117. version.save!
  118. version
  119. end
  120. def TimeEntry.generate!(attributes={})
  121. entry = TimeEntry.new(attributes)
  122. entry.user ||= User.find(2)
  123. entry.issue ||= Issue.find(1) unless entry.project
  124. entry.project ||= entry.issue.project
  125. entry.activity ||= TimeEntryActivity.first
  126. entry.spent_on ||= Date.today
  127. entry.hours ||= 1.0
  128. entry.save!
  129. entry
  130. end
  131. def AuthSource.generate!(attributes={})
  132. @generated_auth_source_name ||= 'Auth 0'
  133. @generated_auth_source_name.succ!
  134. source = AuthSource.new(attributes)
  135. source.name = @generated_auth_source_name.dup if source.name.blank?
  136. yield source if block_given?
  137. source.save!
  138. source
  139. end
  140. def Board.generate!(attributes={})
  141. @generated_board_name ||= 'Forum 0'
  142. @generated_board_name.succ!
  143. board = Board.new(attributes)
  144. board.name = @generated_board_name.dup if board.name.blank?
  145. board.description = @generated_board_name.dup if board.description.blank?
  146. yield board if block_given?
  147. board.save!
  148. board
  149. end
  150. def Attachment.generate!(attributes={})
  151. @generated_filename ||= 'testfile0'
  152. @generated_filename.succ!
  153. attributes = attributes.dup
  154. attachment = Attachment.new(attributes)
  155. attachment.container ||= Issue.find(1)
  156. attachment.author ||= User.find(2)
  157. attachment.filename = @generated_filename.dup if attachment.filename.blank?
  158. attachment.save!
  159. attachment
  160. end
  161. def CustomField.generate!(attributes={})
  162. @generated_custom_field_name ||= 'Custom field 0'
  163. @generated_custom_field_name.succ!
  164. field = new(attributes)
  165. field.name = @generated_custom_field_name.dup if field.name.blank?
  166. field.field_format = 'string' if field.field_format.blank?
  167. yield field if block_given?
  168. field.save!
  169. field
  170. end
  171. def Changeset.generate!(attributes={})
  172. @generated_changeset_rev ||= '123456'
  173. @generated_changeset_rev.succ!
  174. changeset = new(attributes)
  175. changeset.repository ||= Project.find(1).repository
  176. changeset.revision ||= @generated_changeset_rev
  177. changeset.committed_on ||= Time.now
  178. yield changeset if block_given?
  179. changeset.save!
  180. changeset
  181. end
  182. def Query.generate!(attributes={})
  183. query = new(attributes)
  184. query.name = "Generated query" if query.name.blank?
  185. query.user ||= User.find(1)
  186. query.save!
  187. query
  188. end
  189. def generate_import(fixture_name='import_issues.csv')
  190. import = IssueImport.new
  191. import.user_id = 2
  192. import.file = uploaded_test_file(fixture_name, 'text/csv')
  193. import.save!
  194. import
  195. end
  196. def generate_import_with_mapping(fixture_name='import_issues.csv')
  197. import = generate_import(fixture_name)
  198. import.settings = {
  199. 'separator' => ";", 'wrapper' => '"', 'encoding' => "UTF-8",
  200. 'mapping' => {'project_id' => '1', 'tracker_id' => '2', 'subject' => '1'}
  201. }
  202. import.save!
  203. import
  204. end
  205. end
  206. module TrackerObjectHelpers
  207. def generate_transitions!(*args)
  208. options = args.last.is_a?(Hash) ? args.pop : {}
  209. if args.size == 1
  210. args << args.first
  211. end
  212. if options[:clear]
  213. WorkflowTransition.where(:tracker_id => id).delete_all
  214. end
  215. args.each_cons(2) do |old_status_id, new_status_id|
  216. WorkflowTransition.create!(
  217. :tracker => self,
  218. :role_id => (options[:role_id] || 1),
  219. :old_status_id => old_status_id,
  220. :new_status_id => new_status_id
  221. )
  222. end
  223. end
  224. end
  225. Tracker.send :include, TrackerObjectHelpers
  226. module IssueObjectHelpers
  227. def close!
  228. self.status = IssueStatus.where(:is_closed => true).first
  229. save!
  230. end
  231. def generate_child!(attributes={})
  232. Issue.generate!(attributes.merge(:parent_issue_id => self.id))
  233. end
  234. end
  235. Issue.send :include, IssueObjectHelpers