mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
Merge pull request #3130 from AndrewKvalheim/vote-cache-expiration
Expire voting fragment caches
This commit is contained in:
commit
86b8990d71
5 changed files with 72 additions and 3 deletions
|
|
@ -50,6 +50,16 @@ FactoryBot.define do
|
|||
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
|
||||
is_disabled { true }
|
||||
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