gitlab-org--gitlab-foss/spec/lib/gitlab/background_migration/set_legacy_open_source_lice...

54 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::BackgroundMigration::SetLegacyOpenSourceLicenseAvailableForNonPublicProjects,
:migration,
schema: 20220722110026 do
let(:namespaces_table) { table(:namespaces) }
let(:projects_table) { table(:projects) }
let(:project_settings_table) { table(:project_settings) }
subject(:perform_migration) do
described_class.new(start_id: projects_table.minimum(:id),
end_id: projects_table.maximum(:id),
batch_table: :projects,
batch_column: :id,
sub_batch_size: 2,
pause_ms: 0,
connection: ActiveRecord::Base.connection)
.perform
end
it 'sets `legacy_open_source_license_available` attribute to false for non-public projects', :aggregate_failures do
private_project = create_legacy_license_project('private-project', visibility_level: 0)
internal_project = create_legacy_license_project('internal-project', visibility_level: 10)
public_project = create_legacy_license_project('public-project', visibility_level: 20)
queries = ActiveRecord::QueryRecorder.new { perform_migration }
expect(queries.count).to eq(5)
expect(migrated_attribute(private_project)).to be_falsey
expect(migrated_attribute(internal_project)).to be_falsey
expect(migrated_attribute(public_project)).to be_truthy
end
def create_legacy_license_project(path, visibility_level:)
namespace = namespaces_table.create!(name: "namespace-#{path}", path: "namespace-#{path}")
project_namespace = namespaces_table.create!(name: "project-namespace-#{path}", path: path, type: 'Project')
project = projects_table.create!(name: path,
path: path,
namespace_id: namespace.id,
project_namespace_id: project_namespace.id,
visibility_level: visibility_level)
project_settings_table.create!(project_id: project.id, legacy_open_source_license_available: true)
project
end
def migrated_attribute(project)
project_settings_table.find(project.id).legacy_open_source_license_available
end
end