129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'spec_helper'
 | |
| 
 | |
| RSpec.describe Gitlab::ImportSources do
 | |
|   describe '.options' do
 | |
|     it 'returns a hash' do
 | |
|       expected =
 | |
|         {
 | |
|           'GitHub' => 'github',
 | |
|           'Bitbucket Cloud' => 'bitbucket',
 | |
|           'Bitbucket Server' => 'bitbucket_server',
 | |
|           'GitLab.com' => 'gitlab',
 | |
|           'Google Code' => 'google_code',
 | |
|           'FogBugz' => 'fogbugz',
 | |
|           'Repository by URL' => 'git',
 | |
|           'GitLab export' => 'gitlab_project',
 | |
|           'Gitea' => 'gitea',
 | |
|           'Manifest file' => 'manifest',
 | |
|           'Phabricator' => 'phabricator'
 | |
|         }
 | |
| 
 | |
|       expect(described_class.options).to eq(expected)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.values' do
 | |
|     it 'returns an array' do
 | |
|       expected =
 | |
|         %w(
 | |
|           github
 | |
|           bitbucket
 | |
|           bitbucket_server
 | |
|           gitlab
 | |
|           google_code
 | |
|           fogbugz
 | |
|           git
 | |
|           gitlab_project
 | |
|           gitea
 | |
|           manifest
 | |
|           phabricator
 | |
|         )
 | |
| 
 | |
|       expect(described_class.values).to eq(expected)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.importer_names' do
 | |
|     it 'returns an array of importer names' do
 | |
|       expected =
 | |
|         %w(
 | |
|           github
 | |
|           bitbucket
 | |
|           bitbucket_server
 | |
|           gitlab
 | |
|           fogbugz
 | |
|           gitlab_project
 | |
|           gitea
 | |
|           phabricator
 | |
|         )
 | |
| 
 | |
|       expect(described_class.importer_names).to eq(expected)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.importer' do
 | |
|     import_sources = {
 | |
|       'github' => Gitlab::GithubImport::ParallelImporter,
 | |
|       'bitbucket' => Gitlab::BitbucketImport::Importer,
 | |
|       'bitbucket_server' => Gitlab::BitbucketServerImport::Importer,
 | |
|       'gitlab' => Gitlab::GitlabImport::Importer,
 | |
|       'google_code' => nil,
 | |
|       'fogbugz' => Gitlab::FogbugzImport::Importer,
 | |
|       'git' => nil,
 | |
|       'gitlab_project' => Gitlab::ImportExport::Importer,
 | |
|       'gitea' => Gitlab::LegacyGithubImport::Importer,
 | |
|       'manifest' => nil,
 | |
|       'phabricator' => Gitlab::PhabricatorImport::Importer
 | |
|     }
 | |
| 
 | |
|     import_sources.each do |name, klass|
 | |
|       it "returns #{klass} when given #{name}" do
 | |
|         expect(described_class.importer(name)).to eq(klass)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.title' do
 | |
|     import_sources = {
 | |
|       'github' => 'GitHub',
 | |
|       'bitbucket' => 'Bitbucket Cloud',
 | |
|       'bitbucket_server' => 'Bitbucket Server',
 | |
|       'gitlab' => 'GitLab.com',
 | |
|       'google_code' => 'Google Code',
 | |
|       'fogbugz' => 'FogBugz',
 | |
|       'git' => 'Repository by URL',
 | |
|       'gitlab_project' => 'GitLab export',
 | |
|       'gitea' => 'Gitea',
 | |
|       'manifest' => 'Manifest file',
 | |
|       'phabricator' => 'Phabricator'
 | |
|     }
 | |
| 
 | |
|     import_sources.each do |name, title|
 | |
|       it "returns #{title} when given #{name}" do
 | |
|         expect(described_class.title(name)).to eq(title)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe 'imports_repository? checker' do
 | |
|     let(:allowed_importers) { %w[github gitlab_project bitbucket_server phabricator] }
 | |
| 
 | |
|     it 'fails if any importer other than the allowed ones implements this method' do
 | |
|       current_importers = described_class.values.select { |kind| described_class.importer(kind).try(:imports_repository?) }
 | |
|       not_allowed_importers = current_importers - allowed_importers
 | |
| 
 | |
|       expect(not_allowed_importers).to be_empty, failure_message(not_allowed_importers)
 | |
|     end
 | |
| 
 | |
|     def failure_message(importers_class_names)
 | |
|       <<-MSG
 | |
|         It looks like the #{importers_class_names.join(', ')} importers implements its own way to import the repository.
 | |
|         That means that the lfs object download must be handled for each of them. You can use 'LfsImportService' and
 | |
|         'LfsDownloadService' to implement it. After that, add the importer name to the list of allowed importers in this spec.
 | |
|       MSG
 | |
|     end
 | |
|   end
 | |
| end
 |