Welcome to mirror list, hosted at ThFree Co, Russian Federation.

add_merge_request_diff_commits_count_spec.rb « background_migration « gitlab « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1e72b249c19caa0ac5b7c10f0de303f45e1d1f91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::BackgroundMigration::AddMergeRequestDiffCommitsCount do
  let(:namespaces_table) { table(:namespaces) }
  let(:projects_table) { table(:projects) }
  let(:merge_requests_table) { table(:merge_requests) }
  let(:merge_request_diffs_table) { table(:merge_request_diffs) }
  let(:merge_request_diff_commits_table) { table(:merge_request_diff_commits) }

  let(:namespace) { namespaces_table.create!(name: 'gitlab-org', path: 'gitlab-org') }
  let(:project) { projects_table.create!(name: 'gitlab', path: 'gitlab-org/gitlab-ce', namespace_id: namespace.id) }
  let(:merge_request) do
    merge_requests_table.create!(target_project_id: project.id,
                                 target_branch: 'master',
                                 source_project_id: project.id,
                                 source_branch: 'mr name',
                                 title: 'mr name')
  end

  def create_diff!(name, commits: 0)
    mr_diff = merge_request_diffs_table.create!(
      merge_request_id: merge_request.id)

    commits.times do |i|
      merge_request_diff_commits_table.create!(
        merge_request_diff_id: mr_diff.id,
        relative_order: i, sha: i)
    end

    mr_diff
  end

  describe '#perform' do
    it 'migrates diffs that have no commits' do
      diff = create_diff!('with_multiple_commits', commits: 0)

      subject.perform(diff.id, diff.id)

      expect(diff.reload.commits_count).to eq(0)
    end

    it 'skips diffs that have commits_count already set' do
      timestamp = 2.days.ago
      diff = merge_request_diffs_table.create!(
        merge_request_id: merge_request.id,
        commits_count: 0,
        updated_at: timestamp)

      subject.perform(diff.id, diff.id)

      expect(diff.reload.updated_at).to be_within(1.second).of(timestamp)
    end

    it 'migrates multiple diffs to the correct values' do
      diffs = Array.new(3).map.with_index { |_, i| create_diff!(i, commits: 3) }

      subject.perform(diffs.first.id, diffs.last.id)

      diffs.each do |diff|
        expect(diff.reload.commits_count).to eq(3)
      end
    end
  end
end