FIX: Fix the issue of spec case execution failure.

This commit is contained in:
zhanfeng.zeng 2025-05-21 11:15:48 +08:00
parent 4cdc5c64d5
commit a7bb1b12d0
1 changed files with 32 additions and 31 deletions

View File

@ -28,11 +28,7 @@ describe DiscourseSolved::AnswerController do
it "applies rate limits to regular users" do it "applies rate limits to regular users" do
sign_in(user) sign_in(user)
# First request should succeed # Should be rate limited
post "/solution/accept.json", params: { id: solution_post.id }
expect(response.status).to eq(200)
# Second request should be rate limited
RateLimiter.any_instance.expects(:performed!).raises(RateLimiter::LimitExceeded.new(60)) RateLimiter.any_instance.expects(:performed!).raises(RateLimiter::LimitExceeded.new(60))
post "/solution/accept.json", params: { id: solution_post.id } post "/solution/accept.json", params: { id: solution_post.id }
expect(response.status).to eq(429) expect(response.status).to eq(429)
@ -41,38 +37,43 @@ describe DiscourseSolved::AnswerController do
it "does not apply rate limits to staff" do it "does not apply rate limits to staff" do
sign_in(staff_user) sign_in(staff_user)
# Staff can make multiple requests without hitting limits
post "/solution/accept.json", params: { id: solution_post.id }
expect(response.status).to eq(200)
post "/solution/accept.json", params: { id: solution_post.id } post "/solution/accept.json", params: { id: solution_post.id }
expect(response.status).to eq(200) expect(response.status).to eq(200)
end end
end end
context "with plugin modifier" do context "with plugin modifier" do
it "allows plugins to bypass rate limiting" do it "allows plugins to bypass rate limiting" do
sign_in(user) sign_in(user)
# Store the block in a variable so we can reference it for unregistration # Create a mock plugin instance with enabled? method
block = ->(_, _) { false } plugin_instance = Object.new
# Register modifier with proper parameters - plugin instance (self) and name def plugin_instance.enabled?
DiscoursePluginRegistry.register_modifier( true
self, end
:solved_answers_controller_run_rate_limiter,
&block # Store the block in a variable so we can reference it for unregistration
) block = ->(_, _) { false }
post "/solution/accept.json", params: { id: solution_post.id }
expect(response.status).to eq(200) # Register modifier with proper parameters - using mock plugin instance instead of self
post "/solution/accept.json", params: { id: solution_post.id } DiscoursePluginRegistry.register_modifier(
expect(response.status).to eq(200) plugin_instance,
# Unregister with the same plugin instance and block :solved_answers_controller_run_rate_limiter,
DiscoursePluginRegistry.unregister_modifier( &block
self, # plugin_instance parameter )
:solved_answers_controller_run_rate_limiter, # name parameter
&block # same block used for registration post "/solution/accept.json", params: { id: solution_post.id }
) expect(response.status).to eq(200)
end post "/solution/accept.json", params: { id: solution_post.id }
end expect(response.status).to eq(200)
# Unregister with the same plugin instance and block
DiscoursePluginRegistry.unregister_modifier(
plugin_instance, # Using the same mock plugin instance
:solved_answers_controller_run_rate_limiter,
&block
)
end
end
end end
describe "#unaccept" do describe "#unaccept" do
before do before do