Skip to content

Commit 51e1bb6

Browse files
committed
Don't include deleted groups in widget generation
If a group was previously subscribed to the widget, we shouldn't generate content for it. We should properly update widgets when groups are removed but for now, this allows the content generator to work with widgets having orphaned group references. Extracted from ManageIQ#23404 CP4AIOPS-15687
1 parent 6253fa0 commit 51e1bb6

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

app/models/miq_widget.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ def grouped_subscribers
407407
groups_by_id = MiqGroup.in_my_region.where(:id => grouped_users.keys).index_by(&:id)
408408
users_by_userid = User.in_my_region.where(:userid => grouped_users.values.flatten.uniq).index_by(&:userid)
409409
grouped_users.each_with_object({}) do |(k, v), h|
410+
next unless groups_by_id.key?(k)
410411
user_objs = users_by_userid.values_at(*v).reject(&:blank?)
411412
h[groups_by_id[k]] = user_objs if user_objs.present?
412413
end

spec/models/miq_widget_spec.rb

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@
177177
expect(result[@group1]).to match_array([@user1])
178178
end
179179

180+
it 'ignores a group that no longer exists' do
181+
@user1.update(:miq_groups => [@group2])
182+
@group1.destroy
183+
result = @widget_report_vendor_and_guest_os.reload.grouped_subscribers
184+
expect(result.size).to eq(0)
185+
end
186+
180187
it 'ignores the group that has no members' do
181188
@user1.delete
182189
result = @widget_report_vendor_and_guest_os.grouped_subscribers
@@ -300,8 +307,8 @@ def add_dashboard_for_user(db_name, userid, group)
300307
MiqReport.seed_report("Top CPU Consumers weekly")
301308

302309
role1 = FactoryBot.create(:miq_user_role, :name => 'EvmRole-support')
303-
group1 = FactoryBot.create(:miq_group, :description => "EvmGroup-support", :miq_user_role => role1)
304-
user1 = FactoryBot.create(:user, :miq_groups => [group1])
310+
@group1 = FactoryBot.create(:miq_group, :description => "EvmGroup-support", :miq_user_role => role1)
311+
user1 = FactoryBot.create(:user, :miq_groups => [@group1])
305312

306313
@user2 = FactoryBot.create(:user_admin)
307314
@group2 = @user2.current_group
@@ -332,7 +339,7 @@ def add_dashboard_for_user(db_name, userid, group)
332339
read_only: true
333340
')
334341

335-
ws1 = FactoryBot.create(:miq_widget_set, :name => "default", :userid => user1.userid, :owner => group1)
342+
ws1 = FactoryBot.create(:miq_widget_set, :name => "default", :userid => user1.userid, :owner => @group1)
336343
ws2 = FactoryBot.create(:miq_widget_set, :name => "default", :userid => @user2.userid, :owner => @group2)
337344

338345
@widget = MiqWidget.sync_from_hash(attrs)
@@ -407,6 +414,17 @@ def add_dashboard_for_user(db_name, userid, group)
407414
expect(task_id).to be_nil
408415
end
409416

417+
it "does not generate content for a deleted group" do
418+
@widget.visibility[:roles] = "_ALL_"
419+
@group2.delete
420+
421+
expect(@widget).to receive(:queue_generate_content_for_users_or_group).with("MiqGroup", @group1.description, any_args).once
422+
task_id = @widget.queue_generate_content
423+
424+
expect(MiqTask.count).to eq(1)
425+
expect(task_id).to eq(MiqTask.first.id)
426+
end
427+
410428
it "does not generate content if content_type of widget is 'menu'" do
411429
@widget.update(:content_type => "menu")
412430
expect(@widget).not_to receive(:queue_generate_content_for_users_or_group)

0 commit comments

Comments
 (0)