diff options
Diffstat (limited to 'spec/lib/gitlab/database/migration_helpers_spec.rb')
-rw-r--r-- | spec/lib/gitlab/database/migration_helpers_spec.rb | 253 |
1 files changed, 0 insertions, 253 deletions
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb index 6b709cba5b3..6de7fc3a50e 100644 --- a/spec/lib/gitlab/database/migration_helpers_spec.rb +++ b/spec/lib/gitlab/database/migration_helpers_spec.rb @@ -1874,7 +1874,6 @@ RSpec.describe Gitlab::Database::MigrationHelpers do has_internal_id :iid, scope: :project, init: ->(s, _scope) { s&.project&.issues&.maximum(:iid) }, - backfill: true, presence: false end end @@ -1928,258 +1927,6 @@ RSpec.describe Gitlab::Database::MigrationHelpers do expect(issue_b.iid).to eq(3) end - context 'when the new code creates a row post deploy but before the migration runs' do - it 'does not change the row iid' do - project = setup - issue = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue.reload.iid).to eq(1) - end - - it 'backfills iids for rows already in the database' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - end - - it 'backfills iids across multiple projects' do - project_a = setup - project_b = setup - issue_a = issues.create!(project_id: project_a.id) - issue_b = issues.create!(project_id: project_b.id) - issue_c = Issue.create!(project_id: project_a.id) - issue_d = Issue.create!(project_id: project_b.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(1) - expect(issue_c.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(2) - end - - it 'generates iids properly for models created after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - issue_d = Issue.create!(project_id: project.id) - issue_e = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - expect(issue_d.iid).to eq(4) - expect(issue_e.iid).to eq(5) - end - - it 'backfills iids and properly generates iids for new models across multiple projects' do - project_a = setup - project_b = setup - issue_a = issues.create!(project_id: project_a.id) - issue_b = issues.create!(project_id: project_b.id) - issue_c = Issue.create!(project_id: project_a.id) - issue_d = Issue.create!(project_id: project_b.id) - - model.backfill_iids('issues') - - issue_e = Issue.create!(project_id: project_a.id) - issue_f = Issue.create!(project_id: project_b.id) - issue_g = Issue.create!(project_id: project_a.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(1) - expect(issue_c.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(2) - expect(issue_e.iid).to eq(3) - expect(issue_f.iid).to eq(3) - expect(issue_g.iid).to eq(4) - end - end - - context 'when the new code creates a model and then old code creates a model post deploy but before the migration runs' do - it 'backfills iids' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = Issue.create!(project_id: project.id) - issue_c = issues.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - end - - it 'generates an iid for a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_d = issues.create!(project_id: project.id) - - model.backfill_iids('issues') - - issue_e = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - expect(issue_d.reload.iid).to eq(4) - expect(issue_e.iid).to eq(5) - end - end - - context 'when the new code and old code alternate creating models post deploy but before the migration runs' do - it 'backfills iids' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = Issue.create!(project_id: project.id) - issue_c = issues.create!(project_id: project.id) - issue_d = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - expect(issue_d.reload.iid).to eq(4) - end - - it 'generates an iid for a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_d = issues.create!(project_id: project.id) - issue_e = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - issue_f = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_c.reload.iid).to eq(3) - expect(issue_d.reload.iid).to eq(4) - expect(issue_e.reload.iid).to eq(5) - expect(issue_f.iid).to eq(6) - end - end - - context 'when the new code creates and deletes a model post deploy but before the migration runs' do - it 'backfills iids for rows already in the database' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - end - - it 'successfully creates a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - - model.backfill_iids('issues') - - issue_d = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_d.iid).to eq(3) - end - end - - context 'when the new code creates and deletes a model and old code creates a model post deploy but before the migration runs' do - it 'backfills iids' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - issue_d = issues.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(3) - end - - it 'successfully creates a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - issue_d = issues.create!(project_id: project.id) - - model.backfill_iids('issues') - - issue_e = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(3) - expect(issue_e.iid).to eq(4) - end - end - - context 'when the new code creates and deletes a model and then creates another model post deploy but before the migration runs' do - it 'successfully generates an iid for a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - issue_d = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(3) - end - - it 'successfully generates an iid for a new model after the migration' do - project = setup - issue_a = issues.create!(project_id: project.id) - issue_b = issues.create!(project_id: project.id) - issue_c = Issue.create!(project_id: project.id) - issue_c.delete - issue_d = Issue.create!(project_id: project.id) - - model.backfill_iids('issues') - - issue_e = Issue.create!(project_id: project.id) - - expect(issue_a.reload.iid).to eq(1) - expect(issue_b.reload.iid).to eq(2) - expect(issue_d.reload.iid).to eq(3) - expect(issue_e.iid).to eq(4) - end - end - context 'when the first model is created for a project after the migration' do it 'generates an iid' do project_a = setup |