171 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require 'spec_helper'
 | |
| 
 | |
| describe Gitlab::GithubImport::Importer, lib: true do
 | |
|   describe '#execute' do
 | |
|     before do
 | |
|       allow(Rails).to receive(:cache).and_return(ActiveSupport::Cache::MemoryStore.new)
 | |
|     end
 | |
| 
 | |
|     context 'when an error occurs' do
 | |
|       let(:project) { create(:project, import_url: 'https://github.com/octocat/Hello-World.git', wiki_access_level: ProjectFeature::DISABLED) }
 | |
|       let(:octocat) { double(id: 123456, login: 'octocat') }
 | |
|       let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') }
 | |
|       let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') }
 | |
|       let(:repository) { double(id: 1, fork: false) }
 | |
|       let(:source_sha) { create(:commit, project: project).id }
 | |
|       let(:source_branch) { double(ref: 'feature', repo: repository, sha: source_sha) }
 | |
|       let(:target_sha) { create(:commit, project: project, git_commit: RepoHelpers.another_sample_commit).id }
 | |
|       let(:target_branch) { double(ref: 'master', repo: repository, sha: target_sha) }
 | |
| 
 | |
|       let(:label1) do
 | |
|         double(
 | |
|           name: 'Bug',
 | |
|           color: 'ff0000',
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/labels/bug'
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:label2) do
 | |
|         double(
 | |
|           name: nil,
 | |
|           color: 'ff0000',
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/labels/bug'
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:milestone) do
 | |
|         double(
 | |
|           number: 1347,
 | |
|           state: 'open',
 | |
|           title: '1.0',
 | |
|           description: 'Version 1.0',
 | |
|           due_on: nil,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           closed_at: nil,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/milestones/1'
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:issue1) do
 | |
|         double(
 | |
|           number: 1347,
 | |
|           milestone: nil,
 | |
|           state: 'open',
 | |
|           title: 'Found a bug',
 | |
|           body: "I'm having a problem with this.",
 | |
|           assignee: nil,
 | |
|           user: octocat,
 | |
|           comments: 0,
 | |
|           pull_request: nil,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           closed_at: nil,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/issues/1347',
 | |
|           labels: [double(name: 'Label #1')],
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:issue2) do
 | |
|         double(
 | |
|           number: 1348,
 | |
|           milestone: nil,
 | |
|           state: 'open',
 | |
|           title: nil,
 | |
|           body: "I'm having a problem with this.",
 | |
|           assignee: nil,
 | |
|           user: octocat,
 | |
|           comments: 0,
 | |
|           pull_request: nil,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           closed_at: nil,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/issues/1348',
 | |
|           labels: [double(name: 'Label #2')],
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:pull_request) do
 | |
|         double(
 | |
|           number: 1347,
 | |
|           milestone: nil,
 | |
|           state: 'open',
 | |
|           title: 'New feature',
 | |
|           body: 'Please pull these awesome changes',
 | |
|           head: source_branch,
 | |
|           base: target_branch,
 | |
|           assignee: nil,
 | |
|           user: octocat,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           closed_at: nil,
 | |
|           merged_at: nil,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/pulls/1347',
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:release1) do
 | |
|         double(
 | |
|           tag_name: 'v1.0.0',
 | |
|           name: 'First release',
 | |
|           body: 'Release v1.0.0',
 | |
|           draft: false,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/releases/1'
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       let(:release2) do
 | |
|         double(
 | |
|           tag_name: 'v2.0.0',
 | |
|           name: 'Second release',
 | |
|           body: nil,
 | |
|           draft: false,
 | |
|           created_at: created_at,
 | |
|           updated_at: updated_at,
 | |
|           url: 'https://api.github.com/repos/octocat/Hello-World/releases/2'
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       before do
 | |
|         allow(project).to receive(:import_data).and_return(double.as_null_object)
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:rate_limit!).and_raise(Octokit::NotFound)
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:labels).and_return([label1, label2])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:milestones).and_return([milestone, milestone])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:issues).and_return([issue1, issue2])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:pull_requests).and_return([pull_request, pull_request])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:issues_comments).and_return([])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:pull_requests_comments).and_return([])
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:last_response).and_return(double(rels: { next: nil }))
 | |
|         allow_any_instance_of(Octokit::Client).to receive(:releases).and_return([release1, release2])
 | |
|         allow_any_instance_of(Gitlab::Shell).to receive(:import_repository).and_raise(Gitlab::Shell::Error)
 | |
|       end
 | |
| 
 | |
|       it 'returns true' do
 | |
|         expect(described_class.new(project).execute).to eq true
 | |
|       end
 | |
| 
 | |
|       it 'does not raise an error' do
 | |
|         expect { described_class.new(project).execute }.not_to raise_error
 | |
|       end
 | |
| 
 | |
|       it 'stores error messages' do
 | |
|         error = {
 | |
|           message: 'The remote data could not be fully imported.',
 | |
|           errors: [
 | |
|             { type: :label, url: "https://api.github.com/repos/octocat/Hello-World/labels/bug", errors: "Validation failed: Title can't be blank, Title is invalid" },
 | |
|             { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1348", errors: "Validation failed: Title can't be blank" },
 | |
|             { type: :wiki, errors: "Gitlab::Shell::Error" },
 | |
|             { type: :release, url: 'https://api.github.com/repos/octocat/Hello-World/releases/2', errors: "Validation failed: Description can't be blank" }
 | |
|           ]
 | |
|         }
 | |
| 
 | |
|         described_class.new(project).execute
 | |
| 
 | |
|         expect(project.import_error).to eq error.to_json
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |