Implement Event Ratings
This commit is contained in:
parent
5be1ad52ee
commit
20f4853487
67 changed files with 1298 additions and 378 deletions
7
spec/factories/votable_fields.rb
Normal file
7
spec/factories/votable_fields.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
FactoryGirl.define do
|
||||
factory :votable_field do
|
||||
title { Faker::Lorem.word }
|
||||
votable_type { 'Event' }
|
||||
conference
|
||||
end
|
||||
end
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
FactoryGirl.define do
|
||||
factory :vote do
|
||||
event
|
||||
user
|
||||
rating 1
|
||||
end
|
||||
end
|
||||
|
|
@ -12,19 +12,5 @@ feature Program do
|
|||
sign_in organizer
|
||||
end
|
||||
|
||||
scenario 'changes rating', feature: true, js: true do
|
||||
visit admin_conference_program_path(conference.short_title)
|
||||
|
||||
click_link 'Edit'
|
||||
|
||||
fill_in 'program_rating', with: '4'
|
||||
|
||||
click_button 'Update Program'
|
||||
|
||||
# Validations
|
||||
expect(flash)
|
||||
.to eq('The program was successfully updated.')
|
||||
expect(find('#rating').text).to eq('4')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -21,15 +21,6 @@ feature 'Version' do
|
|||
expect(page).to have_text("#{organizer.name} updated social tag, email, googleplus and sponsor email of contact details in conference #{conference.short_title}")
|
||||
end
|
||||
|
||||
scenario 'display changes in program', feature: true, versioning: true, js: true do
|
||||
visit edit_admin_conference_program_path(conference.short_title)
|
||||
fill_in 'program_rating', with: '4'
|
||||
click_button 'Update Program'
|
||||
|
||||
visit admin_revision_history_path
|
||||
expect(page).to have_text("#{organizer.name} updated rating of program in conference #{conference.short_title}")
|
||||
end
|
||||
|
||||
scenario 'display changes in cfp', feature: true, versioning: true, js: true do
|
||||
cfp = create(:cfp, program: conference.program)
|
||||
cfp.update_attributes(start_date: (Date.today + 1).strftime('%d/%m/%Y'), end_date: (Date.today + 3).strftime('%d/%m/%Y'))
|
||||
|
|
@ -346,20 +337,6 @@ feature 'Version' do
|
|||
expect(page).to have_text("Someone (probably via the console) re-added #{organizer.name}'s comment on event #{event.title} in conference #{conference.short_title}")
|
||||
end
|
||||
|
||||
scenario 'display changes in vote', feature: true, versioning: true, js: true 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)
|
||||
Vote.last.destroy
|
||||
PaperTrail::Version.last.reify.save
|
||||
|
||||
visit admin_revision_history_path
|
||||
expect(page).to have_text("Someone (probably via the console) voted on event My second event in conference #{conference.short_title}")
|
||||
expect(page).to have_text("Someone (probably via the console) deleted #{organizer.name}'s vote on event #{event.title} in conference #{conference.short_title}")
|
||||
expect(page).to have_text("Someone (probably via the console) re-added #{organizer.name}'s vote on event #{event.title} in conference #{conference.short_title}")
|
||||
end
|
||||
|
||||
scenario 'display changes in campaign', feature: true, versioning: true, js: true do
|
||||
campaign = create(:campaign, conference: conference, name: 'Test Campaign', utm_campaign: 'campaign')
|
||||
campaign.update_attributes(utm_source: 'source', utm_medium: 'medium', utm_term: 'term', utm_content: 'content')
|
||||
|
|
|
|||
|
|
@ -169,70 +169,6 @@ describe Event do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#user_rating' do
|
||||
it 'returns 0 if the event has no votes' do
|
||||
expect(event.user_rating(user)).to eq 0
|
||||
end
|
||||
|
||||
it 'returns 0 if the event has no votes from that user' do
|
||||
create(:vote, user: another_user, event: 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)
|
||||
expect(event.user_rating(user)).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
describe '#voted?' do
|
||||
it 'returns false if the event has no votes' do
|
||||
expect(event.voted?).to eq false
|
||||
end
|
||||
|
||||
it 'returns false if the event has no votes by that user' do
|
||||
create(:vote, user: another_user, event: 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)
|
||||
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)
|
||||
expect(event.voted?(user)).to eq true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#average_rating' do
|
||||
context 'returns 0' do
|
||||
it 'when there are no votes' do
|
||||
expect(event.average_rating).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
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)
|
||||
end
|
||||
|
||||
it 'when there are votes and the average is integer' do
|
||||
expect(event.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, event: event, rating: 3)
|
||||
expect(event.average_rating).to eq '2.33'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#submitter' do
|
||||
it 'returns the user that submitted the event' do
|
||||
submitter = create(:user)
|
||||
|
|
|
|||
|
|
@ -27,12 +27,6 @@ describe Program do
|
|||
expect(build(:program)).to be_valid
|
||||
end
|
||||
|
||||
it 'is valid for rating of 5' do
|
||||
expect(build(:program, rating: 5)).to be_valid
|
||||
end
|
||||
|
||||
it { is_expected.to validate_numericality_of(:rating).is_greater_than_or_equal_to(0).is_less_than_or_equal_to(10).only_integer }
|
||||
|
||||
it { is_expected.to validate_numericality_of(:schedule_interval).is_greater_than_or_equal_to(5).is_less_than_or_equal_to(60) }
|
||||
|
||||
describe 'schedule_interval_divisor_60' do
|
||||
|
|
@ -125,19 +119,6 @@ describe Program do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#rating_enabled?' do
|
||||
it 'returns true if proposals can be rated (program.rating > 0)' do
|
||||
program.rating = 3
|
||||
expect(program.rating_enabled?).to be true
|
||||
end
|
||||
|
||||
it 'returns false if proposals cannot be rated (program.rating == 0) ' do
|
||||
program = conference.program
|
||||
program.rating = 0
|
||||
expect(program.rating_enabled?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe '#cfp_open?' do
|
||||
describe 'returns true' do
|
||||
it 'when there is an open Call for Papers for the conference' do
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ describe User do
|
|||
it { is_expected.to have_many(:events_registrations).through(:registrations) }
|
||||
it { is_expected.to have_many(:ticket_purchases).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:tickets).through(:ticket_purchases) }
|
||||
it { is_expected.to have_many(:votes).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:subscriptions).dependent(:destroy) }
|
||||
end
|
||||
|
||||
|
|
|
|||
37
spec/models/votable_field_spec.rb
Normal file
37
spec/models/votable_field_spec.rb
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe VotableField do
|
||||
subject { create(:votable_field) }
|
||||
|
||||
describe 'validations' do
|
||||
|
||||
it 'has a valid factory' do
|
||||
expect(build(:votable_field)).to be_valid
|
||||
end
|
||||
|
||||
it 'is not valid without a title' do
|
||||
subject.title = ''
|
||||
expect(subject).to be_invalid
|
||||
end
|
||||
|
||||
it 'is not valid without a votable field' do
|
||||
should validate_presence_of(:votable_type)
|
||||
end
|
||||
|
||||
it 'is valid with title containing special characters but not spaces' do
|
||||
should allow_value('example-votable&field').for(:title)
|
||||
end
|
||||
|
||||
it 'is not valid with title containing spaces' do
|
||||
should_not allow_value('example votable field').for(:title)
|
||||
end
|
||||
|
||||
it 'is not valid with unsupported votable_type' do
|
||||
should_not allow_value('unsupported').for(:votable_type)
|
||||
end
|
||||
|
||||
it 'is valid for supported votable types' do
|
||||
should allow_value('Event').for(:votable_type)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue