From 2da1b45c3204975b64c6f3ab58cc7af416bce694 Mon Sep 17 00:00:00 2001 From: Ridhwana Date: Mon, 30 Jan 2023 10:57:34 +0200 Subject: [PATCH] Move a portion of the Display Ads tests alongside the query (#19017) * Remove jQuery * Added jquery back to videos * Removed jquery code * Nit fix * Revert incorrect code * Updated jquery code to javascript * Removed jquery from comments * refactor: move the spec to test the query --------- Co-authored-by: rt4914 Co-authored-by: Rajat Talesra --- app/queries/display_ads/filtered_ads_query.rb | 2 +- spec/models/display_ad_spec.rb | 116 +--------------- .../display_ads/filtered_ads_query_spec.rb | 128 ++++++++++++++++++ 3 files changed, 130 insertions(+), 116 deletions(-) create mode 100644 spec/queries/display_ads/filtered_ads_query_spec.rb diff --git a/app/queries/display_ads/filtered_ads_query.rb b/app/queries/display_ads/filtered_ads_query.rb index 8273f1368..516df3f71 100644 --- a/app/queries/display_ads/filtered_ads_query.rb +++ b/app/queries/display_ads/filtered_ads_query.rb @@ -4,7 +4,7 @@ module DisplayAds new(...).call end - def initialize(display_ads:, area:, user_signed_in:, article_tags:) + def initialize(display_ads:, area:, user_signed_in:, article_tags: []) @filtered_display_ads = display_ads @area = area @user_signed_in = user_signed_in diff --git a/spec/models/display_ad_spec.rb b/spec/models/display_ad_spec.rb index fe4ed5df7..86a04aae6 100644 --- a/spec/models/display_ad_spec.rb +++ b/spec/models/display_ad_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe DisplayAd, type: :model do +RSpec.describe DisplayAd do let(:organization) { create(:organization) } let(:display_ad) { create(:display_ad, organization_id: organization.id) } @@ -65,120 +65,6 @@ RSpec.describe DisplayAd, type: :model do end end - describe ".for_display" do - context "when updating the published and approved values" do - let!(:display_ad) { create(:display_ad, organization_id: organization.id) } - - it "does not return unpublished ads" do - display_ad.update!(published: false, approved: true) - expect(described_class.for_display(display_ad.placement_area, false)).to be_nil - end - - it "does not return unapproved ads" do - display_ad.update!(published: true, approved: false) - expect(described_class.for_display(display_ad.placement_area, false)).to be_nil - end - - it "returns published and approved ads" do - display_ad.update!(published: true, approved: true) - expect(described_class.for_display(display_ad.placement_area, false)).to eq(display_ad) - end - end - - context "when considering article_tags" do - it "will show the display ads that contain tags that match any of the article tags" do - display_ad = create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "linux, git, go") - - create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "career") - - article_tags = %w[linux productivity] - expect(described_class.for_display("post_comments", false, article_tags)).to eq(display_ad) - end - - it "will show display ads that have no tags set" do - display_ad = create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "") - - create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "career") - - article_tags = %w[productivity java] - expect(described_class.for_display("post_comments", false, article_tags)).to eq(display_ad) - end - - it "will show no display ads if the available display ads have no tags set or do not contain matching tags" do - create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "productivity") - article_tags = %w[javascript] - expect(described_class.for_display("post_comments", false, article_tags)).to be_nil - end - - it "will show display ads with no tags set if there are no article tags" do - create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "productivity") - - display_ad_without_tags = create(:display_ad, organization_id: organization.id, - placement_area: "post_comments", - published: true, - approved: true, - cached_tag_list: "") - - expect(described_class.for_display("post_comments", false)).to eq(display_ad_without_tags) - end - end - - context "when display_to is set to 'logged_in' or 'logged_out'" do - let!(:display_ad2) do - create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "logged_in") - end - let!(:display_ad3) do - create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "logged_out") - end - - it "shows ads that have a display_to of 'logged_in' if a user is signed in" do - expect(described_class.for_display(display_ad2.placement_area, true)).to eq(display_ad2) - end - - it "shows ads that have a display_to of 'logged_out' if a user is signed in" do - expect(described_class.for_display(display_ad3.placement_area, false)).to eq(display_ad3) - end - end - - context "when display_to is set to 'all'" do - let!(:display_ad) do - create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "all") - end - - it "shows ads that have a display_to of 'all' if a user is signed in" do - expect(described_class.for_display(display_ad.placement_area, true)).to eq(display_ad) - end - - it "shows ads that have a display_to of 'all' if a user is not signed in" do - expect(described_class.for_display(display_ad.placement_area, false)).to eq(display_ad) - end - end - end - describe ".search_ads" do let!(:ad) { create(:display_ad, name: "This is an Ad", body_markdown: "Ad Body", placement_area: "post_comments") } diff --git a/spec/queries/display_ads/filtered_ads_query_spec.rb b/spec/queries/display_ads/filtered_ads_query_spec.rb new file mode 100644 index 000000000..3116dbb7d --- /dev/null +++ b/spec/queries/display_ads/filtered_ads_query_spec.rb @@ -0,0 +1,128 @@ +require "rails_helper" + +RSpec.describe DisplayAds::FilteredAdsQuery, type: :query do + let(:organization) { create(:organization) } + + context "when updating the published and approved values" do + let!(:display_ad) { create(:display_ad, organization_id: organization.id) } + + it "does not return unpublished ads" do + display_ad.update!(published: false, approved: true) + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad.placement_area, + user_signed_in: false)).to be_nil + end + + it "does not return unapproved ads" do + display_ad.update!(published: true, approved: false) + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad.placement_area, + user_signed_in: false)).to be_nil + end + + it "returns published and approved ads" do + display_ad.update!(published: true, approved: true) + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad.placement_area, + user_signed_in: false)).to eq(display_ad) + end + end + + context "when considering article_tags" do + it "will show the display ads that contain tags that match any of the article tags" do + display_ad = create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "linux, git, go") + + create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "career") + + article_tags = %w[linux productivity] + expect(described_class.call(display_ads: DisplayAd.all, area: "post_comments", user_signed_in: false, + article_tags: article_tags)).to eq(display_ad) + end + + it "will show display ads that have no tags set" do + display_ad = create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "") + + create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "career") + + article_tags = %w[productivity java] + expect(described_class.call(display_ads: DisplayAd.all, area: "post_comments", user_signed_in: false, + article_tags: article_tags)).to eq(display_ad) + end + + it "will show no display ads if the available display ads have no tags set or do not contain matching tags" do + create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "productivity") + article_tags = %w[javascript] + expect(described_class.call(display_ads: DisplayAd.all, area: "post_comments", user_signed_in: false, + article_tags: article_tags)).to be_nil + end + + it "will show display ads with no tags set if there are no article tags" do + create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "productivity") + + display_ad_without_tags = create(:display_ad, organization_id: organization.id, + placement_area: "post_comments", + published: true, + approved: true, + cached_tag_list: "") + + expect(described_class.call(display_ads: DisplayAd.all, area: "post_comments", + user_signed_in: false)).to eq(display_ad_without_tags) + end + end + + context "when display_to is set to 'logged_in' or 'logged_out'" do + let!(:display_ad2) do + create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "logged_in") + end + let!(:display_ad3) do + create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "logged_out") + end + + it "shows ads that have a display_to of 'logged_in' if a user is signed in" do + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad2.placement_area, + user_signed_in: true)).to eq(display_ad2) + end + + it "shows ads that have a display_to of 'logged_out' if a user is signed in" do + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad3.placement_area, + user_signed_in: false)).to eq(display_ad3) + end + end + + context "when display_to is set to 'all'" do + let!(:display_ad) do + create(:display_ad, organization_id: organization.id, published: true, approved: true, display_to: "all") + end + + it "shows ads that have a display_to of 'all' if a user is signed in" do + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad.placement_area, + user_signed_in: true)).to eq(display_ad) + end + + it "shows ads that have a display_to of 'all' if a user is not signed in" do + expect(described_class.call(display_ads: DisplayAd.all, area: display_ad.placement_area, + user_signed_in: false)).to eq(display_ad) + end + end +end