summaryrefslogtreecommitdiff
path: root/spec/migrations/orphaned_invited_members_cleanup_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/migrations/orphaned_invited_members_cleanup_spec.rb')
-rw-r--r--spec/migrations/orphaned_invited_members_cleanup_spec.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/spec/migrations/orphaned_invited_members_cleanup_spec.rb b/spec/migrations/orphaned_invited_members_cleanup_spec.rb
new file mode 100644
index 00000000000..4427e707f56
--- /dev/null
+++ b/spec/migrations/orphaned_invited_members_cleanup_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe OrphanedInvitedMembersCleanup, :migration do
+ describe '#up', :aggregate_failures do
+ it 'removes accepted members with no associated user' do
+ user = create_user!('testuser1')
+
+ create_member(invite_token: nil, invite_accepted_at: 1.day.ago)
+ record2 = create_member(invite_token: nil, invite_accepted_at: 1.day.ago, user_id: user.id)
+ record3 = create_member(invite_token: 'foo2', invite_accepted_at: nil)
+ record4 = create_member(invite_token: 'foo3', invite_accepted_at: 1.day.ago)
+
+ migrate!
+
+ expect(table(:members).all.pluck(:id)).to match_array([record2.id, record3.id, record4.id])
+ end
+ end
+
+ private
+
+ def create_user!(name)
+ email = "#{name}@example.com"
+
+ table(:users).create!(
+ name: name,
+ email: email,
+ username: name,
+ projects_limit: 0
+ )
+ end
+
+ def create_member(**extra_attributes)
+ defaults = {
+ access_level: 10,
+ source_id: 1,
+ source_type: "Project",
+ notification_level: 0,
+ type: 'ProjectMember'
+ }
+
+ table(:members).create!(defaults.merge(extra_attributes))
+ end
+end