Add vote functionality to tracks
This commit is contained in:
parent
8b2f2b538e
commit
92b09c7de4
18 changed files with 237 additions and 19 deletions
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
FactoryBot.define do
|
||||
factory :vote do
|
||||
event
|
||||
user
|
||||
rating { 1 }
|
||||
|
||||
association :votable, factory: :event
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ feature 'Version' do
|
|||
conference.program.rating = 1
|
||||
create(:event, program: conference.program, title: 'My first event')
|
||||
event = create(:event, program: conference.program, title: 'My second event')
|
||||
create(:vote, user: organizer, event: event)
|
||||
create(:vote, user: organizer, votable: event)
|
||||
Vote.last.destroy
|
||||
PaperTrail::Version.last.reify.save
|
||||
|
||||
|
|
|
|||
|
|
@ -227,13 +227,13 @@ describe Event do
|
|||
end
|
||||
|
||||
it 'returns 0 if the event has no votes from that user' do
|
||||
create(:vote, user: another_user, event: event)
|
||||
create(:vote, user: another_user, votable: event)
|
||||
expect(event.user_rating(user)).to eq 0
|
||||
end
|
||||
|
||||
it 'returns the rating if the event has votes from that user' do
|
||||
create(:vote, user: another_user, event: event, rating: 3)
|
||||
create(:vote, user: user, event: event, rating: 2)
|
||||
create(:vote, user: another_user, votable: event, rating: 3)
|
||||
create(:vote, user: user, votable: event, rating: 2)
|
||||
expect(event.user_rating(user)).to eq 2
|
||||
end
|
||||
end
|
||||
|
|
@ -244,17 +244,17 @@ describe Event do
|
|||
end
|
||||
|
||||
it 'returns false if the event has no votes by that user' do
|
||||
create(:vote, user: another_user, event: event)
|
||||
create(:vote, user: another_user, votable: event)
|
||||
expect(event.voted?(user)).to eq false
|
||||
end
|
||||
|
||||
it 'returns true when the event has votes' do
|
||||
create(:vote, user: another_user, event: event)
|
||||
create(:vote, user: another_user, votable: event)
|
||||
expect(event.voted?).to eq true
|
||||
end
|
||||
|
||||
it 'returns true when the event has votes by that user' do
|
||||
create(:vote, user: user, event: event)
|
||||
create(:vote, user: user, votable: event)
|
||||
expect(event.voted?(user)).to eq true
|
||||
end
|
||||
end
|
||||
|
|
@ -269,8 +269,8 @@ describe Event do
|
|||
context 'returns the average voting' do
|
||||
before :each do
|
||||
another_user = create(:user)
|
||||
create(:vote, user: user, event: event, rating: 1)
|
||||
create(:vote, user: another_user, event: event, rating: 3)
|
||||
create(:vote, user: user, votable: event, rating: 1)
|
||||
create(:vote, user: another_user, votable: event, rating: 3)
|
||||
end
|
||||
|
||||
it 'when there are votes and the average is integer' do
|
||||
|
|
@ -279,7 +279,7 @@ describe Event do
|
|||
|
||||
it 'when there are votes and the average is float' do
|
||||
new_user = create(:user)
|
||||
create(:vote, user: new_user, event: event, rating: 3)
|
||||
create(:vote, user: new_user, votable: event, rating: 3)
|
||||
expect(event.average_rating).to eq '2.33'
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ describe Track do
|
|||
subject { create(:track) }
|
||||
let(:track) { create(:track) }
|
||||
let(:self_organized_track) { create(:track, :self_organized) }
|
||||
let(:user) { create(:user) }
|
||||
let(:another_user) { create(:user) }
|
||||
|
||||
describe 'association' do
|
||||
it { is_expected.to belong_to(:program) }
|
||||
|
|
@ -110,6 +112,70 @@ describe Track do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#user_rating' do
|
||||
it 'returns 0 if the track has no votes' do
|
||||
expect(track.user_rating(user)).to eq 0
|
||||
end
|
||||
|
||||
it 'returns 0 if the track has no votes from that user' do
|
||||
create(:vote, user: another_user, votable: track)
|
||||
expect(track.user_rating(user)).to eq 0
|
||||
end
|
||||
|
||||
it 'returns the rating if the track has votes from that user' do
|
||||
create(:vote, user: another_user, votable: track, rating: 3)
|
||||
create(:vote, user: user, votable: track, rating: 2)
|
||||
expect(track.user_rating(user)).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
describe '#voted?' do
|
||||
it 'returns false if the track has no votes' do
|
||||
expect(track.voted?).to eq false
|
||||
end
|
||||
|
||||
it 'returns false if the track has no votes by that user' do
|
||||
create(:vote, user: another_user, votable: track)
|
||||
expect(track.voted?(user)).to eq false
|
||||
end
|
||||
|
||||
it 'returns true when the track has votes' do
|
||||
create(:vote, user: another_user, votable: track)
|
||||
expect(track.voted?).to eq true
|
||||
end
|
||||
|
||||
it 'returns true when the track has votes by that user' do
|
||||
create(:vote, user: user, votable: track)
|
||||
expect(track.voted?(user)).to eq true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#average_rating' do
|
||||
context 'returns 0' do
|
||||
it 'when there are no votes' do
|
||||
expect(track.average_rating).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
context 'returns the average voting' do
|
||||
before :each do
|
||||
another_user = create(:user)
|
||||
create(:vote, user: user, votable: track, rating: 1)
|
||||
create(:vote, user: another_user, votable: track, rating: 3)
|
||||
end
|
||||
|
||||
it 'when there are votes and the average is integer' do
|
||||
expect(track.average_rating).to eq '2'
|
||||
end
|
||||
|
||||
it 'when there are votes and the average is float' do
|
||||
new_user = create(:user)
|
||||
create(:vote, user: new_user, votable: track, rating: 3)
|
||||
expect(track.average_rating).to eq '2.33'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#start_date_before_end_date' do
|
||||
before :each do
|
||||
@conference = create(:conference, start_date: 1.day.ago, end_date: 2.days.from_now)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue