diff options
Diffstat (limited to 'spec/migrations/orphaned_invited_members_cleanup_spec.rb')
-rw-r--r-- | spec/migrations/orphaned_invited_members_cleanup_spec.rb | 46 |
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 |