diff options
Diffstat (limited to 'lib/quality/seeders/issues.rb')
-rw-r--r-- | lib/quality/seeders/issues.rb | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/lib/quality/seeders/issues.rb b/lib/quality/seeders/issues.rb index fb3d78bc8d2..813ff0bf097 100644 --- a/lib/quality/seeders/issues.rb +++ b/lib/quality/seeders/issues.rb @@ -5,7 +5,7 @@ module Quality module Seeders class Issues DEFAULT_BACKFILL_WEEKS = 52 - DEFAULT_AVERAGE_ISSUES_PER_WEEK = 10 + DEFAULT_AVERAGE_ISSUES_PER_WEEK = 20 attr_reader :project, :user @@ -14,23 +14,27 @@ module Quality end def seed(backfill_weeks: DEFAULT_BACKFILL_WEEKS, average_issues_per_week: DEFAULT_AVERAGE_ISSUES_PER_WEEK) + create_milestones! + create_team_members! + 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 + rand(1..average_issues_per_week).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)), + milestone_id: project.milestones.sample&.id, + assignee_ids: Array(team.pluck(:id).sample(rand(3))), + due_date: rand(10).days.from_now, labels: labels.join(',') - } - params[:closed_at] = params[:created_at] + rand(35).days if params[:state] == 'closed' + }.merge(additional_params) + params[:closed_at] = params[:created_at] + rand(35).days if params[:state] == 'closed' create_result = ::Issues::CreateService.new(container: project, current_user: team.sample, params: params, perform_spam_check: false).execute_without_rate_limiting if create_result.success? @@ -49,6 +53,49 @@ module Quality private + # Overriden on Quality::Seeders::Insights::Issues + def additional_params + {} + end + + def create_team_members! + 3.times do |i| + user = FactoryBot.create( + :user, + name: "I User#{i}", + username: "i-user-#{i}-#{suffix}", + email: "i-user-#{i}@#{suffix}.com" + ) + + # need owner access to allow changing Issue#created_at + project.add_owner(user) + end + + Sidekiq::Worker.skipping_transaction_check do + AuthorizedProjectUpdate::ProjectRecalculateService.new(project).execute + end + + # Refind object toreload ProjectTeam association which is memoized at Project model + @project = Project.find(project.id) + end + + def create_milestones! + 3.times do |i| + params = { + project: project, + title: "Sprint #{i + suffix}", + description: FFaker::Lorem.sentence, + state: [:active, :closed].sample + } + + FactoryBot.create(:milestone, **params) + end + end + + def suffix + @suffix ||= Time.now.to_i + end + 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 |