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

releases_pipeline_spec.rb « pipelines « projects « bulk_imports « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 2279e66720e06a83dcc5214b5a8d53cd008991f1 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe BulkImports::Projects::Pipelines::ReleasesPipeline do
  let_it_be(:user) { create(:user) }
  let_it_be(:group) { create(:group) }
  let_it_be(:project) { create(:project, group: group) }
  let_it_be(:bulk_import) { create(:bulk_import, user: user) }
  let_it_be(:entity) do
    create(
      :bulk_import_entity,
      :project_entity,
      project: project,
      bulk_import: bulk_import,
      source_full_path: 'source/full/path',
      destination_name: 'My Destination Project',
      destination_namespace: group.full_path
    )
  end

  let_it_be(:tracker) { create(:bulk_import_tracker, entity: entity) }
  let_it_be(:context) { BulkImports::Pipeline::Context.new(tracker) }

  let(:attributes) { {} }
  let(:release) do
    {
      'tag' => '1.1',
      'name' => 'release 1.1',
      'description' => 'Release notes',
      'created_at' => '2019-12-26T10:17:14.621Z',
      'updated_at' => '2019-12-26T10:17:14.621Z',
      'released_at' => '2019-12-26T10:17:14.615Z',
      'sha' => '901de3a8bd5573f4a049b1457d28bc1592ba6bf9'
    }.merge(attributes)
  end

  subject(:pipeline) { described_class.new(context) }

  describe '#run' do
    before do
      group.add_owner(user)
      with_index = [release, 0]

      allow_next_instance_of(BulkImports::Common::Extractors::NdjsonExtractor) do |extractor|
        allow(extractor).to receive(:extract).and_return(BulkImports::Pipeline::ExtractedData.new(data: [with_index]))
      end

      pipeline.run
    end

    it 'imports release into destination project' do
      expect(project.releases.count).to eq(1)

      imported_release = project.releases.last

      aggregate_failures do
        expect(imported_release.tag).to eq(release['tag'])
        expect(imported_release.name).to eq(release['name'])
        expect(imported_release.description).to eq(release['description'])
        expect(imported_release.created_at.to_s).to eq('2019-12-26 10:17:14 UTC')
        expect(imported_release.updated_at.to_s).to eq('2019-12-26 10:17:14 UTC')
        expect(imported_release.released_at.to_s).to eq('2019-12-26 10:17:14 UTC')
        expect(imported_release.sha).to eq(release['sha'])
      end
    end

    context 'links' do
      let(:link) do
        {
          'url' => 'http://localhost/namespace6/project6/-/jobs/140463678/artifacts/download',
          'name' => 'release-1.1.dmg',
          'created_at' => '2019-12-26T10:17:14.621Z',
          'updated_at' => '2019-12-26T10:17:14.621Z'
        }
      end

      let(:attributes) {{ 'links' => [link] }}

      it 'restores release links' do
        release_link = project.releases.last.links.first

        aggregate_failures do
          expect(release_link.url).to eq(link['url'])
          expect(release_link.name).to eq(link['name'])
          expect(release_link.created_at.to_s).to eq('2019-12-26 10:17:14 UTC')
          expect(release_link.updated_at.to_s).to eq('2019-12-26 10:17:14 UTC')
        end
      end
    end

    context 'milestones' do
      let(:milestone) do
        {
          'iid' => 1,
          'state' => 'closed',
          'title' => 'test milestone',
          'description' => 'test milestone',
          'due_date' => '2016-06-14',
          'created_at' => '2016-06-14T15:02:04.415Z',
          'updated_at' => '2016-06-14T15:02:04.415Z'
        }
      end

      let(:attributes) {{ 'milestone_releases' => [{ 'milestone' => milestone }] }}

      it 'restores release milestone' do
        release_milestone = project.releases.last.milestone_releases.first.milestone

        aggregate_failures do
          expect(release_milestone.iid).to eq(milestone['iid'])
          expect(release_milestone.state).to eq(milestone['state'])
          expect(release_milestone.title).to eq(milestone['title'])
          expect(release_milestone.description).to eq(milestone['description'])
          expect(release_milestone.due_date.to_s).to eq('2016-06-14')
          expect(release_milestone.created_at.to_s).to eq('2016-06-14 15:02:04 UTC')
          expect(release_milestone.updated_at.to_s).to eq('2016-06-14 15:02:04 UTC')
        end
      end
    end
  end
end