diff options
Diffstat (limited to 'spec/lib/gitlab/import_export/repo_restorer_spec.rb')
-rw-r--r-- | spec/lib/gitlab/import_export/repo_restorer_spec.rb | 74 |
1 files changed, 56 insertions, 18 deletions
diff --git a/spec/lib/gitlab/import_export/repo_restorer_spec.rb b/spec/lib/gitlab/import_export/repo_restorer_spec.rb index b32ae60fbcc..a6b917457c2 100644 --- a/spec/lib/gitlab/import_export/repo_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/repo_restorer_spec.rb @@ -5,35 +5,42 @@ require 'spec_helper' RSpec.describe Gitlab::ImportExport::RepoRestorer do include GitHelpers + let_it_be(:project_with_repo) do + create(:project, :repository, :wiki_repo, name: 'test-repo-restorer', path: 'test-repo-restorer').tap do |p| + p.wiki.create_page('page', 'foobar', :markdown, 'created page') + end + end + + let!(:project) { create(:project) } + + let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } + let(:shared) { project.import_export_shared } + + before do + allow(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path) + + bundler.save + end + + after do + FileUtils.rm_rf(export_path) + end + describe 'bundle a project Git repo' do - let(:user) { create(:user) } - let!(:project_with_repo) { create(:project, :repository, name: 'test-repo-restorer', path: 'test-repo-restorer') } - let!(:project) { create(:project) } - let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } - let(:shared) { project.import_export_shared } let(:bundler) { Gitlab::ImportExport::RepoSaver.new(project: project_with_repo, shared: shared) } let(:bundle_path) { File.join(shared.export_path, Gitlab::ImportExport.project_bundle_filename) } subject { described_class.new(path_to_bundle: bundle_path, shared: shared, project: project) } - before do - allow_next_instance_of(Gitlab::ImportExport) do |instance| - allow(instance).to receive(:storage_path).and_return(export_path) - end - - bundler.save - end - after do - FileUtils.rm_rf(export_path) - Gitlab::GitalyClient::StorageSettings.allow_disk_access do - FileUtils.rm_rf(project_with_repo.repository.path_to_repo) - FileUtils.rm_rf(project.repository.path_to_repo) - end + Gitlab::Shell.new.remove_repository(project.repository_storage, project.disk_path) end it 'restores the repo successfully' do + expect(project.repository.exists?).to be false expect(subject.restore).to be_truthy + + expect(project.repository.empty?).to be false end context 'when the repository already exists' do @@ -53,4 +60,35 @@ RSpec.describe Gitlab::ImportExport::RepoRestorer do end end end + + describe 'restore a wiki Git repo' do + let(:bundler) { Gitlab::ImportExport::WikiRepoSaver.new(project: project_with_repo, shared: shared) } + let(:bundle_path) { File.join(shared.export_path, Gitlab::ImportExport.wiki_repo_bundle_filename) } + + subject { described_class.new(path_to_bundle: bundle_path, shared: shared, project: ProjectWiki.new(project)) } + + after do + Gitlab::Shell.new.remove_repository(project.wiki.repository_storage, project.wiki.disk_path) + end + + it 'restores the wiki repo successfully' do + expect(project.wiki_repository_exists?).to be false + + subject.restore + project.wiki.repository.expire_status_cache + + expect(project.wiki_repository_exists?).to be true + end + + describe 'no wiki in the bundle' do + let!(:project_without_wiki) { create(:project) } + + let(:bundler) { Gitlab::ImportExport::WikiRepoSaver.new(project: project_without_wiki, shared: shared) } + + it 'does not creates an empty wiki' do + expect(subject.restore).to be true + expect(project.wiki_repository_exists?).to be false + end + end + end end |