FEATURE: Warn a user when they have few likes remaining

This commit is contained in:
Robin Ward
2016-03-18 11:17:51 -04:00
parent 1fba835d4f
commit 5d4ee2ca1d
9 changed files with 75 additions and 17 deletions

View File

@ -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

View File

@ -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