From ee3792f4470e7e1d7b1e6faad8569ac2f7750846 Mon Sep 17 00:00:00 2001 From: Molly Struve Date: Mon, 8 Jun 2020 17:58:00 -0500 Subject: [PATCH] [deploy] Use Javascript to Display Jobs Banner (#8303) * Use Javascript to Display Jobs Banner * one equal is enough * stub SiteConfig values * Return banner for all searches containing jobs, ensure banner is always at top, remove old job partial * check for query before executing function --- app/controllers/search_controller.rb | 6 +++- app/views/articles/_search.html.erb | 12 +++++++ app/views/articles/search.html.erb | 4 +-- spec/requests/search_spec.rb | 2 +- .../system/search/display_jobs_banner_spec.rb | 34 +++++++++++++++++++ 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 spec/system/search/display_jobs_banner_spec.rb diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 7aeac8ff0..5c3ab6627 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -90,7 +90,11 @@ class SearchController < ApplicationController feed_content_search end - render json: { result: feed_docs } + render json: { + result: feed_docs, + display_jobs_banner: SiteConfig.display_jobs_banner, + jobs_url: SiteConfig.jobs_url + } end def reactions diff --git a/app/views/articles/_search.html.erb b/app/views/articles/_search.html.erb index d6bb17ed1..694bdc8ac 100644 --- a/app/views/articles/_search.html.erb +++ b/app/views/articles/_search.html.erb @@ -59,6 +59,14 @@ } } + function addOptionalBanner(query, displayBanner, jobsUrl) { + var lowerCaseQuery = query.toLowerCase(); + + if (displayBanner && lowerCaseQuery.includes("job")) { + document.getElementById("banner-section").innerHTML = '
Interested in joining our team? Explore our open roles.
'; + } + } + function search(query, filters) { var hashtags = query.match(/#\w+/g); var searchTerm = query.replace(/#/g, '').trim(); @@ -109,6 +117,10 @@ }) .then(response => response.json()) .then((content) => { + if (searchHash["search_fields"]) { + addOptionalBanner(searchHash["search_fields"], content.display_jobs_banner, content.jobs_url); + } + var resultDivs = [] content.result.forEach(function (story, i) { resultDivs.push(buildArticleHTML(story)); diff --git a/app/views/articles/search.html.erb b/app/views/articles/search.html.erb index 45e2b07c4..581b3fdd0 100644 --- a/app/views/articles/search.html.erb +++ b/app/views/articles/search.html.erb @@ -9,9 +9,7 @@ data-articles-since="<%= Timeframer.new(params[:timeframe]).datetime&.iso8601 %>"> <%= render "articles/search/sidebar" %>
- <% if (params[:q]&.downcase == "job" || params[:q]&.downcase == "jobs") && SiteConfig.display_jobs_banner %> -
Interested in joining our team? Explore our >open roles.
- <% end %> +
diff --git a/spec/requests/search_spec.rb b/spec/requests/search_spec.rb index 307713cb1..f5aec976c 100644 --- a/spec/requests/search_spec.rb +++ b/spec/requests/search_spec.rb @@ -75,7 +75,7 @@ RSpec.describe "Search", type: :request, proper_status: true do ) get "/search/feed_content" - expect(response.parsed_body).to eq("result" => mock_documents) + expect(response.parsed_body["result"]).to eq(mock_documents) end it "queries only the user index if class_name=User" do diff --git a/spec/system/search/display_jobs_banner_spec.rb b/spec/system/search/display_jobs_banner_spec.rb new file mode 100644 index 000000000..e1268984c --- /dev/null +++ b/spec/system/search/display_jobs_banner_spec.rb @@ -0,0 +1,34 @@ +require "rails_helper" + +RSpec.describe "Display Jobs Banner spec", type: :system, js: true do + before do + stub_request(:post, "http://www.google-analytics.com/collect") + allow(SiteConfig).to receive(:jobs_url).and_return("www.very_cool_jobs_website.com") + end + + context "when SiteConfig.display_jobs_banner is false" do + it "does not show jobs banner" do + allow(SiteConfig).to receive(:display_jobs_banner).and_return(false) + visit "/search?q=jobs" + + expect(page).not_to have_content("Interested in joining our team?") + end + end + + context "when SiteConfig.display_jobs_banner is true" do + before { allow(SiteConfig).to receive(:display_jobs_banner).and_return(true) } + + it "displays job banner for job search" do + visit "/search?q=jobs" + + expect(page).to have_content("Interested in joining our team?") + expect(find_link("open roles")["href"]).to include(SiteConfig.jobs_url) + end + + it "does not display jobs banner for other searches" do + visit "/search?q=ruby" + + expect(page).not_to have_content("Interested in joining our team?") + end + end +end