require 'spec_helper' require Rails.root.join('db', 'migrate', '20171216111734_clean_up_for_members.rb') describe CleanUpForMembers, :migration do let(:migration) { described_class.new } let(:groups) { table(:namespaces) } let!(:group_member) { create_group_member } let!(:unbinded_group_member) { create_group_member } let!(:invited_group_member) { create_group_member(true) } let!(:not_valid_group_member) { create_group_member } let!(:project_member) { create_project_member } let!(:invited_project_member) { create_project_member(true) } let!(:unbinded_project_member) { create_project_member } let!(:not_valid_project_member) { create_project_member } it 'removes members without proper user_id' do unbinded_group_member.update_column(:user_id, nil) not_valid_group_member.update_column(:user_id, 9999) unbinded_project_member.update_column(:user_id, nil) not_valid_project_member.update_column(:user_id, 9999) migrate! expect(Member.all).not_to include(unbinded_group_member, not_valid_group_member, unbinded_project_member, not_valid_project_member) expect(Member.all).to include(group_member, invited_group_member, project_member, invited_project_member) end def create_group_member(invited = false) fill_member(GroupMember.new(source_id: create_group.id, source_type: 'Namespace'), invited) end def create_project_member(invited = false) fill_member(ProjectMember.new(project: create_project), invited) end def fill_member(member_object, invited) member_object.tap do |m| m.access_level = 40 m.notification_level = 3 if invited m.user_id = nil m.invite_token = 'xxx' m.invite_email = 'email@email.com' else m.user_id = create_user.id end m.save end member_object end def create_group name = FFaker::Lorem.characters(10) groups.create!(type: 'Group', name: name, path: name.downcase.gsub(/\s/, '_')) end def create_project name = FFaker::Lorem.characters(10) creator = create_user Project.create(name: name, path: name.downcase.gsub(/\s/, '_'), namespace: creator.namespace, creator: creator) end def create_user User.create(email: FFaker::Internet.email, password: '12345678', name: FFaker::Name.name, username: FFaker::Internet.user_name, confirmed_at: Time.now, confirmation_token: nil) end end