FIX: user's default group should only be set once

Setting a user's default groups based on their email address should only be done once, ie. when they confirm their email address.
Previously we were doing this everytime we'd save a user record 🤷
This commit is contained in:
Régis Hanol
2017-06-14 19:20:18 +02:00
parent 27ca05d94c
commit d6c63cc5b2
6 changed files with 32 additions and 45 deletions

View File

@@ -8,19 +8,21 @@ describe Jobs::AutomaticGroupMembership do
end
it "updates the membership" do
user1 = Fabricate(:user, email: "foo@wat.com")
user2 = Fabricate(:user, email: "foo@bar.com")
user3 = Fabricate(:user, email: "bar@wat.com", staged: true)
user4 = Fabricate(:user, email: "abc@wat.com", active: false)
user1 = Fabricate(:user, email: "no@bar.com")
user2 = Fabricate(:user, email: "no@wat.com")
user3 = Fabricate(:user, email: "noo@wat.com", staged: true)
user4 = Fabricate(:user, email: "yes@wat.com")
EmailToken.confirm(user4.email_tokens.last.token)
group = Fabricate(:group, automatic_membership_email_domains: "wat.com", automatic_membership_retroactive: true)
Jobs::AutomaticGroupMembership.new.execute(group_id: group.id)
group.reload
expect(group.users.include?(user1)).to eq(true)
expect(group.users.include?(user1)).to eq(false)
expect(group.users.include?(user2)).to eq(false)
expect(group.users.include?(user3)).to eq(false)
expect(group.users.include?(user4)).to eq(false)
expect(group.users.include?(user4)).to eq(true)
end
end

View File

@@ -1220,29 +1220,16 @@ describe User do
)
}
it "doesn't automatically add inactive users" do
inactive_user = Fabricate(:user, active: false, email: "wat@wat.com")
group.reload
expect(group.users.include?(inactive_user)).to eq(false)
end
it "doesn't automatically add users with unconfirmed email" do
unconfirmed_email_user = Fabricate(:user, active: true, email: "wat@wat.com")
unconfirmed_email_user.email_tokens.create(email: unconfirmed_email_user.email)
group.reload
expect(group.users.include?(unconfirmed_email_user)).to eq(false)
end
it "doesn't automatically add staged users" do
staged_user = Fabricate(:user, active: true, staged: true, email: "wat@wat.com")
EmailToken.confirm(staged_user.email_tokens.last.token)
group.reload
expect(group.users.include?(staged_user)).to eq(false)
end
it "is automatically added to a group when the email matches" do
user = Fabricate(:user, active: true, email: "foo@bar.com")
email_token = user.email_tokens.create(email: user.email).token
EmailToken.confirm(email_token)
EmailToken.confirm(user.email_tokens.last.token)
group.reload
expect(group.users.include?(user)).to eq(true)
@@ -1263,8 +1250,7 @@ describe User do
user.password_required!
user.save!
email_token = user.email_tokens.create(email: user.email).token
EmailToken.confirm(email_token)
EmailToken.confirm(user.email_tokens.last.token)
user.reload
expect(user.title).to eq("bars and wats")