diff --git a/app/controllers/better_together/events_controller.rb b/app/controllers/better_together/events_controller.rb index 16a9cc834..f04eb27d9 100644 --- a/app/controllers/better_together/events_controller.rb +++ b/app/controllers/better_together/events_controller.rb @@ -11,9 +11,15 @@ class EventsController < FriendlyResourceController before_action :build_event_hosts, only: :new def index + @events = @events + .includes(:categories, cover_image_attachment: :blob) + @draft_events = @events.draft + .page(params[:draft_page]).per(params[:per]) @upcoming_events = @events.upcoming + .page(params[:upcoming_page]).per(params[:per]) @past_events = @events.past + .page(params[:past_page]).per(params[:per]) end def show diff --git a/app/views/better_together/events/index.html.erb b/app/views/better_together/events/index.html.erb index d6932a1c2..f5b7500f4 100644 --- a/app/views/better_together/events/index.html.erb +++ b/app/views/better_together/events/index.html.erb @@ -15,6 +15,7 @@
<%= render(@draft_events) || render('none') %>
+ <%= paginate @draft_events %> <% end %> <% if @upcoming_events.size > 0 || @past_events.size > 0 %> @@ -22,12 +23,14 @@
<%= render(@upcoming_events) || render('none') %>
+ <%= paginate @upcoming_events %> <% if @past_events.size > 0 %>

Past

<%= render(@past_events) %>
+ <%= paginate @past_events %> <% end %> <% else %>
diff --git a/spec/factories/better_together/events.rb b/spec/factories/better_together/events.rb index bb09c607f..c67bceadc 100644 --- a/spec/factories/better_together/events.rb +++ b/spec/factories/better_together/events.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'faker' + FactoryBot.define do factory 'better_together/event', class: 'BetterTogether::Event', diff --git a/spec/features/events/index_spec.rb b/spec/features/events/index_spec.rb new file mode 100644 index 000000000..9c588d938 --- /dev/null +++ b/spec/features/events/index_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'events index', type: :feature do + include BetterTogether::DeviseSessionHelpers + + before do + configure_host_platform + login_as_platform_manager + end + + let!(:draft_event) { create(:event, :draft, name: 'Draft Event') } + let!(:upcoming_event) { create(:event, name: 'Upcoming Event', starts_at: 1.day.from_now) } + let!(:past_event) { create(:event, name: 'Past Event', starts_at: 2.days.ago) } + + scenario 'displays events grouped by status' do + visit events_path(locale: I18n.default_locale) + + draft_section = find('h2', text: 'Draft').sibling('div') + within(draft_section) do + expect(page).to have_content(draft_event.name) + end + + upcoming_section = find('h2', text: 'Upcoming').sibling('div') + within(upcoming_section) do + expect(page).to have_content(upcoming_event.name) + end + + past_section = find('h2', text: 'Past').sibling('div') + within(past_section) do + expect(page).to have_content(past_event.name) + end + end +end diff --git a/spec/requests/better_together/events_spec.rb b/spec/requests/better_together/events_spec.rb new file mode 100644 index 000000000..8d247b05f --- /dev/null +++ b/spec/requests/better_together/events_spec.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Events', type: :request do + include BetterTogether::Engine.routes.url_helpers + include RequestSpecHelper + + let(:locale) { I18n.default_locale } + + describe 'GET /events' do + let!(:event) { create(:event) } + + it 'returns http success' do + get events_path(locale: locale) + expect(response).to have_http_status(:success) + end + end + + describe 'POST /events' do + let(:user) { create(:better_together_user, :confirmed, :platform_manager) } + + before { login(user) } + + it 'creates an event' do + expect do + post events_path(locale: locale), + params: { event: { name: 'New Event', starts_at: 1.day.from_now } } + end.to change(BetterTogether::Event, :count).by(1) + expect(response).to redirect_to(event_path(BetterTogether::Event.last, locale: locale)) + end + end + + describe 'PATCH /events/:id' do + let(:user) { create(:better_together_user, :confirmed, :platform_manager) } + let!(:event) { create(:event, name: 'Old Name', creator: user.person) } + + before { login(user) } + + it 'updates the event' do + patch event_path(event, locale: locale), params: { event: { name: 'Updated Name', starts_at: 1.day.from_now } } + expect(response).to redirect_to(edit_event_path(event, locale: locale)) + expect(event.reload.name).to eq('Updated Name') + end + end + + describe 'DELETE /events/:id' do + let(:user) { create(:better_together_user, :confirmed, :platform_manager) } + let!(:event) { create(:event, name: 'Delete Me', creator: user.person) } + + before { login(user) } + + it 'destroys the event' do + expect do + delete event_path(event, locale: locale) + end.to change(BetterTogether::Event, :count).by(-1) + expect(response).to redirect_to(events_path(locale: locale)) + end + end +end