mirror of
https://github.com/discourse/discourse.git
synced 2025-06-25 11:11:34 +08:00
FEATURE: Warn a user when they have few likes remaining
This commit is contained in:
@ -39,6 +39,16 @@ describe RateLimiter do
|
||||
end
|
||||
end
|
||||
|
||||
context "remaining" do
|
||||
it "updates correctly" do
|
||||
expect(rate_limiter.remaining).to eq(2)
|
||||
rate_limiter.performed!
|
||||
expect(rate_limiter.remaining).to eq(1)
|
||||
rate_limiter.performed!
|
||||
expect(rate_limiter.remaining).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context "multiple calls" do
|
||||
before do
|
||||
rate_limiter.performed!
|
||||
@ -47,6 +57,7 @@ describe RateLimiter do
|
||||
|
||||
it "returns false for can_perform when the limit has been hit" do
|
||||
expect(rate_limiter.can_perform?).to eq(false)
|
||||
expect(rate_limiter.remaining).to eq(0)
|
||||
end
|
||||
|
||||
it "raises an error the third time called" do
|
||||
@ -54,10 +65,10 @@ describe RateLimiter do
|
||||
end
|
||||
|
||||
context "as an admin/moderator" do
|
||||
|
||||
it "returns true for can_perform if the user is an admin" do
|
||||
user.admin = true
|
||||
expect(rate_limiter.can_perform?).to eq(true)
|
||||
expect(rate_limiter.remaining).to eq(2)
|
||||
end
|
||||
|
||||
it "doesn't raise an error when an admin performs the task" do
|
||||
@ -74,8 +85,6 @@ describe RateLimiter do
|
||||
user.moderator = true
|
||||
expect { rate_limiter.performed! }.not_to raise_error
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
context "rollback!" do
|
||||
@ -90,7 +99,6 @@ describe RateLimiter do
|
||||
it "raises no error now that there is room" do
|
||||
expect { rate_limiter.performed! }.not_to raise_error
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -12,6 +12,10 @@ describe PostAction do
|
||||
let(:second_post) { Fabricate(:post, topic_id: post.topic_id) }
|
||||
let(:bookmark) { PostAction.new(user_id: post.user_id, post_action_type_id: PostActionType.types[:bookmark] , post_id: post.id) }
|
||||
|
||||
def value_for(user_id, dt)
|
||||
GivenDailyLike.find_for(user_id, dt).pluck(:likes_given)[0] || 0
|
||||
end
|
||||
|
||||
describe "rate limits" do
|
||||
|
||||
it "limits redo/undo" do
|
||||
@ -172,7 +176,7 @@ describe PostAction do
|
||||
# we need this to test it
|
||||
TopicUser.change(codinghorror, post.topic, posted: true)
|
||||
|
||||
expect(GivenDailyLike.value_for(moderator.id, Date.today)).to eq(0)
|
||||
expect(value_for(moderator.id, Date.today)).to eq(0)
|
||||
|
||||
PostAction.act(moderator, post, PostActionType.types[:like])
|
||||
PostAction.act(codinghorror, second_post, PostActionType.types[:like])
|
||||
@ -180,7 +184,7 @@ describe PostAction do
|
||||
post.topic.reload
|
||||
expect(post.topic.like_count).to eq(2)
|
||||
|
||||
expect(GivenDailyLike.value_for(moderator.id, Date.today)).to eq(1)
|
||||
expect(value_for(moderator.id, Date.today)).to eq(1)
|
||||
|
||||
tu = TopicUser.get(post.topic, codinghorror)
|
||||
expect(tu.liked).to be true
|
||||
@ -251,7 +255,7 @@ describe PostAction do
|
||||
expect(post.like_score).to eq(1)
|
||||
post.topic.reload
|
||||
expect(post.topic.like_count).to eq(1)
|
||||
expect(GivenDailyLike.value_for(codinghorror.id, Date.today)).to eq(1)
|
||||
expect(value_for(codinghorror.id, Date.today)).to eq(1)
|
||||
|
||||
# When a staff member likes it
|
||||
PostAction.act(moderator, post, PostActionType.types[:like])
|
||||
@ -264,7 +268,7 @@ describe PostAction do
|
||||
post.reload
|
||||
expect(post.like_count).to eq(1)
|
||||
expect(post.like_score).to eq(3)
|
||||
expect(GivenDailyLike.value_for(codinghorror.id, Date.today)).to eq(0)
|
||||
expect(value_for(codinghorror.id, Date.today)).to eq(0)
|
||||
|
||||
PostAction.remove_act(moderator, post, PostActionType.types[:like])
|
||||
post.reload
|
||||
|
Reference in New Issue
Block a user