Add vote functionality to tracks

This commit is contained in:
Rishabh Singh 2019-08-09 17:33:42 +05:30
parent 8b2f2b538e
commit 92b09c7de4
18 changed files with 237 additions and 19 deletions

View file

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

View file

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