debian-mirror-gitlab/spec/migrations/rename_reserved_project_names_spec.rb

63 lines
1.9 KiB
Ruby
Raw Normal View History

2017-08-17 22:00:37 +05:30
# encoding: utf-8
require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20161221153951_rename_reserved_project_names.rb')
2018-03-27 19:54:05 +05:30
# This migration is using factories, which set fields that don't actually
# exist in the DB schema previous to 20161221153951. Thus we just use the
# latest schema when testing this migration.
# This is ok-ish because:
# 1. This migration is a data migration
# 2. It only relies on very stable DB fields: routes.id, routes.path, namespaces.id, projects.namespace_id
# Ideally, the test should not use factories and rely on the `table` helper instead.
describe RenameReservedProjectNames, :migration, schema: :latest do
2017-08-17 22:00:37 +05:30
let(:migration) { described_class.new }
2018-05-09 12:01:36 +05:30
let!(:project) { create(:project) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
2017-08-17 22:00:37 +05:30
before do
project.path = 'projects'
project.save!(validate: false)
end
describe '#up' do
context 'when project repository exists' do
2017-09-10 17:25:29 +05:30
before do
project.create_repository
end
2017-08-17 22:00:37 +05:30
context 'when no exception is raised' do
it 'renames project with reserved names' do
migration.up
expect(project.reload.path).to eq('projects0')
end
end
context 'when exception is raised during rename' do
before do
2018-12-13 13:39:08 +05:30
service = instance_double('service')
allow(service)
.to receive(:execute)
.and_raise(Projects::AfterRenameService::RenameFailedError)
allow(Projects::AfterRenameService)
.to receive(:new)
.with(project)
.and_return(service)
2017-08-17 22:00:37 +05:30
end
it 'captures exception from project rename' do
expect { migration.up }.not_to raise_error
end
end
end
context 'when project repository does not exist' do
it 'does not raise error' do
expect { migration.up }.not_to raise_error
end
end
end
end