mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 15:15:58 +08:00
7ecb258b83
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.
41 lines
1.2 KiB
Ruby
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
|