81 lines
2.7 KiB
Ruby
81 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::BackgroundMigration::PopulateOperationVisibilityPermissionsFromOperations do
|
|
let(:namespaces) { table(:namespaces) }
|
|
let(:project_features) { table(:project_features) }
|
|
let(:projects) { table(:projects) }
|
|
|
|
let(:namespace) { namespaces.create!(name: 'user', path: 'user') }
|
|
|
|
let(:proj_namespace1) { namespaces.create!(name: 'proj1', path: 'proj1', type: 'Project', parent_id: namespace.id) }
|
|
let(:proj_namespace2) { namespaces.create!(name: 'proj2', path: 'proj2', type: 'Project', parent_id: namespace.id) }
|
|
let(:proj_namespace3) { namespaces.create!(name: 'proj3', path: 'proj3', type: 'Project', parent_id: namespace.id) }
|
|
|
|
let(:project1) { create_project('test1', proj_namespace1) }
|
|
let(:project2) { create_project('test2', proj_namespace2) }
|
|
let(:project3) { create_project('test3', proj_namespace3) }
|
|
|
|
let!(:record1) { create_project_feature(project1) }
|
|
let!(:record2) { create_project_feature(project2, 20) }
|
|
let!(:record3) { create_project_feature(project3) }
|
|
|
|
let(:sub_batch_size) { 2 }
|
|
let(:start_id) { record1.id }
|
|
let(:end_id) { record3.id }
|
|
let(:batch_table) { :project_features }
|
|
let(:batch_column) { :id }
|
|
let(:pause_ms) { 1 }
|
|
let(:connection) { ApplicationRecord.connection }
|
|
|
|
let(:job) do
|
|
described_class.new(
|
|
start_id: start_id,
|
|
end_id: end_id,
|
|
batch_table: batch_table,
|
|
batch_column: batch_column,
|
|
sub_batch_size: sub_batch_size,
|
|
pause_ms: pause_ms,
|
|
connection: connection
|
|
)
|
|
end
|
|
|
|
subject(:perform) { job.perform }
|
|
|
|
it 'updates all project settings records from their operations_access_level', :aggregate_failures do
|
|
perform
|
|
|
|
expect_project_features_match_operations_access_level(record1)
|
|
expect_project_features_match_operations_access_level(record2)
|
|
expect_project_features_match_operations_access_level(record3)
|
|
end
|
|
|
|
private
|
|
|
|
def expect_project_features_match_operations_access_level(record)
|
|
record.reload
|
|
expect(record.monitor_access_level).to eq(record.operations_access_level)
|
|
expect(record.infrastructure_access_level).to eq(record.operations_access_level)
|
|
expect(record.feature_flags_access_level).to eq(record.operations_access_level)
|
|
expect(record.environments_access_level).to eq(record.operations_access_level)
|
|
end
|
|
|
|
def create_project(proj_name, proj_namespace)
|
|
projects.create!(
|
|
namespace_id: namespace.id,
|
|
project_namespace_id: proj_namespace.id,
|
|
name: proj_name,
|
|
path: proj_name
|
|
)
|
|
end
|
|
|
|
def create_project_feature(project, operations_access_level = 10)
|
|
project_features.create!(
|
|
project_id: project.id,
|
|
pages_access_level: 10,
|
|
operations_access_level: operations_access_level
|
|
)
|
|
end
|
|
end
|