summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/github_import/bulk_importing_spec.rb
blob: 91229d9c7d42ff2d94badadb3513f7659c09c0c1 (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
require 'spec_helper'

describe Gitlab::GithubImport::BulkImporting do
  let(:importer) do
    Class.new { include(Gitlab::GithubImport::BulkImporting) }.new
  end

  describe '#build_database_rows' do
    it 'returns an Array containing the rows to insert' do
      object = double(:object, title: 'Foo')

      expect(importer)
        .to receive(:build)
        .with(object)
        .and_return({ title: 'Foo' })

      expect(importer)
        .to receive(:already_imported?)
        .with(object)
        .and_return(false)

      enum = [[object, 1]].to_enum

      expect(importer.build_database_rows(enum)).to eq([{ title: 'Foo' }])
    end

    it 'does not import objects that have already been imported' do
      object = double(:object, title: 'Foo')

      expect(importer)
        .not_to receive(:build)

      expect(importer)
        .to receive(:already_imported?)
        .with(object)
        .and_return(true)

      enum = [[object, 1]].to_enum

      expect(importer.build_database_rows(enum)).to be_empty
    end
  end

  describe '#bulk_insert' do
    it 'bulk inserts rows into the database' do
      rows = [{ title: 'Foo' }] * 10
      model = double(:model, table_name: 'kittens')

      expect(Gitlab::Database)
        .to receive(:bulk_insert)
        .ordered
        .with('kittens', rows.first(5))

      expect(Gitlab::Database)
        .to receive(:bulk_insert)
        .ordered
        .with('kittens', rows.last(5))

      importer.bulk_insert(model, rows, batch_size: 5)
    end
  end
end