project_tree_saver_spec.rb 3.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 56 57 58 59
      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 已提交
60 61 62
      it 'has issues' do
        expect(saved_project_json['issues']).not_to be_empty
      end
J
James Lopez 已提交
63

64 65 66 67
      it 'has issue comments' do
        expect(saved_project_json['issues'].first['notes']).not_to be_empty
      end

J
James Lopez 已提交
68
      it 'has project members' do
J
typo  
James Lopez 已提交
69
        expect(saved_project_json['project_members']).not_to be_empty
J
James Lopez 已提交
70
      end
71 72 73 74 75

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

76 77 78 79
      it 'has merge requests comments' do
        expect(saved_project_json['merge_requests'].first['notes']).not_to be_empty
      end

J
James Lopez 已提交
80 81 82 83
      it 'has commit statuses' do
        expect(saved_project_json['ci_commits'].first['statuses']).not_to be_empty
      end

84
      it 'has ci commits' do
J
James Lopez 已提交
85
        expect(saved_project_json['ci_commits']).not_to be_empty
86
      end
87 88 89
    end
  end

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
  def setup_project
    issue = create(:issue, assignee: user)
    merge_request = create(:merge_request)
    label = create(:label)
    snippet = create(:project_snippet)
    commit_status = create(:commit_status)
    release = create(:release)

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

    create(:ci_commit, project: project, sha: merge_request.last_commit.id, ref: merge_request.source_branch, statuses: [commit_status])
    create(:milestone, project: project)
    create(:note, noteable: issue)
    create(:note, noteable: merge_request)
    project
  end

114 115 116 117
  def project_json(filename)
    JSON.parse(IO.read(filename))
  end
end