discourse/spec/services/admin_notices/dismiss_spec.rb
Ted Johansson 7ecb258b83
FIX: Support idempotent admin notice dismissal (#29099)
If you have the admin dashboard open, and one of the admin notices listed has already been dismissed (e.g. in another tab, or by another admin) we would show an ugly "FAILED" modal.

This change makes the admin dismiss endpoint idempotent. If the admin notice is already destroyed, then respond with 200. This will also correctly remove it from the list in the front-end.
2024-10-07 12:29:33 +08:00

41 lines
1.2 KiB
Ruby

# frozen_string_literal: true
RSpec.describe(AdminNotices::Dismiss) do
subject(:result) { described_class.call(id: admin_notice.id, guardian: current_user.guardian) }
let!(:admin_notice) { Fabricate(:admin_notice, identifier: "problem.test") }
let!(:problem_check) { Fabricate(:problem_check_tracker, identifier: "problem.test", blips: 3) }
context "when user is not allowed to perform the action" do
fab!(:current_user) { Fabricate(:user) }
it { is_expected.to fail_a_policy(:invalid_access) }
end
context "when the admin notice has already been dismissed" do
fab!(:current_user) { Fabricate(:admin) }
before { admin_notice.destroy! }
it { is_expected.to run_successfully }
end
context "when user is allowed to perform the action" do
fab!(:current_user) { Fabricate(:admin) }
it { is_expected.to run_successfully }
it "sets the service result as successful" do
expect(result).to be_a_success
end
it "destroys the admin notice" do
expect { result }.to change { AdminNotice.count }.from(1).to(0)
end
it "resets any associated problem check" do
expect { result }.to change { problem_check.reload.blips }.from(3).to(0)
end
end
end