mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
Add test of voting
This commit is contained in:
parent
097470bb0c
commit
4df59d85e2
2 changed files with 69 additions and 0 deletions
|
|
@ -50,6 +50,16 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :cfp_user do
|
||||||
|
transient do
|
||||||
|
resource { create(:resource) }
|
||||||
|
end
|
||||||
|
|
||||||
|
after :create do |user, evaluator|
|
||||||
|
user.add_role :cfp, evaluator.resource
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
trait :disabled do
|
trait :disabled do
|
||||||
is_disabled { true }
|
is_disabled { true }
|
||||||
end
|
end
|
||||||
|
|
|
||||||
59
spec/features/voting_spec.rb
Normal file
59
spec/features/voting_spec.rb
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
def have_rating(rating, max)
|
||||||
|
have_selector('.rating.bright', count: rating)
|
||||||
|
.and have_selector('.rating:not(.bright)', count: max - rating)
|
||||||
|
end
|
||||||
|
|
||||||
|
def cast_vote(rating, before:, after:)
|
||||||
|
# Index shows existing rating but not user’s vote
|
||||||
|
visit admin_conference_program_events_path(conference.short_title)
|
||||||
|
within("#event-#{event.id}") do
|
||||||
|
expect(page).to have_rating(before, 5)
|
||||||
|
expect(page).to have_text('Not rated')
|
||||||
|
end
|
||||||
|
|
||||||
|
# Event page shows existing rating but not user’s vote
|
||||||
|
click_on event.title
|
||||||
|
within('tr', text: 'Rating') { expect(page).to have_rating(before, 5) }
|
||||||
|
within('tr', text: 'Your vote') { expect(page).to have_rating(0, 5) }
|
||||||
|
|
||||||
|
# Voting dynamically updates the page
|
||||||
|
within('tr', text: 'Your vote') { page.find(".rating:nth-of-type(#{rating})").click }
|
||||||
|
within('tr', text: 'Rating') { expect(page).to have_rating(after, 5) }
|
||||||
|
within('tr', text: 'Your vote') { expect(page).to have_rating(rating, 5) }
|
||||||
|
|
||||||
|
# Index shows updated rating and vote
|
||||||
|
visit admin_conference_program_events_path(conference.short_title)
|
||||||
|
within("#event-#{event.id}") do
|
||||||
|
expect(page).to have_rating(after, 5)
|
||||||
|
expect(page).to have_text("You voted: #{rating}/5")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Re-rendered event page shows updated rating and vote
|
||||||
|
click_on event.title
|
||||||
|
within('tr', text: 'Rating') { expect(page).to have_rating(after, 5) }
|
||||||
|
within('tr', text: 'Your vote') { expect(page).to have_rating(rating, 5) }
|
||||||
|
end
|
||||||
|
|
||||||
|
feature 'Voting' do
|
||||||
|
let(:conference) { create(:conference) }
|
||||||
|
let!(:event) { create(:event, program: conference.program) }
|
||||||
|
let(:voter1) { create(:cfp_user, resource: conference) }
|
||||||
|
let(:voter2) { create(:cfp_user, resource: conference) }
|
||||||
|
|
||||||
|
before :each do
|
||||||
|
conference.program.update_attribute :rating, 5
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'multiple users casting votes', feature: true, js: true do
|
||||||
|
sign_in voter1
|
||||||
|
cast_vote 3, before: 0, after: 3
|
||||||
|
sign_out
|
||||||
|
|
||||||
|
sign_in voter2
|
||||||
|
cast_vote 5, before: 3, after: 4
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue