DEV: Consolidate and remove duplicated liked notifications tests.

This commit is contained in:
Guo Xiang Tan 2019-01-17 11:08:03 +08:00
parent 2fad75306d
commit b4c2d49b0c
2 changed files with 93 additions and 123 deletions

View File

@ -280,20 +280,103 @@ describe PostAction do
end
it 'should generate and remove notifications correctly' do
expect do
PostAction.act(codinghorror, post, PostActionType.types[:like])
end.to change { Notification.count }.by(1)
PostAction.act(codinghorror, post, PostActionType.types[:like])
expect(Notification.count).to eq(1)
notification = Notification.last
expect(notification.user_id).to eq(post.user_id)
expect(notification.notification_type).to eq(Notification.types[:liked])
expect do
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
end.to change { Notification.count }.by(-1)
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
expect(Notification.exists?(id: notification.id)).to eq(false)
expect(Notification.count).to eq(0)
PostAction.act(codinghorror, post, PostActionType.types[:like])
expect(Notification.count).to eq(1)
notification = Notification.last
expect(notification.user_id).to eq(post.user_id)
expect(notification.notification_type).to eq(Notification.types[:liked])
end
it 'should not notify when never is selected' do
post.user.user_option.update!(
like_notification_frequency:
UserOption.like_notification_frequency_type[:never]
)
expect do
PostAction.act(codinghorror, post, PostActionType.types[:like])
end.to_not change { Notification.count }
end
it 'notifies on likes correctly' do
PostAction.act(eviltrout, post, PostActionType.types[:like])
PostAction.act(admin, post, PostActionType.types[:like])
# one like
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(1)
post.user.user_option.update!(
like_notification_frequency: UserOption.like_notification_frequency_type[:always]
)
admin2 = Fabricate(:admin)
# Travel 1 hour in time to test that order post_actions by `created_at`
freeze_time 1.hour.from_now
expect do
PostAction.act(admin2, post, PostActionType.types[:like])
end.to_not change { Notification.count }
# adds info to the notification
notification = Notification.find_by(
post_number: 1,
topic_id: post.topic_id
)
expect(notification.data_hash["count"].to_i).to eq(2)
expect(notification.data_hash["username2"]).to eq(eviltrout.username)
# this is a tricky thing ... removing a like should fix up the notifications
PostAction.remove_act(eviltrout, post, PostActionType.types[:like])
# rebuilds the missing notification
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(1)
notification = Notification.find_by(
post_number: 1,
topic_id: post.topic_id
)
expect(notification.data_hash["count"]).to eq(2)
expect(notification.data_hash["username"]).to eq(admin2.username)
expect(notification.data_hash["username2"]).to eq(admin.username)
post.user.user_option.update!(
like_notification_frequency:
UserOption.like_notification_frequency_type[:first_time_and_daily]
)
# this gets skipped
admin3 = Fabricate(:admin)
PostAction.act(admin3, post, PostActionType.types[:like])
freeze_time 2.days.from_now
admin4 = Fabricate(:admin)
PostAction.act(admin4, post, PostActionType.types[:like])
# first happend within the same day, no need to notify
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(2)
end
describe 'likes consolidation' do
@ -411,7 +494,6 @@ describe PostAction do
it "should generate a notification if liker is an admin irregardles of \
muting" do
# you can not mute admin, sorry
MutedUser.create!(user_id: post.user.id, muted_user_id: admin.id)
expect do
@ -440,18 +522,21 @@ describe PostAction do
post.reload
expect(post.like_count).to eq(2)
expect(post.like_score).to eq(4)
expect(post.topic.like_count).to eq(2)
# Removing likes
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
post.reload
expect(post.like_count).to eq(1)
expect(post.like_score).to eq(3)
expect(post.topic.like_count).to eq(1)
expect(value_for(codinghorror.id, Date.today)).to eq(0)
PostAction.remove_act(moderator, post, PostActionType.types[:like])
post.reload
expect(post.like_count).to eq(0)
expect(post.like_score).to eq(0)
expect(post.topic.like_count).to eq(0)
end
it "shouldn't change given_likes unless likes are given or removed" do
@ -473,25 +558,6 @@ describe PostAction do
expect(actual_count).to eq(1), "Expected likes_given to be 1 when removing '#{type_name}', but got #{actual_count}"
end
end
it 'should increase the like counts when a user votes' do
expect {
PostAction.act(codinghorror, post, PostActionType.types[:like])
post.reload
}.to change(post, :like_count).by(1)
end
it 'should increase the forum topic vote count when a user votes' do
expect {
PostAction.act(codinghorror, post, PostActionType.types[:like])
post.topic.reload
}.to change(post.topic, :like_count).by(1)
expect {
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
post.topic.reload
}.to change(post.topic, :like_count).by(-1)
end
end
describe 'flagging' do

View File

@ -160,102 +160,6 @@ describe PostAlerter do
end
end
context 'likes' do
it 'notifies on likes after an undo' do
PostActionNotifier.enable
post = Fabricate(:post, raw: 'I love waffles')
PostAction.act(evil_trout, post, PostActionType.types[:like])
PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
PostAction.act(evil_trout, post, PostActionType.types[:like])
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count).to eq(1)
end
it 'notifies on does not notify when never is selected' do
PostActionNotifier.enable
post = Fabricate(:post, raw: 'I love waffles')
post.user.user_option.update_columns(like_notification_frequency:
UserOption.like_notification_frequency_type[:never])
PostAction.act(evil_trout, post, PostActionType.types[:like])
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count).to eq(0)
end
it 'notifies on likes correctly' do
PostActionNotifier.enable
post = Fabricate(:post, raw: 'I love waffles')
PostAction.act(evil_trout, post, PostActionType.types[:like])
admin = Fabricate(:admin)
PostAction.act(admin, post, PostActionType.types[:like])
# one like
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(1)
post.user.user_option.update_columns(
like_notification_frequency: UserOption.like_notification_frequency_type[:always]
)
admin2 = Fabricate(:admin)
# Travel 1 hour in time to test that order post_actions by `created_at`
freeze_time 1.hour.from_now
PostAction.act(admin2, post, PostActionType.types[:like])
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(1)
# adds info to the notification
notification = Notification.find_by(
post_number: 1,
topic_id: post.topic_id
)
expect(notification.data_hash["count"].to_i).to eq(2)
expect(notification.data_hash["username2"]).to eq(evil_trout.username)
# this is a tricky thing ... removing a like should fix up the notifications
PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
# rebuilds the missing notification
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count)
.to eq(1)
notification = Notification.find_by(
post_number: 1,
topic_id: post.topic_id
)
expect(notification.data_hash["count"]).to eq(2)
expect(notification.data_hash["username"]).to eq(admin2.username)
expect(notification.data_hash["username2"]).to eq(admin.username)
post.user.user_option.update_columns(like_notification_frequency:
UserOption.like_notification_frequency_type[:first_time_and_daily])
# this gets skipped
admin3 = Fabricate(:admin)
PostAction.act(admin3, post, PostActionType.types[:like])
freeze_time 2.days.from_now
admin4 = Fabricate(:admin)
PostAction.act(admin4, post, PostActionType.types[:like])
# first happend within the same day, no need to notify
expect(Notification.where(post_number: 1, topic_id: post.topic_id).count).to eq(2)
end
end
context 'quotes' do
it 'does not notify for muted users' do