From 71c94b6546ab397ccd08eea7eab3182babeef686 Mon Sep 17 00:00:00 2001 From: Ben Halpern Date: Thu, 28 Jun 2018 17:22:02 -0400 Subject: [PATCH] Fix boosted posts and add spec (#521) --- .../additional_content_boxes_controller.rb | 11 ++++++--- .../requests/additional_content_boxes_spec.rb | 12 ++++++++-- spec/requests/follows_api_spec.rb | 23 +++++++++++++++++++ .../suggester/articles/boosted_spec.rb | 16 +++++++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 spec/requests/follows_api_spec.rb create mode 100644 spec/services/suggester/articles/boosted_spec.rb diff --git a/app/controllers/additional_content_boxes_controller.rb b/app/controllers/additional_content_boxes_controller.rb index 7908bf7a7..514a009be 100644 --- a/app/controllers/additional_content_boxes_controller.rb +++ b/app/controllers/additional_content_boxes_controller.rb @@ -7,16 +7,21 @@ class AdditionalContentBoxesController < ApplicationController new(current_user || @article, not_ids: article_ids).get if (!user_signed_in? || current_user&.display_sponsors) && @article.user.permit_adjacent_sponsors && - rand(2) == 1 + randomize @boosted_article = Suggester::Articles::Boosted.new( current_user, @article, - not_ids: (article_ids + [@for_user_article]), + {not_ids: (article_ids + [@for_user_article&.id]), area: "additional_articles"}, ).suggest else @alt_classic = Suggester::Articles::Classic. - new(@article, not_ids: (article_ids + [@for_user_article])).get + new(@article, {not_ids: (article_ids + [@for_user_article&.id])}).get end render "boxes", layout: false end + + def randomize + return true unless Rails.env.production? + rand(2) == 1 + end end diff --git a/spec/requests/additional_content_boxes_spec.rb b/spec/requests/additional_content_boxes_spec.rb index 3c9112981..044ac1adf 100644 --- a/spec/requests/additional_content_boxes_spec.rb +++ b/spec/requests/additional_content_boxes_spec.rb @@ -1,8 +1,9 @@ require "rails_helper" RSpec.describe "AdditionalContentBoxes", type: :request do - - let(:regular_article) { create(:article) } + let(:tag) { create(:tag) } + let(:user) { create(:user) } + let(:regular_article) { create(:article, user: user, tags: [tag.name]) } describe "GET /additional_content_boxes" do it "returns an article if there is a published/featured one" do @@ -16,5 +17,12 @@ RSpec.describe "AdditionalContentBoxes", type: :request do get "/additional_content_boxes?article_id=#{regular_article.id}" expect(response.body).not_to include CGI.escapeHTML(suggestion.title) end + it "returns boosted article if available" do + organization = create(:organization) + suggestion = create(:article, published: true, featured: true) + boosted_sugg = create(:article, tags: [tag.name], featured: true, boosted_additional_articles: true, organization_id: organization.id) + get "/additional_content_boxes?article_id=#{regular_article.id}" + expect(response.body).to include CGI.escapeHTML(boosted_sugg.title) + end end end diff --git a/spec/requests/follows_api_spec.rb b/spec/requests/follows_api_spec.rb new file mode 100644 index 000000000..10cb291ea --- /dev/null +++ b/spec/requests/follows_api_spec.rb @@ -0,0 +1,23 @@ +require "rails_helper" + +RSpec.describe "FollowsApi", type: :request do + describe "POST /api/follows" do + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:user_4) { create(:user) } + let(:user_5) { create(:user) } + it "returns empty if user not signed in" do + users_hash = [{id: user_2.id}, {id: user_3.id}, {id: user_4.id}, {id: user_5.id}].to_json + post "/api/follows", params: { users: users_hash } + expect(response.body.size).to eq(0) + end + + it "makes successful ping" do + sign_in user + users_hash = [{id: user_2.id}, {id: user_3.id}, {id: user_4.id}, {id: user_5.id}].to_json + post "/api/follows", params: { users: users_hash } + expect(response.body).to include("outcome") + end + end +end \ No newline at end of file diff --git a/spec/services/suggester/articles/boosted_spec.rb b/spec/services/suggester/articles/boosted_spec.rb new file mode 100644 index 000000000..08c510081 --- /dev/null +++ b/spec/services/suggester/articles/boosted_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +RSpec.describe Suggester::Articles::Boosted do + let(:user) { create(:user) } + let(:organization) { create(:organization) } + let(:tag) { create(:tag, supported: true) } + let(:article) { create(:article, tags: [tag.name], featured: true) } + let(:article_3) { create(:article, tags: [tag.name], featured: true, boosted_additional_articles: true, organization_id: organization.id) } + let(:reaction) { create(:reaction, user_id: user.id, reactable_id: article.id) } + + it "returns an article" do + user.follow(tag) + article_2 = create(:article, tags: [tag.name], featured: true, boosted_additional_articles: true, organization_id: organization.id) + expect(described_class.new(user, article, {area: "additional_articles"}).suggest.id).to eq article_2.id + end +end \ No newline at end of file