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:
parent
cde0f92211
commit
2da1b45c32
3 changed files with 130 additions and 116 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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") }
|
||||
|
||||
|
|
|
|||
128
spec/queries/display_ads/filtered_ads_query_spec.rb
Normal file
128
spec/queries/display_ads/filtered_ads_query_spec.rb
Normal 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
|
||||
Loading…
Add table
Reference in a new issue