90 lines
2.8 KiB
Ruby
90 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
require_migration!
|
|
|
|
RSpec.describe CleanupProjectsWithBadHasExternalWikiData, :migration do
|
|
let(:namespace) { table(:namespaces).create!(name: 'foo', path: 'bar') }
|
|
let(:projects) { table(:projects) }
|
|
let(:services) { table(:services) }
|
|
|
|
def create_projects!(num)
|
|
Array.new(num) do
|
|
projects.create!(namespace_id: namespace.id)
|
|
end
|
|
end
|
|
|
|
def create_active_external_wiki_integrations!(*projects)
|
|
projects.each do |project|
|
|
services.create!(type: 'ExternalWikiService', project_id: project.id, active: true)
|
|
end
|
|
end
|
|
|
|
def create_disabled_external_wiki_integrations!(*projects)
|
|
projects.each do |project|
|
|
services.create!(type: 'ExternalWikiService', project_id: project.id, active: false)
|
|
end
|
|
end
|
|
|
|
def create_active_other_integrations!(*projects)
|
|
projects.each do |project|
|
|
services.create!(type: 'NotAnExternalWikiService', project_id: project.id, active: true)
|
|
end
|
|
end
|
|
|
|
it 'sets `projects.has_external_wiki` correctly' do
|
|
allow(ActiveRecord::Base.connection).to receive(:transaction_open?).and_return(false)
|
|
|
|
project_with_external_wiki_1,
|
|
project_with_external_wiki_2,
|
|
project_with_disabled_external_wiki_1,
|
|
project_with_disabled_external_wiki_2,
|
|
project_without_external_wiki_1,
|
|
project_without_external_wiki_2 = create_projects!(6)
|
|
|
|
create_active_external_wiki_integrations!(
|
|
project_with_external_wiki_1,
|
|
project_with_external_wiki_2
|
|
)
|
|
|
|
create_disabled_external_wiki_integrations!(
|
|
project_with_disabled_external_wiki_1,
|
|
project_with_disabled_external_wiki_2
|
|
)
|
|
|
|
create_active_other_integrations!(
|
|
project_without_external_wiki_1,
|
|
project_without_external_wiki_2
|
|
)
|
|
|
|
# PG triggers on the services table added in a previous migration
|
|
# will have set the `has_external_wiki` columns to correct data when
|
|
# the services records were created above.
|
|
#
|
|
# We set the `has_external_wiki` columns for projects to incorrect
|
|
# data manually below to emulate projects in a state before the PG
|
|
# triggers were added.
|
|
project_with_external_wiki_2.update!(has_external_wiki: false)
|
|
project_with_disabled_external_wiki_2.update!(has_external_wiki: true)
|
|
project_without_external_wiki_2.update!(has_external_wiki: true)
|
|
|
|
migrate!
|
|
|
|
expected_true = [
|
|
project_with_external_wiki_1,
|
|
project_with_external_wiki_2
|
|
].each(&:reload).map(&:has_external_wiki)
|
|
|
|
expected_not_true = [
|
|
project_without_external_wiki_1,
|
|
project_without_external_wiki_2,
|
|
project_with_disabled_external_wiki_1,
|
|
project_with_disabled_external_wiki_2
|
|
].each(&:reload).map(&:has_external_wiki)
|
|
|
|
expect(expected_true).to all(eq(true))
|
|
expect(expected_not_true).to all(be_falsey)
|
|
end
|
|
end
|