diff options
author | Rémy Coutable <remy@rymai.me> | 2019-04-17 12:23:06 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2019-04-23 11:43:53 +0200 |
commit | 2537b0c1e0619f03799092ed59c51692baa2cf24 (patch) | |
tree | 416f3d4c4bf625dc5215726daac8a7dcd2340d2e /lib/quality/seeders/issues.rb | |
parent | 383642e10056101dc29d1242c2158b9d911386a9 (diff) | |
download | gitlab-ce-2537b0c1e0619f03799092ed59c51692baa2cf24.tar.gz |
Provide a new gitlab:seed:issues taskce-11199-add-a-rake-task-to-seed-insights-data-for-a-given-project
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'lib/quality/seeders/issues.rb')
-rw-r--r-- | lib/quality/seeders/issues.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/quality/seeders/issues.rb b/lib/quality/seeders/issues.rb new file mode 100644 index 00000000000..4c8cb6e97cc --- /dev/null +++ b/lib/quality/seeders/issues.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# rubocop:disable CodeReuse/ActiveRecord +module Quality + module Seeders + class Issues + DEFAULT_BACKFILL_WEEKS = 52 + DEFAULT_AVERAGE_ISSUES_PER_WEEK = 10 + + attr_reader :project, :user + + def initialize(project:) + @project = project + end + + def seed(backfill_weeks: DEFAULT_BACKFILL_WEEKS, average_issues_per_week: DEFAULT_AVERAGE_ISSUES_PER_WEEK) + created_at = backfill_weeks.to_i.weeks.ago + team = project.team.users + created_issues_count = 0 + + loop do + rand(average_issues_per_week * 2).times do + params = { + title: FFaker::Lorem.sentence(6), + description: FFaker::Lorem.sentence, + created_at: created_at + rand(6).days, + state: %w[opened closed].sample, + milestone: project.milestones.sample, + assignee_ids: Array(team.pluck(:id).sample(3)), + labels: labels.join(',') + } + issue = ::Issues::CreateService.new(project, team.sample, params).execute + + if issue.persisted? + created_issues_count += 1 + print '.' # rubocop:disable Rails/Output + end + end + + created_at += 1.week + + break if created_at > Time.now + end + + created_issues_count + end + + private + + def labels + @labels_pool ||= project.labels.limit(rand(3)).pluck(:title).tap do |labels_array| + labels_array.concat(project.group.labels.limit(rand(3)).pluck(:title)) if project.group + end + end + end + end +end +# rubocop:enable CodeReuse/ActiveRecord |