jam-cloud/ruby/spec/jam_ruby/models/broadcast_notification_spec.rb

67 lines
2.0 KiB
Ruby

require 'spec_helper'
describe BroadcastNotification do
let(:broadcast1) { FactoryBot.create(:broadcast_notification) }
let(:broadcast2) { FactoryBot.create(:broadcast_notification) }
let(:broadcast3) { FactoryBot.create(:broadcast_notification) }
let(:broadcast4) { FactoryBot.create(:broadcast_notification) }
let(:user1) { FactoryBot.create(:user) }
let(:user2) { FactoryBot.create(:user) }
let(:user3) { FactoryBot.create(:user) }
let(:user4) { FactoryBot.create(:user) }
before(:each) do
BroadcastNotificationView.delete_all
end
it 'created broadcast' do
expect(broadcast1.title).not_to be_empty
expect(broadcast1.frequency).to be > 0
end
it 'gets view incremented' do
bnv = broadcast1.did_view(user1)
bnv = broadcast1.did_view(user1)
bnv.view_count.should eq(2)
end
it 'loads viewable broadcasts for a user' do
broadcast1.touch
broadcast2.touch
broadcast3.touch
broadcast4.touch
bns = BroadcastNotification.viewable_notifications(user1)
bns.length.should eq(4)
broadcast2.frequency.times { |nn| broadcast2.did_view(user1) }
broadcast3.did_view(user1)
broadcast1.did_view(user1)
broadcast4.did_view(user2)
bns = BroadcastNotification.viewable_notifications(user1)
expect(bns.length).to be(3)
expect(bns[0].id).to eq(broadcast4.id)
expect(bns.detect {|bb| bb.id==broadcast2.id }).to be_nil
# now view broadcast 4, since it hasn't been seen, which should bring broadcast 3 up as next since it was seen longest ago
broadcast4.did_view(user1)
expect(BroadcastNotification.next_broadcast(user1).id).to eq(broadcast3.id)
end
it 'generates frequency distribution' do
4.times { |nn| broadcast1.did_view(user1) }
5.times { |nn| broadcast1.did_view(user2) }
5.times { |nn| broadcast1.did_view(user3) }
8.times { |nn| broadcast1.did_view(user4) }
distrib = broadcast1.frequency_distribution
expect(distrib.count).to be == 3
expect(distrib[4]).to be == 1
expect(distrib[5]).to be == 2
expect(distrib[8]).to be == 1
end
end