refactored conferences controller, dividing responsabilities using an service and an query
This commit is contained in:
parent
fd01351a92
commit
7b48daba07
6 changed files with 354 additions and 46 deletions
176
spec/services/conferences/show_variables_fetcher_spec.rb
Normal file
176
spec/services/conferences/show_variables_fetcher_spec.rb
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Conferences::ShowVariablesFetcher, type: :service do
|
||||
describe '.conference_image_url' do
|
||||
let(:request) do
|
||||
double(protocol: 'protocol', host: 'host')
|
||||
end
|
||||
let(:conference) do
|
||||
build(:conference)
|
||||
end
|
||||
|
||||
it 'returns templete string builded' do
|
||||
result = described_class.new(conference: conference)
|
||||
.conference_image_url(request)
|
||||
|
||||
expect(result).to eq(
|
||||
"#{request.protocol}#{request.host}#{conference.picture}"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.event_types_and_track_names' do
|
||||
let!(:conference) do
|
||||
create :conference
|
||||
end
|
||||
let(:call_for_events) { double(open?: true) }
|
||||
|
||||
it 'returns an array with event_types and track_names' do
|
||||
result = described_class.new(conference: conference)
|
||||
.event_types_and_track_names(call_for_events)
|
||||
|
||||
expect(result).to eq([
|
||||
conference.event_types.pluck(:title),
|
||||
conference.confirmed_tracks.pluck(:name).sort
|
||||
])
|
||||
end
|
||||
end
|
||||
|
||||
describe '.cfp_call_by_type' do
|
||||
let!(:conference) do
|
||||
create :full_conference
|
||||
end
|
||||
let(:cfp_type) do
|
||||
conference.program&.cfps.first.cfp_type
|
||||
end
|
||||
|
||||
it 'returns finded cfp by your type' do
|
||||
result = described_class.new(conference: conference)
|
||||
.cfp_call_by_type(cfp_type)
|
||||
|
||||
expect(result.cfp_type).to eq(cfp_type)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.fetch_tracks' do
|
||||
let!(:conference) do
|
||||
create :full_conference
|
||||
end
|
||||
let(:tracks) { double(:tracks) }
|
||||
let(:conferences_query) do
|
||||
instance_double(Queries::Conferences, confirmed_tracks: tracks)
|
||||
end
|
||||
|
||||
setup do
|
||||
allow(Queries::Conferences)
|
||||
.to receive(:new)
|
||||
.and_return(conferences_query)
|
||||
end
|
||||
|
||||
it 'returns tracks' do
|
||||
result = described_class.new(conference: conference)
|
||||
.fetch_tracks
|
||||
|
||||
expect(result).to eq(tracks)
|
||||
end
|
||||
|
||||
it 'calls Queries::Conferences with correct params' do
|
||||
expect(Queries::Conferences)
|
||||
.to receive(:new)
|
||||
.with(conference: conference)
|
||||
|
||||
described_class.new(conference: conference).fetch_tracks
|
||||
end
|
||||
end
|
||||
|
||||
describe '.fetch_booths' do
|
||||
let!(:conference) do
|
||||
create :full_conference
|
||||
end
|
||||
|
||||
setup do
|
||||
conference.splashpage.update!(include_booths: true)
|
||||
end
|
||||
|
||||
it 'returns confirmed_booths' do
|
||||
result = described_class.new(conference: conference).fetch_booths
|
||||
|
||||
expect(result).to eq(conference.confirmed_booths)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.fetch_tickets' do
|
||||
let!(:conference) { create :full_conference }
|
||||
let(:splashpage) { conference.splashpage }
|
||||
let(:tickets) { double(:tickets) }
|
||||
|
||||
context 'when splashpage#include_registrations is true' do
|
||||
setup do
|
||||
splashpage.update!(include_registrations: true)
|
||||
splashpage.update!(include_tickets: false)
|
||||
end
|
||||
|
||||
it 'returns confirmed tickets' do
|
||||
result = described_class.new(conference: conference)
|
||||
.fetch_tickets
|
||||
|
||||
expect(tickets)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when splashpage#include_tickets is true' do
|
||||
setup do
|
||||
splashpage.update!(include_registrations: false)
|
||||
splashpage.update!(include_tickets: true)
|
||||
end
|
||||
|
||||
it 'returns confirmed tickets' do
|
||||
result = described_class.new(conference: conference)
|
||||
.fetch_tickets
|
||||
|
||||
expect(tickets)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.fetch_lodgings' do
|
||||
let!(:conference) { create :full_conference }
|
||||
|
||||
it 'returns lodgings' do
|
||||
result = described_class.new(conference: conference).fetch_lodgings
|
||||
|
||||
expect(result).to eq(
|
||||
conference.lodgings.order('name')
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.sponsorship_levels' do
|
||||
let(:sponsorship_levels) { double(:sponsorship_levels) }
|
||||
let(:query_instance) do
|
||||
instance_double(Queries::Conferences, sponsorship_levels: sponsorship_levels)
|
||||
end
|
||||
let(:conference) { build(:full_conference) }
|
||||
setup do
|
||||
allow(Queries::Conferences)
|
||||
.to receive(:new)
|
||||
.and_return(query_instance)
|
||||
end
|
||||
|
||||
it 'returns sponsorship_levels' do
|
||||
result = described_class.new(conference: conference).sponsorship_levels
|
||||
|
||||
expect(result).to eq(sponsorship_levels)
|
||||
end
|
||||
|
||||
it 'calls Queries::Conferences with correct params' do
|
||||
expect(Queries::Conferences)
|
||||
.to receive(:new)
|
||||
.with(conference: conference)
|
||||
|
||||
described_class.new(conference: conference).sponsorship_levels
|
||||
end
|
||||
end
|
||||
end
|
||||
35
spec/services/queries/conferences_spec.rb
Normal file
35
spec/services/queries/conferences_spec.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Queries::Conferences, type: :query do
|
||||
describe '::conference_by_filter' do
|
||||
let!(:conference) { create :conference }
|
||||
it 'returns conference by flter' do
|
||||
result = described_class::conference_by_filter({
|
||||
id: conference.id
|
||||
})
|
||||
expect(result).to eq(conference)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.sponsorship_levels' do
|
||||
let!(:conference) { create :full_conference }
|
||||
|
||||
it 'returns sponsorship_levels' do
|
||||
result = described_class.new(conference: conference).sponsorship_levels
|
||||
|
||||
expect(result.map(&:id).sort).to eq(conference.sponsorship_levels.map(&:id).sort)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.confirmed_tracks' do
|
||||
let!(:conference) { create :full_conference }
|
||||
|
||||
it 'returns confirmed_tracks' do
|
||||
result = described_class.new(conference: conference).confirmed_tracks
|
||||
|
||||
expect(result.map(&:id).sort).to eq(conference.confirmed_tracks.map(&:id).sort)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue