object_helpers.rb 8.14 KB
Newer Older
1
module ObjectHelpers
jplang's avatar
jplang committed
2 3 4 5
  def User.generate!(attributes={})
    @generated_user_login ||= 'user0'
    @generated_user_login.succ!
    user = User.new(attributes)
jplang's avatar
jplang committed
6
    user.login = @generated_user_login.dup if user.login.blank?
jplang's avatar
jplang committed
7 8 9 10 11 12 13 14
    user.mail = "#{@generated_user_login}@example.com" if user.mail.blank?
    user.firstname = "Bob" if user.firstname.blank?
    user.lastname = "Doe" if user.lastname.blank?
    yield user if block_given?
    user.save!
    user
  end

15 16
  def User.add_to_project(user, project, roles=nil)
    roles = Role.find(1) if roles.nil?
jplang's avatar
jplang committed
17
    roles = [roles] if roles.is_a?(Role)
jplang's avatar
jplang committed
18 19 20
    Member.create!(:principal => user, :project => project, :roles => roles)
  end

jplang's avatar
jplang committed
21 22 23 24
  def Group.generate!(attributes={})
    @generated_group_name ||= 'Group 0'
    @generated_group_name.succ!
    group = Group.new(attributes)
jplang's avatar
jplang committed
25
    group.name = @generated_group_name.dup if group.name.blank?
jplang's avatar
jplang committed
26 27 28 29 30 31 32 33 34
    yield group if block_given?
    group.save!
    group
  end

  def Project.generate!(attributes={})
    @generated_project_identifier ||= 'project-0000'
    @generated_project_identifier.succ!
    project = Project.new(attributes)
jplang's avatar
jplang committed
35 36
    project.name = @generated_project_identifier.dup if project.name.blank?
    project.identifier = @generated_project_identifier.dup if project.identifier.blank?
jplang's avatar
jplang committed
37 38 39 40 41
    yield project if block_given?
    project.save!
    project
  end

42 43 44 45
  def Project.generate_with_parent!(*args)
    attributes = args.last.is_a?(Hash) ? args.pop : {}
    parent = args.size > 0 ? args.first : Project.generate!

46 47 48 49
    project = Project.generate!(attributes) do |p|
      p.parent = parent
    end
    parent.reload if parent
50 51 52
    project
  end

jplang's avatar
jplang committed
53 54 55 56 57 58 59 60 61 62
  def IssueStatus.generate!(attributes={})
    @generated_status_name ||= 'Status 0'
    @generated_status_name.succ!
    status = IssueStatus.new(attributes)
    status.name = @generated_status_name.dup if status.name.blank?
    yield status if block_given?
    status.save!
    status
  end

63
  def Tracker.generate(attributes={})
jplang's avatar
jplang committed
64 65 66
    @generated_tracker_name ||= 'Tracker 0'
    @generated_tracker_name.succ!
    tracker = Tracker.new(attributes)
jplang's avatar
jplang committed
67
    tracker.name = @generated_tracker_name.dup if tracker.name.blank?
jplang's avatar
jplang committed
68
    tracker.default_status ||= IssueStatus.order('position').first || IssueStatus.generate!
jplang's avatar
jplang committed
69
    yield tracker if block_given?
70 71 72 73 74
    tracker
  end

  def Tracker.generate!(attributes={}, &block)
    tracker = Tracker.generate(attributes, &block)
jplang's avatar
jplang committed
75 76 77 78 79 80 81 82
    tracker.save!
    tracker
  end

  def Role.generate!(attributes={})
    @generated_role_name ||= 'Role 0'
    @generated_role_name.succ!
    role = Role.new(attributes)
jplang's avatar
jplang committed
83
    role.name = @generated_role_name.dup if role.name.blank?
jplang's avatar
jplang committed
84 85 86 87 88
    yield role if block_given?
    role.save!
    role
  end

89 90
  # Generates an unsaved Issue
  def Issue.generate(attributes={})
jplang's avatar
jplang committed
91
    issue = Issue.new(attributes)
92 93
    issue.project ||= Project.find(1)
    issue.tracker ||= issue.project.trackers.first
jplang's avatar
jplang committed
94 95 96
    issue.subject = 'Generated' if issue.subject.blank?
    issue.author ||= User.find(2)
    yield issue if block_given?
97 98 99 100 101 102
    issue
  end

  # Generates a saved Issue
  def Issue.generate!(attributes={}, &block)
    issue = Issue.generate(attributes, &block)
jplang's avatar
jplang committed
103 104 105 106
    issue.save!
    issue
  end

107 108 109 110 111 112
  # Generates an issue with 2 children and a grandchild
  def Issue.generate_with_descendants!(attributes={})
    issue = Issue.generate!(attributes)
    child = Issue.generate!(:project => issue.project, :subject => 'Child1', :parent_issue_id => issue.id)
    Issue.generate!(:project => issue.project, :subject => 'Child2', :parent_issue_id => issue.id)
    Issue.generate!(:project => issue.project, :subject => 'Child11', :parent_issue_id => child.id)
113 114 115
    issue.reload
  end

116 117 118 119 120 121
  def Issue.generate_with_child!(attributes={})
    issue = Issue.generate!(attributes)
    Issue.generate!(:parent_issue_id => issue.id)
    issue.reload
  end

jplang's avatar
jplang committed
122 123 124 125 126 127 128 129 130
  def Journal.generate!(attributes={})
    journal = Journal.new(attributes)
    journal.user ||= User.first
    journal.journalized ||= Issue.first
    yield journal if block_given?
    journal.save!
    journal
  end

jplang's avatar
jplang committed
131 132 133 134
  def Version.generate!(attributes={})
    @generated_version_name ||= 'Version 0'
    @generated_version_name.succ!
    version = Version.new(attributes)
jplang's avatar
jplang committed
135
    version.name = @generated_version_name.dup if version.name.blank?
136
    version.project ||= Project.find(1)
jplang's avatar
jplang committed
137 138 139 140 141
    yield version if block_given?
    version.save!
    version
  end

142 143 144
  def TimeEntry.generate!(attributes={})
    entry = TimeEntry.new(attributes)
    entry.user ||= User.find(2)
145
    entry.issue ||= Issue.find(1) unless entry.project
146 147 148
    entry.project ||= entry.issue.project
    entry.activity ||= TimeEntryActivity.first
    entry.spent_on ||= Date.today
149
    entry.hours ||= 1.0
150 151 152 153
    entry.save!
    entry
  end

jplang's avatar
jplang committed
154 155 156 157
  def AuthSource.generate!(attributes={})
    @generated_auth_source_name ||= 'Auth 0'
    @generated_auth_source_name.succ!
    source = AuthSource.new(attributes)
jplang's avatar
jplang committed
158
    source.name = @generated_auth_source_name.dup if source.name.blank?
jplang's avatar
jplang committed
159 160 161
    yield source if block_given?
    source.save!
    source
162
  end
jplang's avatar
jplang committed
163 164 165 166 167

  def Board.generate!(attributes={})
    @generated_board_name ||= 'Forum 0'
    @generated_board_name.succ!
    board = Board.new(attributes)
jplang's avatar
jplang committed
168 169
    board.name = @generated_board_name.dup if board.name.blank?
    board.description = @generated_board_name.dup if board.description.blank?
jplang's avatar
jplang committed
170 171 172 173
    yield board if block_given?
    board.save!
    board
  end
174 175 176 177 178 179 180 181

  def Attachment.generate!(attributes={})
    @generated_filename ||= 'testfile0'
    @generated_filename.succ!
    attributes = attributes.dup
    attachment = Attachment.new(attributes)
    attachment.container ||= Issue.find(1)
    attachment.author ||= User.find(2)
jplang's avatar
jplang committed
182
    attachment.filename = @generated_filename.dup if attachment.filename.blank?
183 184 185
    attachment.save!
    attachment
  end
186 187 188 189 190 191 192 193 194 195 196

  def CustomField.generate!(attributes={})
    @generated_custom_field_name ||= 'Custom field 0'
    @generated_custom_field_name.succ!
    field = new(attributes)
    field.name = @generated_custom_field_name.dup if field.name.blank?
    field.field_format = 'string' if field.field_format.blank?
    yield field if block_given?
    field.save!
    field
  end
197

198 199 200 201 202 203 204
  def IssueCustomField.generate!(attributes={})
    super do |field|
      field.is_for_all = true unless attributes.key?(:is_for_all)
      field.tracker_ids = Tracker.all.ids unless attributes.key?(:tracker_ids) || attributes.key?(:trackers)
    end
  end

205 206 207 208 209 210 211 212 213 214 215
  def Changeset.generate!(attributes={})
    @generated_changeset_rev ||= '123456'
    @generated_changeset_rev.succ!
    changeset = new(attributes)
    changeset.repository ||= Project.find(1).repository
    changeset.revision ||= @generated_changeset_rev
    changeset.committed_on ||= Time.now
    yield changeset if block_given?
    changeset.save!
    changeset
  end
216 217 218 219 220 221 222 223

  def Query.generate!(attributes={})
    query = new(attributes)
    query.name = "Generated query" if query.name.blank?
    query.user ||= User.find(1)
    query.save!
    query
  end
jplang's avatar
jplang committed
224 225 226 227 228 229 230 231 232 233 234 235 236 237

  def generate_import(fixture_name='import_issues.csv')
    import = IssueImport.new
    import.user_id = 2
    import.file = uploaded_test_file(fixture_name, 'text/csv')
    import.save!
    import
  end

  def generate_import_with_mapping(fixture_name='import_issues.csv')
    import = generate_import(fixture_name)

    import.settings = {
      'separator' => ";", 'wrapper' => '"', 'encoding' => "UTF-8",
238
      'mapping' => {'project_id' => '1', 'tracker' => '13', 'subject' => '1'}
jplang's avatar
jplang committed
239 240 241 242
    }
    import.save!
    import
  end
243
end
244

jplang's avatar
jplang committed
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
module TrackerObjectHelpers
  def generate_transitions!(*args)
    options = args.last.is_a?(Hash) ? args.pop : {}
    if args.size == 1
      args << args.first
    end
    if options[:clear]
      WorkflowTransition.where(:tracker_id => id).delete_all
    end
    args.each_cons(2) do |old_status_id, new_status_id|
      WorkflowTransition.create!(
        :tracker => self,
        :role_id => (options[:role_id] || 1),
        :old_status_id => old_status_id,
        :new_status_id => new_status_id
      )
    end
  end
end
Tracker.send :include, TrackerObjectHelpers

266 267 268 269 270 271 272 273 274 275 276
module IssueObjectHelpers
  def close!
    self.status = IssueStatus.where(:is_closed => true).first
    save!
  end

  def generate_child!(attributes={})
    Issue.generate!(attributes.merge(:parent_issue_id => self.id))
  end
end
Issue.send :include, IssueObjectHelpers