Commit a4e6a387 authored by Jarka Kadlecová's avatar Jarka Kadlecová

Migrate epic_issues position values correctly

parent 90f676ca
......@@ -6,7 +6,7 @@ class AddPositionToEpicIssues < ActiveRecord::Migration
disable_ddl_transaction!
def up
add_column_with_default(:epic_issues, :position, :integer, default: Arel.sql('id'), allow_null: false)
add_column_with_default(:epic_issues, :position, :integer, default: 1, allow_null: false)
end
def down
......
class SetEpicIssuePositionValues < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
class Epic < ActiveRecord::Base
self.table_name = 'epics'
end
class EpicIssue < ActiveRecord::Base
self.table_name = 'epic_issues'
end
def up
epic_issues = select_all('SELECT id, epic_id FROM epic_issues ORDER by epic_id, id')
.group_by { |e| e['epic_id'] }
epic_issues.each do |epic_id, epic_issues|
epic_issues.each_with_index do |epic_issue, index|
execute("UPDATE epic_issues SET position = #{index + 1} WHERE id = #{epic_issue['id']}")
end
end
end
def down
execute('UPDATE epic_issues SET position = 1')
end
end
......@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20171214115254) do
ActiveRecord::Schema.define(version: 20171221154744) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -765,7 +765,7 @@ ActiveRecord::Schema.define(version: 20171214115254) do
create_table "epic_issues", force: :cascade do |t|
t.integer "epic_id", null: false
t.integer "issue_id", null: false
t.integer "position", default: 0, null: false
t.integer "position", default: 1, null: false
end
add_index "epic_issues", ["epic_id"], name: "index_epic_issues_on_epic_id", using: :btree
......
require 'spec_helper'
require Rails.root.join('db', 'migrate', '20171221154744_set_epic_issue_position_values.rb')
describe SetEpicIssuePositionValues, :migration do
let(:groups) { table(:namespaces) }
let(:projects) { table(:projects) }
let(:users) { table(:users) }
let(:issues) { table(:issues) }
let(:epics) { table(:epics) }
let(:epic_issues) { table(:epic_issues) }
let(:group) { groups.create(name: 'group', path: 'group') }
let(:project) { projects.create(name: 'group', namespace_id: group.id) }
let(:user) { users.create(username: 'User') }
let(:epic1) { epics.create(title: 'Epic 1', title_html: 'Epic 1', group_id: group.id, author_id: user.id, iid: 1) }
let(:epic2) { epics.create(title: 'Epic 1', title_html: 'Epic 1', group_id: group.id, author_id: user.id, iid: 1) }
let(:issue1) { issues.create(title: 'Issue 1', title_html: 'Issue 1', project_id: project.id, author_id: user.id) }
let(:issue2) { issues.create(title: 'Issue 2', title_html: 'Issue 1', project_id: project.id, author_id: user.id) }
let(:issue3) { issues.create(title: 'Issue 3', title_html: 'Issue 1', project_id: project.id, author_id: user.id) }
let(:issue4) { issues.create(title: 'Issue 4', title_html: 'Issue 1', project_id: project.id, author_id: user.id) }
let(:issue5) { issues.create(title: 'Issue 5', title_html: 'Issue 1', project_id: project.id, author_id: user.id) }
let!(:epic_issue1) { epic_issues.create!(epic_id: epic1.id, issue_id: issue1.id) }
let!(:epic_issue2) { epic_issues.create!(epic_id: epic1.id, issue_id: issue2.id) }
let!(:epic_issue3) { epic_issues.create!(epic_id: epic2.id, issue_id: issue3.id) }
let!(:epic_issue4) { epic_issues.create!(epic_id: epic2.id, issue_id: issue4.id) }
let!(:epic_issue5) { epic_issues.create!(epic_id: epic2.id, issue_id: issue5.id) }
it 'sets the position value correctly' do
migrate!
expect(epic_issue1.reload.position).to eq(1)
expect(epic_issue2.reload.position).to eq(2)
expect(epic_issue3.reload.position).to eq(1)
expect(epic_issue4.reload.position).to eq(2)
expect(epic_issue5.reload.position).to eq(3)
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment