summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-05-25 22:43:16 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-05-25 22:43:16 +0200
commitacc22a8422cd1471819510aa375c455b5ea009c5 (patch)
tree1f6d830aa5fb3407c1ce86435d579626caf13b1c /spec
parent6d8963e33657b80821900a60f66d0a51416dc59a (diff)
downloadgitlab-ce-acc22a8422cd1471819510aa375c455b5ea009c5.tar.gz
Simplify migrations for specific database schema
Diffstat (limited to 'spec')
-rw-r--r--spec/migrations/migrate_pipeline_stages_spec.rb122
-rw-r--r--spec/migrations_helper.rb36
-rw-r--r--spec/spec_helper.rb10
3 files changed, 19 insertions, 149 deletions
diff --git a/spec/migrations/migrate_pipeline_stages_spec.rb b/spec/migrations/migrate_pipeline_stages_spec.rb
index 95c15d53a68..038e5d7fc6b 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 bbb810556da..00000000000
--- 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 51571ddebe9..992c0c29c72 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