* Bump rubocop from 1.15.0 to 1.16.0 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.15.0...v1.16.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Enable new cops and fix violations Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: rhymes <github@rhymes.dev>
88 lines
3.2 KiB
Ruby
88 lines
3.2 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe Notifications::Milestone::Send, type: :service do
|
|
def send_milestone_notification_view
|
|
described_class.call("View", article)
|
|
end
|
|
|
|
def send_milestone_notification_reaction
|
|
described_class.call("Reaction", article)
|
|
end
|
|
|
|
let(:user) { create(:user) }
|
|
let(:article) { create(:article, user_id: user.id, page_views_count: 4000, public_reactions_count: 70) }
|
|
|
|
context "when a user has never received a milestone notification" do
|
|
it "sends the appropriate level view milestone notification" do
|
|
send_milestone_notification_view
|
|
expect(user.notifications.first.action).to include "2048"
|
|
end
|
|
|
|
it "sends the appropriate level reaction milestone notification" do
|
|
send_milestone_notification_reaction
|
|
expect(user.notifications.first.action).to include "64"
|
|
end
|
|
end
|
|
|
|
context "when a user has received a milestone notification before" do
|
|
def mock_previous_view_milestone_notification
|
|
send_milestone_notification_view
|
|
article.update_column(:page_views_count, 9001)
|
|
send_milestone_notification_view
|
|
end
|
|
|
|
def mock_previous_reaction_milestone_notification
|
|
send_milestone_notification_reaction
|
|
article.update_column(:public_reactions_count, 150)
|
|
send_milestone_notification_reaction
|
|
end
|
|
|
|
describe "When send view type milestone notification" do
|
|
before do
|
|
mock_previous_view_milestone_notification
|
|
end
|
|
|
|
it "sends the appropriate level view milestone notification" do
|
|
expect(user.notifications.second.action).to include "8192"
|
|
end
|
|
|
|
it "adds an additional view milestone notification" do
|
|
expect(user.notifications.count).to eq 2
|
|
end
|
|
|
|
it "does not the same view milestone notification if called again" do
|
|
send_milestone_notification_view
|
|
expect(user.notifications.count).to eq 2
|
|
end
|
|
|
|
it "does not send a view milestone notification again if the latest num of views isn't past the next milestone" do
|
|
article.update_column(:page_views_count, rand(9002..16_383))
|
|
send_milestone_notification_view
|
|
expect(user.notifications.count).to eq 2
|
|
end
|
|
|
|
it "checks notification json data", :aggregate_failures do
|
|
nots = user.notifications
|
|
expect(nots.where(notifiable_type: "Article").first.json_data["article"]["class"]["name"]).to eq("Article")
|
|
expect(nots.where(notifiable_id: article.id).first.json_data["article"]["id"]).to eq(article.id)
|
|
expect(nots.where(notifiable_id: article.id).first.json_data["article"]["title"]).to eq(article.title)
|
|
end
|
|
end
|
|
|
|
it "sends the appropriate level reaction milestone notification" do
|
|
mock_previous_reaction_milestone_notification
|
|
expect(user.notifications.last.action).to include "128"
|
|
end
|
|
|
|
context "when an article is related to an organization" do
|
|
let(:organization) { create(:organization) }
|
|
|
|
before { article.organization = organization }
|
|
|
|
it "creates another notification related to organization" do
|
|
coll = Notification.where(organization_id: article.organization_id)
|
|
expect { send_milestone_notification_reaction }.to change { coll.count }.by(1)
|
|
end
|
|
end
|
|
end
|
|
end
|