debian-mirror-gitlab/spec/migrations/20221222092958_sync_new_amount_used_with_amount_used_spec.rb
2023-03-17 16:20:25 +05:30

55 lines
2 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
require_migration!
RSpec.describe SyncNewAmountUsedWithAmountUsed, migration: :gitlab_ci, feature_category: :continuous_integration do
let(:project_usages) { table(:ci_project_monthly_usages) }
let(:migration) { described_class.new }
before do
# Disabling the trigger temporarily to allow records being created with out-of-sync
# `new_amount_used` and `amount_used`. This will simulate existing records before
# we add the trigger.
ActiveRecord::Base.connection
.execute("ALTER TABLE ci_project_monthly_usages DISABLE TRIGGER sync_projects_amount_used_columns")
this_month = Time.now.utc.beginning_of_month
last_month = 1.month.ago.utc.beginning_of_month
last_year = 1.year.ago.utc.beginning_of_month
project_usages.create!(project_id: 1, date: last_year)
project_usages.create!(project_id: 1, date: this_month, amount_used: 10, new_amount_used: 0)
project_usages.create!(project_id: 1, date: last_month, amount_used: 20, new_amount_used: 0)
project_usages.create!(project_id: 2, date: last_year)
project_usages.create!(project_id: 2, date: this_month, amount_used: 30, new_amount_used: 0)
project_usages.create!(project_id: 2, date: last_month, amount_used: 40, new_amount_used: 0)
ActiveRecord::Base.connection
.execute("ALTER TABLE ci_project_monthly_usages ENABLE TRIGGER sync_projects_amount_used_columns")
end
describe '#up' do
it "doesnt change new_amount_used values" do
data = project_usages.all
data.each do |item|
expect { migration.up }.to not_change { item.new_amount_used }
end
end
end
describe '#down' do
it 'updates `new_amount_used` with values from `amount_used`' do
expect(project_usages.where(new_amount_used: 0).count).to eq(6)
migration.down
expect(project_usages.where(new_amount_used: 0).count).to eq(2)
expect(project_usages.order(:id).pluck(:new_amount_used))
.to contain_exactly(0, 0, 10, 20, 30, 40)
end
end
end