summaryrefslogtreecommitdiff
path: root/spec/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'spec/migrations')
-rw-r--r--spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb8
-rw-r--r--spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb7
-rw-r--r--spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb5
-rw-r--r--spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb11
-rw-r--r--spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb47
-rw-r--r--spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb35
-rw-r--r--spec/migrations/migrate_incident_issues_to_incident_type_spec.rb55
-rw-r--r--spec/migrations/migrate_k8s_service_integration_spec.rb1
-rw-r--r--spec/migrations/remove_duplicate_labels_from_project_spec.rb1
-rw-r--r--spec/migrations/remove_orphaned_invited_members_spec.rb2
-rw-r--r--spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb56
11 files changed, 228 insertions, 0 deletions
diff --git a/spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb b/spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb
index 750d3d1fa30..6c957ee1428 100644
--- a/spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb
+++ b/spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb
@@ -13,27 +13,35 @@ RSpec.describe MigrateIssueTrackersData do
'url' => 'http://example.com'
}
end
+
let!(:jira_service) do
services.create(type: 'JiraService', properties: properties, category: 'issue_tracker')
end
+
let!(:jira_service_nil) do
services.create(type: 'JiraService', properties: nil, category: 'issue_tracker')
end
+
let!(:bugzilla_service) do
services.create(type: 'BugzillaService', properties: properties, category: 'issue_tracker')
end
+
let!(:youtrack_service) do
services.create(type: 'YoutrackService', properties: properties, category: 'issue_tracker')
end
+
let!(:youtrack_service_empty) do
services.create(type: 'YoutrackService', properties: '', category: 'issue_tracker')
end
+
let!(:gitlab_service) do
services.create(type: 'GitlabIssueTrackerService', properties: properties, category: 'issue_tracker')
end
+
let!(:gitlab_service_empty) do
services.create(type: 'GitlabIssueTrackerService', properties: {}, category: 'issue_tracker')
end
+
let!(:other_service) do
services.create(type: 'OtherService', properties: properties, category: 'other_category')
end
diff --git a/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb b/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb
index cae8e858af9..e69a30752db 100644
--- a/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb
+++ b/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb
@@ -28,32 +28,39 @@ RSpec.describe RemoveInvalidJiraData do
data[:encrypted_api_url_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:missing_api_url) do
data[:encrypted_api_url] = ''
data[:encrypted_api_url_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:invalid_url) do
data[:encrypted_url_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:missing_url) do
data[:encrypted_url] = ''
jira_tracker_data.create(data)
end
+
let!(:invalid_username) do
data[:encrypted_username_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:missing_username) do
data[:encrypted_username] = nil
data[:encrypted_username_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:invalid_password) do
data[:encrypted_password_iv] = nil
jira_tracker_data.create(data)
end
+
let!(:missing_password) do
data[:encrypted_password] = nil
data[:encrypted_username_iv] = nil
diff --git a/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb b/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb
index a86b5d83a0b..e7917cf5d72 100644
--- a/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb
+++ b/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb
@@ -26,23 +26,28 @@ RSpec.describe RemoveInvalidIssueTrackerData do
data[:encrypted_issues_url_iv] = nil
issue_tracker_data.create(data)
end
+
let!(:missing_issues_url) do
data[:encrypted_issues_url] = ''
data[:encrypted_issues_url_iv] = nil
issue_tracker_data.create(data)
end
+
let!(:invalid_new_isue_url) do
data[:encrypted_new_issue_url_iv] = nil
issue_tracker_data.create(data)
end
+
let!(:missing_new_issue_url) do
data[:encrypted_new_issue_url] = ''
issue_tracker_data.create(data)
end
+
let!(:invalid_project_url) do
data[:encrypted_project_url_iv] = nil
issue_tracker_data.create(data)
end
+
let!(:missing_project_url) do
data[:encrypted_project_url] = nil
data[:encrypted_project_url_iv] = nil
diff --git a/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb b/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb
index 146302ba650..d5208976928 100644
--- a/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb
+++ b/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb
@@ -13,27 +13,35 @@ RSpec.describe RescheduleMigrateIssueTrackersData do
'url' => 'http://example.com'
}
end
+
let!(:jira_service) do
services.create(id: 10, type: 'JiraService', properties: properties, category: 'issue_tracker')
end
+
let!(:jira_service_nil) do
services.create(id: 11, type: 'JiraService', properties: nil, category: 'issue_tracker')
end
+
let!(:bugzilla_service) do
services.create(id: 12, type: 'BugzillaService', properties: properties, category: 'issue_tracker')
end
+
let!(:youtrack_service) do
services.create(id: 13, type: 'YoutrackService', properties: properties, category: 'issue_tracker')
end
+
let!(:youtrack_service_empty) do
services.create(id: 14, type: 'YoutrackService', properties: '', category: 'issue_tracker')
end
+
let!(:gitlab_service) do
services.create(id: 15, type: 'GitlabIssueTrackerService', properties: properties, category: 'issue_tracker')
end
+
let!(:gitlab_service_empty) do
services.create(id: 16, type: 'GitlabIssueTrackerService', properties: {}, category: 'issue_tracker')
end
+
let!(:other_service) do
services.create(id: 17, type: 'OtherService', properties: properties, category: 'other_category')
end
@@ -67,6 +75,7 @@ RSpec.describe RescheduleMigrateIssueTrackersData do
encrypted_issues_url_iv: 'somevalue'
)
end
+
let!(:invalid_issue_tracker_data) do
issue_tracker_data.create(
service_id: bugzilla_service.id,
@@ -74,6 +83,7 @@ RSpec.describe RescheduleMigrateIssueTrackersData do
encrypted_issues_url_iv: nil
)
end
+
let!(:valid_jira_tracker_data) do
jira_tracker_data.create(
service_id: bugzilla_service.id,
@@ -81,6 +91,7 @@ RSpec.describe RescheduleMigrateIssueTrackersData do
encrypted_url_iv: 'somevalue'
)
end
+
let!(:invalid_jira_tracker_data) do
jira_tracker_data.create(
service_id: bugzilla_service.id,
diff --git a/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb b/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb
new file mode 100644
index 00000000000..f9a56bf649d
--- /dev/null
+++ b/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'migrate', '20200728080250_replace_unique_index_on_cycle_analytics_stages.rb')
+
+RSpec.describe ReplaceUniqueIndexOnCycleAnalyticsStages, :migration, schema: 20200728080250 do
+ let(:namespaces) { table(:namespaces) }
+ let(:group_value_streams) { table(:analytics_cycle_analytics_group_value_streams) }
+ let(:group_stages) { table(:analytics_cycle_analytics_group_stages) }
+
+ let(:group) { namespaces.create!(type: 'Group', name: 'test', path: 'test') }
+
+ let(:value_stream_1) { group_value_streams.create!(group_id: group.id, name: 'vs1') }
+ let(:value_stream_2) { group_value_streams.create!(group_id: group.id, name: 'vs2') }
+
+ let(:duplicated_stage_1) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_1.id, name: 'stage', start_event_identifier: 1, end_event_identifier: 1) }
+ let(:duplicated_stage_2) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_2.id, name: 'stage', start_event_identifier: 1, end_event_identifier: 1) }
+
+ let(:stage_record) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_2.id, name: 'other stage', start_event_identifier: 1, end_event_identifier: 1) }
+
+ describe '#down' do
+ subject { described_class.new.down }
+
+ before do
+ described_class.new.up
+
+ duplicated_stage_1
+ duplicated_stage_2
+ stage_record
+ end
+
+ it 'removes duplicated stage records' do
+ subject
+
+ stage = group_stages.find_by_id(duplicated_stage_2.id)
+ expect(stage).to be_nil
+ end
+
+ it 'does not change the first duplicated stage record' do
+ expect { subject }.not_to change { duplicated_stage_1.reload.attributes }
+ end
+
+ it 'does not change not duplicated stage record' do
+ expect { subject }.not_to change { stage_record.reload.attributes }
+ end
+ end
+end
diff --git a/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb b/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb
new file mode 100644
index 00000000000..f7789469efb
--- /dev/null
+++ b/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20200601120434_migrate_all_merge_request_user_mentions_to_db')
+
+RSpec.describe MigrateAllMergeRequestUserMentionsToDb, :migration do
+ let(:users) { table(:users) }
+ let(:projects) { table(:projects) }
+ let(:namespaces) { table(:namespaces) }
+ let(:merge_requests) { table(:merge_requests) }
+ let(:merge_request_user_mentions) { table(:merge_request_user_mentions) }
+
+ let(:user) { users.create!(name: 'root', email: 'root@example.com', username: 'root', projects_limit: 0) }
+ let(:group) { namespaces.create!(name: 'group1', path: 'group1', owner_id: user.id, type: 'Group') }
+ let(:project) { projects.create!(name: 'gitlab1', path: 'gitlab1', namespace_id: group.id, visibility_level: 0) }
+
+ let(:opened_state) { 1 }
+ let(:closed_state) { 2 }
+ let(:merged_state) { 3 }
+
+ # migrateable resources
+ let(:common_args) { { source_branch: 'master', source_project_id: project.id, target_project_id: project.id, author_id: user.id, description: 'mr description with @root mention' } }
+ let!(:resource1) { merge_requests.create!(common_args.merge(title: "title 1", state_id: opened_state, target_branch: 'feature1')) }
+ let!(:resource2) { merge_requests.create!(common_args.merge(title: "title 2", state_id: closed_state, target_branch: 'feature2')) }
+ let!(:resource3) { merge_requests.create!(common_args.merge(title: "title 3", state_id: merged_state, target_branch: 'feature3')) }
+
+ # non-migrateable resources
+ # this merge request is already migrated, as it has a record in the merge_request_user_mentions table
+ let!(:resource4) { merge_requests.create!(common_args.merge(title: "title 3", state_id: opened_state, target_branch: 'feature4')) }
+ let!(:user_mention) { merge_request_user_mentions.create!(merge_request_id: resource4.id, mentioned_users_ids: [1]) }
+
+ let!(:resource5) { merge_requests.create!(common_args.merge(title: "title 3", description: 'description with no mention', state_id: opened_state, target_branch: 'feature5')) }
+
+ it_behaves_like 'schedules resource mentions migration', MergeRequest, false
+end
diff --git a/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb b/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb
new file mode 100644
index 00000000000..dc38695c7fe
--- /dev/null
+++ b/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20200723040950_migrate_incident_issues_to_incident_type.rb')
+
+RSpec.describe MigrateIncidentIssuesToIncidentType do
+ let(:migration) { described_class.new }
+
+ let(:projects) { table(:projects) }
+ let(:namespaces) { table(:namespaces) }
+ let(:labels) { table(:labels) }
+ let(:issues) { table(:issues) }
+ let(:label_links) { table(:label_links) }
+ let(:label_props) { IncidentManagement::CreateIncidentLabelService::LABEL_PROPERTIES }
+
+ let(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
+ let!(:project) { projects.create!(namespace_id: namespace.id) }
+ let(:label) { labels.create!(project_id: project.id, **label_props) }
+ let!(:incident_issue) { issues.create!(project_id: project.id) }
+ let!(:other_issue) { issues.create!(project_id: project.id) }
+
+ # Issue issue_type enum
+ let(:issue_type) { 0 }
+ let(:incident_type) { 1 }
+
+ before do
+ label_links.create!(target_id: incident_issue.id, label_id: label.id, target_type: 'Issue')
+ end
+
+ describe '#up' do
+ it 'updates the incident issue type' do
+ expect { migrate! }
+ .to change { incident_issue.reload.issue_type }
+ .from(issue_type)
+ .to(incident_type)
+
+ expect(other_issue.reload.issue_type).to eql(issue_type)
+ end
+ end
+
+ describe '#down' do
+ let!(:incident_issue) { issues.create!(project_id: project.id, issue_type: issue_type) }
+
+ it 'updates the incident issue type' do
+ migration.up
+
+ expect { migration.down }
+ .to change { incident_issue.reload.issue_type }
+ .from(incident_type)
+ .to(issue_type)
+
+ expect(other_issue.reload.issue_type).to eql(issue_type)
+ end
+ end
+end
diff --git a/spec/migrations/migrate_k8s_service_integration_spec.rb b/spec/migrations/migrate_k8s_service_integration_spec.rb
index a1b2f2ae841..66e30b29f61 100644
--- a/spec/migrations/migrate_k8s_service_integration_spec.rb
+++ b/spec/migrations/migrate_k8s_service_integration_spec.rb
@@ -125,6 +125,7 @@ RSpec.describe MigrateK8sServiceIntegration do
platform_type: :kubernetes
)
end
+
let(:new_cluster) { MigrateK8sServiceIntegration::Cluster.instance_type.last! }
let(:platform) { new_cluster.platform_kubernetes }
diff --git a/spec/migrations/remove_duplicate_labels_from_project_spec.rb b/spec/migrations/remove_duplicate_labels_from_project_spec.rb
index 5e287eaa4ed..5eb8ba96aae 100644
--- a/spec/migrations/remove_duplicate_labels_from_project_spec.rb
+++ b/spec/migrations/remove_duplicate_labels_from_project_spec.rb
@@ -27,6 +27,7 @@ RSpec.describe RemoveDuplicateLabelsFromProject do
projects_table.create!(id: 1, name: 'project', path: 'project',
visibility_level: 0, namespace_id: group_one.id)
end
+
let(:label_title) { 'bug' }
let(:label_color) { 'red' }
let(:label_description) { 'nice label' }
diff --git a/spec/migrations/remove_orphaned_invited_members_spec.rb b/spec/migrations/remove_orphaned_invited_members_spec.rb
index 0474b5362be..10da63518c2 100644
--- a/spec/migrations/remove_orphaned_invited_members_spec.rb
+++ b/spec/migrations/remove_orphaned_invited_members_spec.rb
@@ -22,6 +22,7 @@ RSpec.describe RemoveOrphanedInvitedMembers do
invite_token: SecureRandom.hex, invite_accepted_at: Time.now,
access_level: 20)
end
+
let!(:invited_member2) do
create_member(user_id: nil, source_type: 'Group', source_id: group.id,
invite_token: SecureRandom.hex, invite_accepted_at: Time.now,
@@ -32,6 +33,7 @@ RSpec.describe RemoveOrphanedInvitedMembers do
create_member(user_id: nil, source_type: 'Project', source_id: project.id,
invite_accepted_at: Time.now, access_level: 30)
end
+
let!(:orphaned_member2) do
create_member(user_id: nil, source_type: 'Group', source_id: group.id,
invite_accepted_at: Time.now, access_level: 20)
diff --git a/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb b/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb
new file mode 100644
index 00000000000..ce618449884
--- /dev/null
+++ b/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+require Rails.root.join('db', 'post_migrate', '20200714075739_schedule_populate_personal_snippet_statistics.rb')
+
+RSpec.describe SchedulePopulatePersonalSnippetStatistics do
+ let(:users) { table(:users) }
+ let(:snippets) { table(:snippets) }
+ let(:projects) { table(:projects) }
+ let(:user1) { users.create!(id: 1, email: 'user1@example.com', projects_limit: 10, username: 'test1', name: 'Test1', state: 'active') }
+ let(:user2) { users.create!(id: 2, email: 'user2@example.com', projects_limit: 10, username: 'test2', name: 'Test2', state: 'active') }
+ let(:user3) { users.create!(id: 3, email: 'user3@example.com', projects_limit: 10, username: 'test3', name: 'Test3', state: 'active') }
+
+ def create_snippet(id, user_id, type = 'PersonalSnippet')
+ params = {
+ id: id,
+ type: type,
+ author_id: user_id,
+ file_name: 'foo',
+ content: 'bar'
+ }
+
+ snippets.create!(params)
+ end
+
+ it 'correctly schedules background migrations' do
+ # Creating the snippets in different order
+ create_snippet(1, user1.id)
+ create_snippet(2, user2.id)
+ create_snippet(3, user1.id)
+ create_snippet(4, user3.id)
+ create_snippet(5, user3.id)
+ create_snippet(6, user1.id)
+ # Creating a project snippet to ensure we don't pick it
+ create_snippet(7, user1.id, 'ProjectSnippet')
+
+ stub_const("#{described_class}::BATCH_SIZE", 4)
+
+ Sidekiq::Testing.fake! do
+ Timecop.freeze do
+ migrate!
+
+ aggregate_failures do
+ expect(described_class::MIGRATION)
+ .to be_scheduled_migration([1, 3, 6, 2])
+
+ expect(described_class::MIGRATION)
+ .to be_scheduled_delayed_migration(2.minutes, [4, 5])
+
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ end
+ end
+ end
+ end
+end