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

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