project_tree_saver_spec.rb 4.3 KB
Newer Older
1 2
require 'spec_helper'

3
describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
4
  describe 'saves the project tree into a json object' do
5

6
    let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.path_with_namespace) }
7 8 9 10
    let(:project_tree_saver) { described_class.new(project: project, shared: shared) }
    let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" }
    let(:user) { create(:user) }
    let(:project) { setup_project }
11

12
    before do
13
      project.team << [user, :master]
14
      allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
15 16
    end

17
    after do
18 19 20 21 22 23 24
      FileUtils.rm_rf(export_path)
    end

    it 'saves project successfully' do
      expect(project_tree_saver.save).to be true
    end

J
James Lopez 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    context 'JSON' do

      let(:saved_project_json) do
        project_tree_saver.save
        project_json(project_tree_saver.full_path)
      end

      it 'saves the correct json' do
        expect(saved_project_json).to include({ "name" => project.name })
      end

      it 'has events' do
        expect(saved_project_json['events']).not_to be_empty
      end

J
James Lopez 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
      it 'has milestones' do
        expect(saved_project_json['milestones']).not_to be_empty
      end

      it 'has merge requests' do
        expect(saved_project_json['merge_requests']).not_to be_empty
      end

      it 'has labels' do
        expect(saved_project_json['labels']).not_to be_empty
      end

      it 'has snippets' do
        expect(saved_project_json['snippets']).not_to be_empty
      end

56 57 58 59
      it 'has snippet notes' do
        expect(saved_project_json['snippets'].first['notes']).not_to be_empty
      end

J
James Lopez 已提交
60 61 62 63
      it 'has releases' do
        expect(saved_project_json['releases']).not_to be_empty
      end

J
James Lopez 已提交
64 65 66
      it 'has issues' do
        expect(saved_project_json['issues']).not_to be_empty
      end
J
James Lopez 已提交
67

68 69 70 71
      it 'has issue comments' do
        expect(saved_project_json['issues'].first['notes']).not_to be_empty
      end

72 73 74 75
      it 'has author on issue comments' do
        expect(saved_project_json['issues'].first['notes'].first['author']).not_to be_empty
      end

J
James Lopez 已提交
76
      it 'has project members' do
J
typo  
James Lopez 已提交
77
        expect(saved_project_json['project_members']).not_to be_empty
J
James Lopez 已提交
78
      end
79 80 81 82 83

      it 'has merge requests diffs' do
        expect(saved_project_json['merge_requests'].first['merge_request_diff']).not_to be_empty
      end

84 85 86 87
      it 'has merge requests comments' do
        expect(saved_project_json['merge_requests'].first['notes']).not_to be_empty
      end

88 89 90
      it 'has author on merge requests comments' do
        expect(saved_project_json['merge_requests'].first['notes'].first['author']).not_to be_empty
      end
J
James Lopez 已提交
91

J
James Lopez 已提交
92 93 94 95
      it 'has commit statuses' do
        expect(saved_project_json['ci_commits'].first['statuses']).not_to be_empty
      end

J
James Lopez 已提交
96 97 98 99
      it 'has CI builds' do
        expect(saved_project_json['ci_commits'].first['statuses'].first['type']).to eq('Ci::Build')
      end

100
      it 'has ci commits' do
J
James Lopez 已提交
101
        expect(saved_project_json['ci_commits']).not_to be_empty
102
      end
103 104 105 106

      it 'has ci commits notes' do
        expect(saved_project_json['ci_commits'].first['notes']).not_to be_empty
      end
107 108 109
    end
  end

110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
  def setup_project
    issue = create(:issue, assignee: user)
    merge_request = create(:merge_request)
    label = create(:label)
    snippet = create(:project_snippet)
    release = create(:release)

    project = create(:project,
                     :public,
                     issues: [issue],
                     merge_requests: [merge_request],
                     labels: [label],
                     snippets: [snippet],
                     releases: [release]
                    )

126 127 128 129 130 131 132 133 134
    commit_status = create(:commit_status, project: project)

    ci_commit = create(:ci_commit,
                       project: project,
                       sha: merge_request.last_commit.id,
                       ref: merge_request.source_branch,
                       statuses: [commit_status])

    create(:ci_build, commit: ci_commit, project: project)
135
    create(:milestone, project: project)
136 137 138 139
    create(:note, noteable: issue, project: project)
    create(:note, noteable: merge_request, project: project)
    create(:note, noteable: ci_commit, project: project)
    create(:note, noteable: snippet, project: project)
140 141 142
    project
  end

143 144 145 146
  def project_json(filename)
    JSON.parse(IO.read(filename))
  end
end