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

member_attributes_transformer_spec.rb « transformers « groups « bulk_imports « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: af99428e0c19b078486e69a86f801beabd7ab7ee (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe BulkImports::Groups::Transformers::MemberAttributesTransformer do
  let_it_be(:user) { create(:user) }
  let_it_be(:secondary_email) { 'secondary@email.com' }
  let_it_be(:group) { create(:group) }
  let_it_be(:bulk_import) { create(:bulk_import, user: user) }
  let_it_be(:entity) { create(:bulk_import_entity, bulk_import: bulk_import, group: group) }
  let_it_be(:tracker) { create(:bulk_import_tracker, entity: entity) }
  let_it_be(:context) { BulkImports::Pipeline::Context.new(tracker) }

  it 'returns nil when receives no data' do
    expect(subject.transform(context, nil)).to eq(nil)
  end

  it 'returns nil when no user is found' do
    expect(subject.transform(context, member_data)).to eq(nil)
    expect(subject.transform(context, member_data(email: 'inexistent@email.com'))).to eq(nil)
  end

  context 'when the user is not confirmed' do
    before do
      user.update!(confirmed_at: nil)
    end

    it 'returns nil even when the primary email match' do
      data = member_data(email: user.email)

      expect(subject.transform(context, data)).to eq(nil)
    end

    it 'returns nil even when a secondary email match' do
      user.emails << Email.new(email: secondary_email)
      data = member_data(email: secondary_email)

      expect(subject.transform(context, data)).to eq(nil)
    end
  end

  context 'when the user is confirmed' do
    before do
      user.update!(confirmed_at: Time.now.utc)
    end

    it 'finds the user by the primary email' do
      data = member_data(email: user.email)

      expect(subject.transform(context, data)).to eq(
        'access_level' => 30,
        'user_id' => user.id,
        'created_by_id' => user.id,
        'created_at' => '2020-01-01T00:00:00Z',
        'updated_at' => '2020-01-01T00:00:00Z',
        'expires_at' => nil
      )
    end

    it 'finds the user by the secondary email' do
      user.emails << Email.new(email: secondary_email, confirmed_at: Time.now.utc)
      data = member_data(email: secondary_email)

      expect(subject.transform(context, data)).to eq(
        'access_level' => 30,
        'user_id' => user.id,
        'created_by_id' => user.id,
        'created_at' => '2020-01-01T00:00:00Z',
        'updated_at' => '2020-01-01T00:00:00Z',
        'expires_at' => nil
      )
    end

    context 'format access level' do
      it 'ignores record if no access level is given' do
        data = member_data(email: user.email, access_level: nil)

        expect(subject.transform(context, data)).to be_nil
      end

      it 'ignores record if is not a valid access level' do
        data = member_data(email: user.email, access_level: 999)

        expect(subject.transform(context, data)).to be_nil
      end
    end

    context 'source user id caching' do
      context 'when user gid is present' do
        it 'caches source user id' do
          gid = 'gid://gitlab/User/7'
          data = member_data(email: user.email, gid: gid)

          expect_next_instance_of(BulkImports::UsersMapper) do |mapper|
            expect(mapper).to receive(:cache_source_user_id).with('7', user.id)
          end

          subject.transform(context, data)
        end
      end

      context 'when user gid is missing' do
        it 'does not use caching' do
          data = member_data(email: user.email)

          expect(BulkImports::UsersMapper).not_to receive(:new)

          subject.transform(context, data)
        end
      end
    end
  end

  def member_data(email: '', gid: nil, access_level: 30)
    {
      'created_at' => '2020-01-01T00:00:00Z',
      'updated_at' => '2020-01-01T00:00:00Z',
      'expires_at' => nil,
      'access_level' => {
        'integer_value' => access_level
      },
      'user' => {
        'user_gid' => gid,
        'public_email' => email
      }
    }
  end
end