From bcdf57788a6550cf818f664124f5b05003254bf5 Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Thu, 15 Aug 2024 20:01:37 +0200 Subject: [PATCH] Only show speakers with talks on speakers index --- app/controllers/speakers_controller.rb | 4 ++-- app/views/speakers/index.html.erb | 2 +- test/controllers/speakers_controller_test.rb | 11 ++++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/controllers/speakers_controller.rb b/app/controllers/speakers_controller.rb index 2cd7d0b8..b1da27ac 100644 --- a/app/controllers/speakers_controller.rb +++ b/app/controllers/speakers_controller.rb @@ -7,11 +7,11 @@ class SpeakersController < ApplicationController def index respond_to do |format| format.html do - @speakers = Speaker.all.order(:name).select(:id, :name, :slug, :talks_count, :github) + @speakers = Speaker.with_talks.order(:name).select(:id, :name, :slug, :talks_count, :github) @speakers = @speakers.where("lower(name) LIKE ?", "#{params[:letter].downcase}%") if params[:letter].present? end format.json do - @pagy, @speakers = pagy(Speaker.all.order(:name), limit: params[:per_page]) + @pagy, @speakers = pagy(Speaker.with_talks.order(:name), limit: params[:per_page]) end end end diff --git a/app/views/speakers/index.html.erb b/app/views/speakers/index.html.erb index 591d2c67..b3248d7d 100644 --- a/app/views/speakers/index.html.erb +++ b/app/views/speakers/index.html.erb @@ -11,6 +11,6 @@ <% end %>
- <%= render @speakers %> + <%= render @speakers %>
diff --git a/test/controllers/speakers_controller_test.rb b/test/controllers/speakers_controller_test.rb index 11b9c6ca..c4edf8d0 100644 --- a/test/controllers/speakers_controller_test.rb +++ b/test/controllers/speakers_controller_test.rb @@ -3,11 +3,17 @@ class SpeakersControllerTest < ActionDispatch::IntegrationTest setup do @speaker = speakers(:one) + @speaker_with_talk = speakers(:two) + + @speaker_with_talk.talks << talks(:one) end test "should get index" do get speakers_url assert_response :success + + assert_select "##{dom_id(@speaker)}", 0 + assert_select "##{dom_id(@speaker_with_talk)}", 1 end test "should show speaker" do @@ -30,6 +36,9 @@ class SpeakersControllerTest < ActionDispatch::IntegrationTest assert_response :success json_response = JSON.parse(response.body) - assert_includes json_response["speakers"].map { |speaker_data| speaker_data["name"] }, @speaker.name + speakers = json_response["speakers"].map { |speaker_data| speaker_data["name"] } + + assert_includes speakers, @speaker_with_talk.name + assert_equal 1, speakers.length end end