FIX: update flair group of all members if primary group setting changed. (#14762)

Previously, if we enable the `primary_group` setting on a group then the `flair_group_id` of its' members are not affected.
This commit is contained in:
Vinoth Kannan 2021-10-28 22:56:44 +05:30 committed by GitHub
parent c62242c6b3
commit deee715a2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 16 deletions

View File

@ -979,23 +979,26 @@ class Group < ActiveRecord::Base
/*where*/
SQL
builder = DB.build(sql)
builder.where(<<~SQL, id: id)
id IN (
SELECT user_id
FROM group_users
WHERE group_id = :id
)
SQL
[:primary_group_id, :flair_group_id].each do |column|
builder = DB.build(sql)
builder.where(<<~SQL, id: id)
id IN (
SELECT user_id
FROM group_users
WHERE group_id = :id
)
SQL
if primary_group
builder.set("primary_group_id = :id")
else
builder.set("primary_group_id = NULL")
builder.where("primary_group_id = :id")
if primary_group
builder.set("#{column} = :id")
builder.where("#{column} IS NULL") if column == :flair_group_id
else
builder.set("#{column} = NULL")
builder.where("#{column} = :id")
end
builder.exec
end
builder.exec
end
end

View File

@ -198,12 +198,19 @@ describe Group do
end
describe '#primary_group=' do
it "updates all members' #primary_group" do
before do
group.add(user)
end
it "updates all members' #primary_group" do
expect { group.update(primary_group: true) }.to change { user.reload.primary_group }.from(nil).to(group)
expect { group.update(primary_group: false) }.to change { user.reload.primary_group }.from(group).to(nil)
end
it "updates all members' #flair_group" do
expect { group.update(primary_group: true) }.to change { user.reload.flair_group }.from(nil).to(group)
expect { group.update(primary_group: false) }.to change { user.reload.flair_group }.from(group).to(nil)
end
end
describe '#title=' do