From 1e778dbbf6d5bb80be5b6d618bcb83a5cd4932ae Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 29 Jan 2021 18:36:15 -0600 Subject: [PATCH] posts: factor out post navbar into component. * Factor out the post navbar into a component. The post navbar is the part of the post containing the current search, the list of pools, and the list of favgroups, along with next/prev navigation links. * Change navbar markup: remove various unused CSS classes/IDs, change pools to use same markup as favgroups, replace nested
's with flat
<% end %> - <% if @post.presenter.has_nav_links?(self) %> - <%= render "posts/partials/show/nav_links", :post => @post, :position => "bottom" %> + <% if CurrentUser.user.new_post_navigation_layout %> + <%= render_post_navbar(@post, current_user: CurrentUser.user, search: params[:q], pool_id: params[:pool_id], favgroup_id: params[:favgroup_id]) %> <% end %> diff --git a/test/components/post_navbar_component_test.rb b/test/components/post_navbar_component_test.rb new file mode 100644 index 000000000..5bd58e410 --- /dev/null +++ b/test/components/post_navbar_component_test.rb @@ -0,0 +1,52 @@ +require "test_helper" + +class PostNavbarComponentTest < ViewComponent::TestCase + def render_post_navbar(post, **options) + render_inline(PostNavbarComponent.new(post: post, **options)) + end + + setup do + @post = create(:post) + @user = create(:user) + end + + context "The PostNavbarComponent" do + context "for a post with a search" do + should "render" do + render_post_navbar(@post, current_user: @user, search: "touhou") + + assert_css(".search-navbar", text: "Search: touhou") + end + end + + context "for a post with pools" do + should "render" do + as(@user) do + @pool1 = create(:pool, category: "series") + @pool2 = create(:pool, category: "collection") + @post.update(tag_string: "pool:#{@pool1.id} pool:#{@pool2.id}") + end + + render_post_navbar(@post, current_user: @user, pool_id: @pool1.id) + + assert_css(".pool-name", text: "Pool: #{@pool1.pretty_name}") + assert_css(".pool-name", text: "Pool: #{@pool2.pretty_name}") + end + end + + context "for a post with favgroups" do + should "render" do + as(@user) do + @favgroup1 = create(:favorite_group, creator: @user) + @favgroup2 = create(:favorite_group, creator: @user) + @post.update(tag_string: "favgroup:#{@favgroup1.id} favgroup:#{@favgroup2.id}") + end + + render_post_navbar(@post, current_user: @user, favgroup_id: @favgroup1.id) + + assert_css(".favgroup-name", text: "Favgroup: #{@favgroup1.pretty_name}") + assert_css(".favgroup-name", text: "Favgroup: #{@favgroup2.pretty_name}") + end + end + end +end diff --git a/test/functional/posts_controller_test.rb b/test/functional/posts_controller_test.rb index b844d7b7e..bcae0e069 100644 --- a/test/functional/posts_controller_test.rb +++ b/test/functional/posts_controller_test.rb @@ -556,7 +556,7 @@ class PostsControllerTest < ActionDispatch::IntegrationTest get post_path(@post) assert_response :success - assert_select "#pool-nav .pool-name", /Pool: comic/ + assert_select ".pool-navbar .pool-name", /Pool: comic/ end end