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

3
describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
4 5
  describe :save do

6 7
    # TODO refactor this into a setup method

8
    let(:user) { create(:user) }
J
James Lopez 已提交
9
    let(:issue) { create(:issue, assignee: user) }
J
James Lopez 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22
    let(:merge_request) { create(:merge_request) }
    let(:label) { create(:label) }
    let(:snippet) { create(:project_snippet) }
    let(:commit_status) { create(:commit_status) }
    let(:release) { create(:release) }
    let!(:project) do
      create(:project,
             :public,
             name: 'searchable_project',
             issues: [issue],
             merge_requests: [merge_request],
             labels: [label],
             snippets: [snippet],
J
James Lopez 已提交
23
             releases: [release]
J
James Lopez 已提交
24
            )
J
James Lopez 已提交
25
    end
J
James Lopez 已提交
26
    let!(:ci_commit) { create(:ci_commit, project: project, sha: merge_request.last_commit.id, ref: merge_request.source_branch, statuses: [commit_status]) }
J
James Lopez 已提交
27
    let!(:milestone) { create(:milestone, title: "Milestone v1.2", project: project) }
28
    let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" }
29 30
    let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.path_with_namespace) }
    let(:project_tree_saver) { Gitlab::ImportExport::ProjectTreeSaver.new(project: project, shared: shared) }
31 32
    let!(:issue_note) { create(:note, note: ":+1: issue", noteable: issue) }
    let!(:merge_request_note) { create(:note, note: ":+1: merge_request", noteable: merge_request) }
33 34 35

    before(:each) do
      project.team << [user, :master]
36
      allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
37 38 39 40 41 42 43 44 45 46
    end

    after(:each) do
      FileUtils.rm_rf(export_path)
    end

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

J
James Lopez 已提交
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
    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 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
      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

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

J
James Lopez 已提交
82 83 84
      it 'has issues' do
        expect(saved_project_json['issues']).not_to be_empty
      end
J
James Lopez 已提交
85

86 87 88 89
      it 'has issue comments' do
        expect(saved_project_json['issues'].first['notes']).not_to be_empty
      end

J
James Lopez 已提交
90
      it 'has project members' do
J
typo  
James Lopez 已提交
91
        expect(saved_project_json['project_members']).not_to be_empty
J
James Lopez 已提交
92
      end
93 94 95 96 97

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

98 99 100 101
      it 'has merge requests comments' do
        expect(saved_project_json['merge_requests'].first['notes']).not_to be_empty
      end

J
James Lopez 已提交
102 103 104 105
      it 'has commit statuses' do
        expect(saved_project_json['ci_commits'].first['statuses']).not_to be_empty
      end

106
      it 'has ci commits' do
J
James Lopez 已提交
107
        expect(saved_project_json['ci_commits']).not_to be_empty
108
      end
109 110 111 112 113 114 115
    end
  end

  def project_json(filename)
    JSON.parse(IO.read(filename))
  end
end