diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
commit | 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch) | |
tree | 78be5963ec075d80116a932011d695dd33910b4e /spec/migrations | |
parent | 1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff) | |
download | gitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz |
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/migrations')
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 |