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 <rajattalesra4914@gmail.com>
Co-authored-by: Rajat Talesra <rajat@forem.com>
This commit is contained in:
Ridhwana 2023-01-30 10:57:34 +02:00 committed by GitHub
parent cde0f92211
commit 2da1b45c32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 130 additions and 116 deletions

View file

@ -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

View file

@ -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") }

View file

@ -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