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

migrate_to_ghost_user_service_spec.rb « users « services « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 073ebaae5b07345a8504e7bd6963b69992a93222 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Users::MigrateToGhostUserService do
  let!(:user)        { create(:user) }
  let!(:project)     { create(:project, :repository) }
  let(:service)      { described_class.new(user) }
  let(:always_ghost) { false }

  context "migrating a user's associated records to the ghost user" do
    context 'issues' do
      context 'deleted user is present as both author and edited_user' do
        include_examples "migrating a deleted user's associated records to the ghost user", Issue, [:author, :last_edited_by] do
          let(:created_record) do
            create(:issue, project: project, author: user, last_edited_by: user)
          end
        end
      end

      context 'deleted user is present only as edited_user' do
        include_examples "migrating a deleted user's associated records to the ghost user", Issue, [:last_edited_by] do
          let(:created_record) { create(:issue, project: project, author: create(:user), last_edited_by: user) }
        end
      end
    end

    context 'merge requests' do
      context 'deleted user is present as both author and merge_user' do
        include_examples "migrating a deleted user's associated records to the ghost user", MergeRequest, [:author, :merge_user] do
          let(:created_record) { create(:merge_request, source_project: project, author: user, merge_user: user, target_branch: "first") }
        end
      end

      context 'deleted user is present only as both merge_user' do
        include_examples "migrating a deleted user's associated records to the ghost user", MergeRequest, [:merge_user] do
          let(:created_record) { create(:merge_request, source_project: project, merge_user: user, target_branch: "first") }
        end
      end
    end

    context 'notes' do
      include_examples "migrating a deleted user's associated records to the ghost user", Note do
        let(:created_record) { create(:note, project: project, author: user) }
      end
    end

    context 'abuse reports' do
      include_examples "migrating a deleted user's associated records to the ghost user", AbuseReport do
        let(:created_record) { create(:abuse_report, reporter: user, user: create(:user)) }
      end
    end

    context 'award emoji' do
      include_examples "migrating a deleted user's associated records to the ghost user", AwardEmoji, [:user] do
        let(:created_record) { create(:award_emoji, user: user) }

        context "when the awardable already has an award emoji of the same name assigned to the ghost user" do
          let(:awardable) { create(:issue) }
          let!(:existing_award_emoji) { create(:award_emoji, user: User.ghost, name: "thumbsup", awardable: awardable) }
          let!(:award_emoji) { create(:award_emoji, user: user, name: "thumbsup", awardable: awardable) }

          it "migrates the award emoji regardless" do
            service.execute

            migrated_record = AwardEmoji.find_by_id(award_emoji.id)

            expect(migrated_record.user).to eq(User.ghost)
          end

          it "does not leave the migrated award emoji in an invalid state" do
            service.execute

            migrated_record = AwardEmoji.find_by_id(award_emoji.id)

            expect(migrated_record).to be_valid
          end
        end
      end
    end

    context 'snippets' do
      include_examples "migrating a deleted user's associated records to the ghost user", Snippet do
        let(:created_record) { create(:snippet, project: project, author: user) }
      end
    end

    context 'reviews' do
      let!(:user)   { create(:user) }
      let(:service) { described_class.new(user) }

      include_examples "migrating a deleted user's associated records to the ghost user", Review, [:author] do
        let(:created_record) { create(:review, author: user) }
      end
    end
  end
end