45 lines
2.0 KiB
Ruby
45 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::BackgroundMigration::BackfillDeploymentClustersFromDeployments, :migration, schema: 20200227140242 do
|
|
subject { described_class.new }
|
|
|
|
describe '#perform' do
|
|
it 'backfills deployment_cluster for all deployments in the given range with a non-null cluster_id' do
|
|
deployment_clusters = table(:deployment_clusters)
|
|
|
|
namespace = table(:namespaces).create!(name: 'the-namespace', path: 'the-path')
|
|
project = table(:projects).create!(name: 'the-project', namespace_id: namespace.id)
|
|
environment = table(:environments).create!(name: 'the-environment', project_id: project.id, slug: 'slug')
|
|
cluster = table(:clusters).create!(name: 'the-cluster')
|
|
|
|
deployment_data = { cluster_id: cluster.id, project_id: project.id, environment_id: environment.id, ref: 'abc', tag: false, sha: 'sha', status: 1 }
|
|
expected_deployment_1 = create_deployment(**deployment_data)
|
|
create_deployment(**deployment_data, cluster_id: nil) # no cluster_id
|
|
expected_deployment_2 = create_deployment(**deployment_data)
|
|
out_of_range_deployment = create_deployment(**deployment_data, cluster_id: cluster.id) # expected to be out of range
|
|
|
|
# to test "ON CONFLICT DO NOTHING"
|
|
existing_record_for_deployment_2 = deployment_clusters.create!(
|
|
deployment_id: expected_deployment_2.id,
|
|
cluster_id: expected_deployment_2.cluster_id,
|
|
kubernetes_namespace: 'production'
|
|
)
|
|
|
|
subject.perform(expected_deployment_1.id, out_of_range_deployment.id - 1)
|
|
|
|
expect(deployment_clusters.all.pluck(:deployment_id, :cluster_id, :kubernetes_namespace)).to contain_exactly(
|
|
[expected_deployment_1.id, cluster.id, nil],
|
|
[expected_deployment_2.id, cluster.id, existing_record_for_deployment_2.kubernetes_namespace]
|
|
)
|
|
end
|
|
|
|
def create_deployment(**data)
|
|
@iid ||= 0
|
|
@iid += 1
|
|
table(:deployments).create!(iid: @iid, **data)
|
|
end
|
|
end
|
|
end
|