diff --git a/config/database.yml.postgresql b/config/database.yml.postgresql index 3dd9601557753b11c27a33cf7779f7534b189e89..c517a4c0cb8b2338a7913fb143522d5d9d730030 100644 --- a/config/database.yml.postgresql +++ b/config/database.yml.postgresql @@ -46,14 +46,3 @@ test: &test username: postgres password: # host: localhost - -# Warning: The database defined as "migrate" might erased. -# Do not set this db to the same as development or production. -migrate: &test - adapter: postgresql - encoding: unicode - database: gitlabhq_migrate - pool: 5 - username: postgres - password: - # host: localhost diff --git a/db/migrate/20170525132202_migrate_pipeline_stages.rb b/db/migrate/20170525132202_migrate_pipeline_stages.rb index 8f7da8662ecdc6164b82c20b3c603b9b13c4fc18..a9fe00ebf72eadaa95fc82eeb32a9070dadf4cec 100644 --- a/db/migrate/20170525132202_migrate_pipeline_stages.rb +++ b/db/migrate/20170525132202_migrate_pipeline_stages.rb @@ -8,7 +8,7 @@ class MigratePipelineStages < ActiveRecord::Migration t.integer :project_id t.integer :pipeline_id t.string :name - t.timestamps + t.timestamps null: true end end end diff --git a/db/schema.rb b/db/schema.rb index ca33c8cc2a2b9076b18bf1631268f37167ff8fd2..581060f62fcd4677d6410df26468537bdfb61276 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170523091700) do +ActiveRecord::Schema.define(version: 20170525132202) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -325,6 +325,14 @@ ActiveRecord::Schema.define(version: 20170523091700) do add_index "ci_runners", ["locked"], name: "index_ci_runners_on_locked", using: :btree add_index "ci_runners", ["token"], name: "index_ci_runners_on_token", using: :btree + create_table "ci_stages", force: :cascade do |t| + t.integer "project_id" + t.integer "pipeline_id" + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "ci_trigger_requests", force: :cascade do |t| t.integer "trigger_id", null: false t.text "variables" diff --git a/spec/migrations/migrate_pipeline_stages_spec.rb b/spec/migrations/migrate_pipeline_stages_spec.rb index 95c15d53a681d6412325de21a21a10c8df884bc5..038e5d7fc6b07de70689001ee1caef4bd749aa25 100644 --- a/spec/migrations/migrate_pipeline_stages_spec.rb +++ b/spec/migrations/migrate_pipeline_stages_spec.rb @@ -1,127 +1,23 @@ -require 'migrations_helper' +require 'spec_helper' require Rails.root.join('db', 'migrate', '20170525132202_migrate_pipeline_stages.rb') -describe MigratePipelineStages, :migration do - ## - # Create tables using schema from which we will migrate stuff. - # - before do - ActiveRecord::Schema.define(version: 20170523091700) do - enable_extension "plpgsql" - enable_extension "pg_trgm" - - create_table "ci_pipelines", force: :cascade do |t| - t.string "ref" - t.string "sha" - t.string "before_sha" - t.datetime "created_at" - t.datetime "updated_at" - t.boolean "tag", default: false - t.text "yaml_errors" - t.datetime "committed_at" - t.integer "project_id" - t.string "status" - t.datetime "started_at" - t.datetime "finished_at" - t.integer "duration" - t.integer "user_id" - t.integer "lock_version" - t.integer "auto_canceled_by_id" - t.integer "pipeline_schedule_id" - end - - add_index "ci_pipelines", ["auto_canceled_by_id"], name: "index_ci_pipelines_on_auto_canceled_by_id", using: :btree - add_index "ci_pipelines", ["pipeline_schedule_id"], name: "index_ci_pipelines_on_pipeline_schedule_id", using: :btree - add_index "ci_pipelines", ["project_id", "ref", "status"], name: "index_ci_pipelines_on_project_id_and_ref_and_status", using: :btree - add_index "ci_pipelines", ["project_id", "sha"], name: "index_ci_pipelines_on_project_id_and_sha", using: :btree - add_index "ci_pipelines", ["project_id"], name: "index_ci_pipelines_on_project_id", using: :btree - add_index "ci_pipelines", ["status"], name: "index_ci_pipelines_on_status", using: :btree - add_index "ci_pipelines", ["user_id"], name: "index_ci_pipelines_on_user_id", using: :btree - - create_table "ci_builds", force: :cascade do |t| - t.string "status" - t.datetime "finished_at" - t.text "trace" - t.datetime "created_at" - t.datetime "updated_at" - t.datetime "started_at" - t.integer "runner_id" - t.float "coverage" - t.integer "commit_id" - t.text "commands" - t.string "name" - t.text "options" - t.boolean "allow_failure", default: false, null: false - t.string "stage" - t.integer "trigger_request_id" - t.integer "stage_idx" - t.boolean "tag" - t.string "ref" - t.integer "user_id" - t.string "type" - t.string "target_url" - t.string "description" - t.text "artifacts_file" - t.integer "project_id" - t.text "artifacts_metadata" - t.integer "erased_by_id" - t.datetime "erased_at" - t.datetime "artifacts_expire_at" - t.string "environment" - t.integer "artifacts_size", limit: 8 - t.string "when" - t.text "yaml_variables" - t.datetime "queued_at" - t.string "token" - t.integer "lock_version" - t.string "coverage_regex" - t.integer "auto_canceled_by_id" - t.boolean "retried" - end - - add_index "ci_builds", ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id", using: :btree - add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree - add_index "ci_builds", ["commit_id", "status", "type"], name: "index_ci_builds_on_commit_id_and_status_and_type", using: :btree - add_index "ci_builds", ["commit_id", "type", "name", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_name_and_ref", using: :btree - add_index "ci_builds", ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref", using: :btree - add_index "ci_builds", ["project_id"], name: "index_ci_builds_on_project_id", using: :btree - add_index "ci_builds", ["runner_id"], name: "index_ci_builds_on_runner_id", using: :btree - add_index "ci_builds", ["status", "type", "runner_id"], name: "index_ci_builds_on_status_and_type_and_runner_id", using: :btree - add_index "ci_builds", ["status"], name: "index_ci_builds_on_status", using: :btree - add_index "ci_builds", ["token"], name: "index_ci_builds_on_token", unique: true, using: :btree - add_index "ci_builds", ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree - add_index "ci_builds", ["user_id"], name: "index_ci_builds_on_user_id", using: :btree - end - end - - let(:pipeline) do - Class.new(ActiveRecord::Base) do - self.table_name = 'ci_pipelines' - end - end - - let(:build) do - Class.new(ActiveRecord::Base) do - self.table_name = 'ci_builds' - end - end - - let(:stage) do - Class.new(ActiveRecord::Base) do - self.table_name = 'ci_stages' - end +describe MigratePipelineStages, :migration, schema: 20170523091700 do + def table(name) + Class.new(ActiveRecord::Base) { self.table_name = name } end ## # Create test data # before do - pipeline.create!(ref: 'master', sha: 'adf43c3a') + table(:ci_pipelines).create!(ref: 'master', sha: 'adf43c3a') end it 'correctly migrates pipeline stages' do - described_class.new.change + expect(ActiveRecord::Base.connection.table_exists?('ci_stages')).to eq false + + described_class.new.migrate(:up) - expect(stage.table_exists?).to be true + expect(ActiveRecord::Base.connection.table_exists?('ci_stages')).to eq true end end diff --git a/spec/migrations_helper.rb b/spec/migrations_helper.rb deleted file mode 100644 index bbb810556dadc4b8985111b6580c1960daa060b8..0000000000000000000000000000000000000000 --- a/spec/migrations_helper.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.expand_path("../../config/environment", __FILE__) -require 'rspec/rails' -require 'shoulda/matchers' - -ActiveRecord::Base.establish_connection(:migrate) - -RSpec.configure do |config| - config.mock_with :rspec - config.verbose_retry = true - config.display_try_failure_messages = true - config.use_transactional_fixtures = true - config.infer_spec_type_from_file_location! - config.raise_errors_for_deprecations! - - config.around(:each, :migration) do |example| - ActiveRecord::Tasks::DatabaseTasks.purge_current - - example.run - - ActiveRecord::Tasks::DatabaseTasks.purge_current - end - - config.around(:each, :redis) do |example| - Gitlab::Redis.with(&:flushall) - Sidekiq.redis(&:flushall) - - example.run - - Gitlab::Redis.with(&:flushall) - Sidekiq.redis(&:flushall) - end -end - - -puts "Rails environment: #{Rails.env}" -puts "Database connection: #{ActiveRecord::Base.connection_config[:database]}" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 51571ddebe98fa202c99a5c635f264845c600b03..992c0c29c72cd9a677b2db55d5bc287b09d12728 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -92,6 +92,16 @@ RSpec.configure do |config| Gitlab::Redis.with(&:flushall) Sidekiq.redis(&:flushall) end + + config.around(:example, migration: true) do |example| + schema_version = example.metadata[:schema] + migrations_paths = ActiveRecord::Migrator.migrations_paths + ActiveRecord::Migrator.migrate(migrations_paths, schema_version) + + example.run + + ActiveRecord::Migration.maintain_test_schema! + end end FactoryGirl::SyntaxRunner.class_eval do