diff --git a/.discourse-compatibility b/.discourse-compatibility index c56f109..e105043 100644 --- a/.discourse-compatibility +++ b/.discourse-compatibility @@ -1,3 +1,4 @@ +< 3.5.0.beta8-dev: e51aad3bfd41cf2cb9557e025e833122a9f6c892 < 3.5.0.beta5-dev: bd9af0b9a577bfd2c01cc8b81a782a4e8b81b9c5 < 3.5.0.beta1-dev: 6ceba62e985223c269782c4bc9a1bdc4a5adba28 < 3.4.0.beta2-dev: 7685ebf396c93e8accc5a76a81fcec4384a73fa3 diff --git a/assets/javascripts/discourse/initializers/initialize-ad-plugin.gjs b/assets/javascripts/discourse/initializers/initialize-ad-plugin.gjs new file mode 100644 index 0000000..35e09a2 --- /dev/null +++ b/assets/javascripts/discourse/initializers/initialize-ad-plugin.gjs @@ -0,0 +1,53 @@ +import { hbs } from "ember-cli-htmlbars"; +import { withSilencedDeprecations } from "discourse/lib/deprecated"; +import { withPluginApi } from "discourse/lib/plugin-api"; +import Site from "discourse/models/site"; +import { registerWidgetShim } from "discourse/widgets/render-glimmer"; +import PostBottomAd from "../components/post-bottom-ad"; + +export default { + name: "initialize-ad-plugin", + initialize(container) { + withPluginApi((api) => { + customizePost(api); + }); + + const messageBus = container.lookup("service:message-bus"); + const currentUser = container.lookup("service:current-user"); + + const channel = currentUser + ? "/site/house-creatives/logged-in" + : "/site/house-creatives/anonymous"; + + messageBus.subscribe(channel, function (houseAdsSettings) { + Site.currentProp("house_creatives", houseAdsSettings); + }); + }, +}; + +function customizePost(api) { + api.renderAfterWrapperOutlet( + "post-article", + + ); + + withSilencedDeprecations("discourse.post-stream-widget-overrides", () => + customizeWidgetPost(api) + ); +} + +function customizeWidgetPost(api) { + registerWidgetShim( + "after-post-ad", + "div.ad-connector", + hbs`` + ); + + api.decorateWidget("post:after", (helper) => { + return helper.attach("after-post-ad", helper.widget.model); + }); +} diff --git a/assets/javascripts/discourse/initializers/initialize-ad-plugin.js b/assets/javascripts/discourse/initializers/initialize-ad-plugin.js deleted file mode 100644 index babd4c6..0000000 --- a/assets/javascripts/discourse/initializers/initialize-ad-plugin.js +++ /dev/null @@ -1,32 +0,0 @@ -import { hbs } from "ember-cli-htmlbars"; -import { withPluginApi } from "discourse/lib/plugin-api"; -import Site from "discourse/models/site"; -import { registerWidgetShim } from "discourse/widgets/render-glimmer"; - -export default { - name: "initialize-ad-plugin", - initialize(container) { - registerWidgetShim( - "after-post-ad", - "div.widget-connector", - hbs`` - ); - - withPluginApi("0.1", (api) => { - api.decorateWidget("post:after", (helper) => { - return helper.attach("after-post-ad", helper.widget.model); - }); - }); - - const messageBus = container.lookup("service:message-bus"); - const currentUser = container.lookup("service:current-user"); - - const channel = currentUser - ? "/site/house-creatives/logged-in" - : "/site/house-creatives/anonymous"; - - messageBus.subscribe(channel, function (houseAdsSettings) { - Site.currentProp("house_creatives", houseAdsSettings); - }); - }, -}; diff --git a/test/javascripts/acceptance/adsense-test.js b/test/javascripts/acceptance/adsense-test.js index f959e9e..108decb 100644 --- a/test/javascripts/acceptance/adsense-test.js +++ b/test/javascripts/acceptance/adsense-test.js @@ -7,101 +7,107 @@ import { updateCurrentUser, } from "discourse/tests/helpers/qunit-helpers"; -acceptance("AdSense", function (needs) { - needs.user(); - needs.settings({ - no_ads_for_groups: "47", - no_ads_for_categories: "1", - adsense_publisher_code: "MYADSENSEID", - adsense_display_groups: [ - AUTO_GROUPS.trust_level_1, - AUTO_GROUPS.trust_level_2, - ], - adsense_topic_list_top_code: "list_top_ad_unit", - adsense_topic_list_top_ad_sizes: "728*90 - leaderboard", - adsense_mobile_topic_list_top_code: "mobile_list_top_ad_unit", - adsense_mobile_topic_list_top_ad_size: "300*250 - medium rectangle", - adsense_post_bottom_code: "post_bottom_ad_unit", - adsense_post_bottom_ad_sizes: "728*90 - leaderboard", - adsense_mobile_post_bottom_code: "mobile_post_bottom_ad_unit", - adsense_mobile_post_bottom_ad_size: "300*250 - medium rectangle", - adsense_nth_post_code: 6, - adsense_topic_above_post_stream_code: "above_post_stream_ad_unit", - adsense_topic_above_post_stream_ad_sizes: "728*90 - leaderboard", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "", - topic_above_post_stream: "", - topic_above_suggested: "", - post_bottom: "", - after_nth_post: 20, - }, - creatives: {}, - }, - }); +["enabled", "disabled"].forEach((postStreamMode) => { + acceptance( + `AdSense (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.user(); + needs.settings({ + no_ads_for_groups: "47", + no_ads_for_categories: "1", + adsense_publisher_code: "MYADSENSEID", + adsense_display_groups: [ + AUTO_GROUPS.trust_level_1, + AUTO_GROUPS.trust_level_2, + ], + adsense_topic_list_top_code: "list_top_ad_unit", + adsense_topic_list_top_ad_sizes: "728*90 - leaderboard", + adsense_mobile_topic_list_top_code: "mobile_list_top_ad_unit", + adsense_mobile_topic_list_top_ad_size: "300*250 - medium rectangle", + adsense_post_bottom_code: "post_bottom_ad_unit", + adsense_post_bottom_ad_sizes: "728*90 - leaderboard", + adsense_mobile_post_bottom_code: "mobile_post_bottom_ad_unit", + adsense_mobile_post_bottom_ad_size: "300*250 - medium rectangle", + adsense_nth_post_code: 6, + adsense_topic_above_post_stream_code: "above_post_stream_ad_unit", + adsense_topic_above_post_stream_ad_sizes: "728*90 - leaderboard", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "", + topic_above_post_stream: "", + topic_above_suggested: "", + post_bottom: "", + after_nth_post: 20, + }, + creatives: {}, + }, + }); - test("correct number of ads should show", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - groups: [AUTO_GROUPS.trust_level_1], - show_adsense_ads: true, - show_to_groups: true, - }); - await visit("/t/280"); // 20 posts + test("correct number of ads should show", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + groups: [AUTO_GROUPS.trust_level_1], + show_adsense_ads: true, + show_to_groups: true, + }); + await visit("/t/280"); // 20 posts - assert - .dom(".google-adsense.adsense-topic-above-post-stream") - .exists({ count: 1 }, "it should render 1 ad above post stream"); + assert + .dom(".google-adsense.adsense-topic-above-post-stream") + .exists({ count: 1 }, "it should render 1 ad above post stream"); - assert - .dom(".google-adsense.adsense-post-bottom") - .exists({ count: 3 }, "it should render 3 ads"); + assert + .dom(".google-adsense.adsense-post-bottom") + .exists({ count: 3 }, "it should render 3 ads"); - assert - .dom("#post_6 + .widget-connector .google-adsense.adsense-post-bottom") - .exists({ count: 1 }, "ad after 6th post"); + assert + .dom("#post_6 + .ad-connector .google-adsense.adsense-post-bottom") + .exists({ count: 1 }, "ad after 6th post"); - assert - .dom("#post_12 + .widget-connector .google-adsense.adsense-post-bottom") - .exists({ count: 1 }, "ad after 12th post"); + assert + .dom("#post_12 + .ad-connector .google-adsense.adsense-post-bottom") + .exists({ count: 1 }, "ad after 12th post"); - assert - .dom("#post_18 + .widget-connector .google-adsense.adsense-post-bottom") - .exists({ count: 1 }, "ad after 18th post"); - }); + assert + .dom("#post_18 + .ad-connector .google-adsense.adsense-post-bottom") + .exists({ count: 1 }, "ad after 18th post"); + }); - test("no ads for trust level 3", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 3, - groups: [AUTO_GROUPS.trust_level_3], - }); - await visit("/t/280"); - assert - .dom(".google-adsense.adsense-post-bottom") - .doesNotExist("it should render 0 ads"); - }); + test("no ads for trust level 3", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 3, + groups: [AUTO_GROUPS.trust_level_3], + }); + await visit("/t/280"); + assert + .dom(".google-adsense.adsense-post-bottom") + .doesNotExist("it should render 0 ads"); + }); - test("can omit ads based on groups", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - groups: [groupFixtures["/groups/discourse.json"].group], - }); - await visit("/t/280"); - assert - .dom(".google-adsense.adsense-post-bottom") - .doesNotExist("it should render 0 ads"); - }); + test("can omit ads based on groups", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + groups: [groupFixtures["/groups/discourse.json"].group], + }); + await visit("/t/280"); + assert + .dom(".google-adsense.adsense-post-bottom") + .doesNotExist("it should render 0 ads"); + }); - test("can omit ads based on category", async (assert) => { - updateCurrentUser({ staff: false, trust_level: 1 }); - await visit("/t/28830"); - assert - .dom(".google-adsense.adsense-topic-above-post-stream") - .doesNotExist("it should render 0 ads"); - }); + test("can omit ads based on category", async (assert) => { + updateCurrentUser({ staff: false, trust_level: 1 }); + await visit("/t/28830"); + assert + .dom(".google-adsense.adsense-topic-above-post-stream") + .doesNotExist("it should render 0 ads"); + }); + } + ); }); diff --git a/test/javascripts/acceptance/dfp-test.js b/test/javascripts/acceptance/dfp-test.js index 7e0e610..1973614 100644 --- a/test/javascripts/acceptance/dfp-test.js +++ b/test/javascripts/acceptance/dfp-test.js @@ -7,98 +7,107 @@ import { updateCurrentUser, } from "discourse/tests/helpers/qunit-helpers"; -acceptance("DFP Ads", function (needs) { - needs.user(); - needs.settings({ - no_ads_for_groups: "47", - no_ads_for_categories: "1", - dfp_publisher_id: "MYdfpID", - dfp_through_trust_level: 2, - dfp_display_groups: [AUTO_GROUPS.trust_level_1, AUTO_GROUPS.trust_level_2], - dfp_topic_list_top_code: "list_top_ad_unit", - dfp_topic_list_top_ad_sizes: "728*90 - leaderboard", - dfp_mobile_topic_list_top_code: "mobile_list_top_ad_unit", - dfp_mobile_topic_list_top_ad_size: "300*250 - medium rectangle", - dfp_post_bottom_code: "post_bottom_ad_unit", - dfp_post_bottom_ad_sizes: "728*90 - leaderboard", - dfp_mobile_post_bottom_code: "mobile_post_bottom_ad_unit", - dfp_mobile_post_bottom_ad_size: "300*250 - medium rectangle", - dfp_nth_post_code: 6, - dfp_topic_above_post_stream_code: "list_top_ad_unit", - dfp_topic_above_post_stream_ad_sizes: "728*90 - leaderboard", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "", - topic_above_post_stream: "", - topic_above_suggested: "", - post_bottom: "", - after_nth_post: 20, - }, - creatives: {}, - }, - }); +["enabled", "disabled"].forEach((postStreamMode) => { + acceptance( + `DFP Ads (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.user(); + needs.settings({ + no_ads_for_groups: "47", + no_ads_for_categories: "1", + dfp_publisher_id: "MYdfpID", + dfp_through_trust_level: 2, + dfp_display_groups: [ + AUTO_GROUPS.trust_level_1, + AUTO_GROUPS.trust_level_2, + ], + dfp_topic_list_top_code: "list_top_ad_unit", + dfp_topic_list_top_ad_sizes: "728*90 - leaderboard", + dfp_mobile_topic_list_top_code: "mobile_list_top_ad_unit", + dfp_mobile_topic_list_top_ad_size: "300*250 - medium rectangle", + dfp_post_bottom_code: "post_bottom_ad_unit", + dfp_post_bottom_ad_sizes: "728*90 - leaderboard", + dfp_mobile_post_bottom_code: "mobile_post_bottom_ad_unit", + dfp_mobile_post_bottom_ad_size: "300*250 - medium rectangle", + dfp_nth_post_code: 6, + dfp_topic_above_post_stream_code: "list_top_ad_unit", + dfp_topic_above_post_stream_ad_sizes: "728*90 - leaderboard", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "", + topic_above_post_stream: "", + topic_above_suggested: "", + post_bottom: "", + after_nth_post: 20, + }, + creatives: {}, + }, + }); - test("correct number of ads should show", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - show_dfp_ads: true, - show_to_groups: true, - }); - await visit("/t/280"); // 20 posts + test("correct number of ads should show", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + show_dfp_ads: true, + show_to_groups: true, + }); + await visit("/t/280"); // 20 posts - assert - .dom(".google-dfp-ad.dfp-ad-post-bottom") - .exists({ count: 3 }, "it should render 3 ads"); + assert + .dom(".google-dfp-ad.dfp-ad-post-bottom") + .exists({ count: 3 }, "it should render 3 ads"); - assert - .dom("#post_6 + .widget-connector .google-dfp-ad.dfp-ad-post-bottom") - .exists({ count: 1 }, "ad after 6th post"); + assert + .dom("#post_6 + .ad-connector .google-dfp-ad.dfp-ad-post-bottom") + .exists({ count: 1 }, "ad after 6th post"); - assert - .dom("#post_12 + .widget-connector .google-dfp-ad.dfp-ad-post-bottom") - .exists({ count: 1 }, "ad after 12th post"); + assert + .dom("#post_12 + .ad-connector .google-dfp-ad.dfp-ad-post-bottom") + .exists({ count: 1 }, "ad after 12th post"); - assert - .dom("#post_18 + .widget-connector .google-dfp-ad.dfp-ad-post-bottom") - .exists({ count: 1 }, "ad after 18th post"); - }); + assert + .dom("#post_18 + .ad-connector .google-dfp-ad.dfp-ad-post-bottom") + .exists({ count: 1 }, "ad after 18th post"); + }); - test("no ads for trust level 3", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 3, - groups: [ - AUTO_GROUPS.trust_level_1, - AUTO_GROUPS.trust_level_2, - AUTO_GROUPS.trust_level_3, - ], - }); - await visit("/t/280"); - assert - .dom(".google-dfp-ad.dfp-ad-post-bottom") - .doesNotExist("it should render 0 ads"); - }); + test("no ads for trust level 3", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 3, + groups: [ + AUTO_GROUPS.trust_level_1, + AUTO_GROUPS.trust_level_2, + AUTO_GROUPS.trust_level_3, + ], + }); + await visit("/t/280"); + assert + .dom(".google-dfp-ad.dfp-ad-post-bottom") + .doesNotExist("it should render 0 ads"); + }); - test("can omit ads based on groups", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - groups: [groupFixtures["/groups/discourse.json"].group], - }); - await visit("/t/280"); - assert - .dom(".google-dfp-ad.dfp-ad-post-bottom") - .doesNotExist("it should render 0 ads"); - }); + test("can omit ads based on groups", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + groups: [groupFixtures["/groups/discourse.json"].group], + }); + await visit("/t/280"); + assert + .dom(".google-dfp-ad.dfp-ad-post-bottom") + .doesNotExist("it should render 0 ads"); + }); - test("can omit ads based on category", async (assert) => { - updateCurrentUser({ staff: false, trust_level: 1 }); - await visit("/t/28830"); - assert - .dom(".google-dfp-ad.dfp-ad-topic-above-post-stream") - .doesNotExist("it should render 0 ads"); - }); + test("can omit ads based on category", async (assert) => { + updateCurrentUser({ staff: false, trust_level: 1 }); + await visit("/t/28830"); + assert + .dom(".google-dfp-ad.dfp-ad-topic-above-post-stream") + .doesNotExist("it should render 0 ads"); + }); + } + ); }); diff --git a/test/javascripts/acceptance/house-ad-test.js b/test/javascripts/acceptance/house-ad-test.js index de78a25..ea5f768 100644 --- a/test/javascripts/acceptance/house-ad-test.js +++ b/test/javascripts/acceptance/house-ad-test.js @@ -6,326 +6,344 @@ import { updateCurrentUser, } from "discourse/tests/helpers/qunit-helpers"; -acceptance("House Ads", function (needs) { - needs.user(); - needs.settings({ - no_ads_for_categories: "1", - house_ads_after_nth_post: 6, - house_ads_after_nth_topic: 3, - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - topic_above_post_stream: "Above Post Stream", - topic_above_suggested: "Above Suggested", - post_bottom: "Post", - topic_list_between: "Between Topic List", - after_nth_post: 6, - after_nth_topic: 6, - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - category_ids: [], +["enabled", "disabled"].forEach((postStreamMode) => { + acceptance( + `House Ads (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.user(); + needs.settings({ + no_ads_for_categories: "1", + house_ads_after_nth_post: 6, + house_ads_after_nth_topic: 3, + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + topic_above_post_stream: "Above Post Stream", + topic_above_suggested: "Above Suggested", + post_bottom: "Post", + topic_list_between: "Between Topic List", + after_nth_post: 6, + after_nth_topic: 6, + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + category_ids: [], + }, + "Above Post Stream": { + html: "
ABOVE POST STREAM
", + category_ids: [], + }, + "Above Suggested": { + html: "
ABOVE SUGGESTED
", + category_ids: [], + }, + Post: { + html: "
BELOW POST
", + category_ids: [], + }, + "Between Topic List": { + html: "
BETWEEN TOPIC LIST
", + category_ids: [], + }, + }, }, - "Above Post Stream": { - html: "
ABOVE POST STREAM
", - category_ids: [], + }); + + test("correct ads show", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + show_to_groups: true, + }); + await visit("/t/280"); // 20 posts + + assert + .dom(".h-above-post-stream") + .exists({ count: 1 }, "it should render ad at top of topic"); + + assert + .dom(".h-above-suggested") + .exists({ count: 1 }, "it should render ad above suggested topics"); + + assert + .dom(".h-post") + .exists({ count: 3 }, "it should render 3 ads between posts"); + + assert + .dom("#post_6 + .ad-connector .h-post") + .exists({ count: 1 }, "ad after 6th post"); + + assert + .dom("#post_12 + .ad-connector .h-post") + .exists({ count: 1 }, "ad after 12th post"); + + assert + .dom("#post_18 + .ad-connector .h-post") + .exists({ count: 1 }, "ad after 18th post"); + + await visit("/latest"); + + assert + .dom(".h-topic-list") + .exists({ count: 1 }, "it should render ad above topic list"); + const originalTopAdElement = query(".h-topic-list"); + + assert + .dom(".h-between-topic-list") + .exists({ count: 5 }, "it should render 5 ads between topics"); + + await visit("/top"); + const newTopAdElement = query(".h-topic-list"); + + assert.notStrictEqual( + originalTopAdElement, + newTopAdElement, + "ad is fully re-rendered when changing pages" + ); + + await visit("/t/28830"); + + assert + .dom(".h-above-post-stream") + .doesNotExist( + "no ad above post stream because category is in no_ads_for_categories" + ); + + assert + .dom(".h-post") + .doesNotExist( + "no ad between posts because category is in no_ads_for_categories" + ); + + assert + .dom(".h-above-suggested") + .doesNotExist( + "no ad above suggested because category is in no_ads_for_categories" + ); + + await visit("/c/bug"); + + assert + .dom(".h-topic-list") + .doesNotExist( + "no ad above category topic list because category is in no_ads_for_categories" + ); + }); + } + ); + + acceptance( + `House Ads | Category and Group Permissions | Authenticated | Display Ad (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.user(); + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + // match /c/bug/1 + category_ids: [1], + }, + }, }, - "Above Suggested": { - html: "
ABOVE SUGGESTED
", - category_ids: [], + }); + + test("displays ad to users when current category id is included in ad category_ids", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + show_to_groups: true, + }); + await visit("/c/bug/1"); + assert + .dom(".h-topic-list") + .exists( + "ad is displayed above the topic list because the current category id is included in the ad category_ids" + ); + }); + } + ); + + acceptance( + `House Ads | Category and Group Permissions | Authenticated | Hide Ad (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.user(); + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + // restrict ad to a different category than /c/bug/1 + category_ids: [2], + }, + }, }, - Post: { - html: "
BELOW POST
", - category_ids: [], + }); + + test("hides ad to users when current category id is not included in ad category_ids", async (assert) => { + updateCurrentUser({ + staff: false, + trust_level: 1, + show_to_groups: true, + }); + await visit("/c/bug/1"); + assert + .dom(".h-topic-list") + .doesNotExist( + "ad is not displayed because the current category id is not included in the ad category_ids" + ); + }); + } + ); + + acceptance( + `House Ads | Category and Group Permissions | Anonymous | Hide Ad (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + // restrict ad to a different category than /c/bug/1 + category_ids: [2], + }, + }, }, - "Between Topic List": { - html: "
BETWEEN TOPIC LIST
", - category_ids: [], + }); + + test("hides ad to anon users when current category id is not included in ad category_ids", async (assert) => { + await visit("/c/bug/1"); + assert + .dom(".h-topic-list") + .doesNotExist( + "ad is not displayed because the current category id is not included in the ad category_ids" + ); + }); + } + ); + + acceptance( + `House Ads | Category and Group Permissions | Anonymous | Hide Ad (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + // restrict ad to a different category than /c/bug/1 + category_ids: [2], + }, + }, }, - }, - }, - }); + }); - test("correct ads show", async (assert) => { - updateCurrentUser({ staff: false, trust_level: 1, show_to_groups: true }); - await visit("/t/280"); // 20 posts + test("hides ad to anon users when current category id is not included in ad category_ids", async (assert) => { + await visit("/c/bug/1"); + assert + .dom(".h-topic-list") + .doesNotExist( + "ad is not displayed because the current category id is not included in the ad category_ids" + ); + }); + } + ); - assert - .dom(".h-above-post-stream") - .exists({ count: 1 }, "it should render ad at top of topic"); + acceptance( + `House Ads | Category and Group Permissions | Anonymous | Show Ad (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top", + }, + creatives: { + "Topic List Top": { + html: "
TOPIC LIST TOP
", + // match /c/bug/1 + category_ids: [1], + }, + }, + }, + }); - assert - .dom(".h-above-suggested") - .exists({ count: 1 }, "it should render ad above suggested topics"); + test("shows ad to anon users when current category id is included in ad category_ids", async (assert) => { + await visit("/c/bug/1"); + assert + .dom(".h-topic-list") + .exists( + "ad is displayed because the current category id is included in the ad category_ids" + ); + }); + } + ); - assert - .dom(".h-post") - .exists({ count: 3 }, "it should render 3 ads between posts"); + acceptance( + `House Ads | Category and Group Permissions | Anonymous | Show non-restricted ads (glimmer_post_stream_mode = ${postStreamMode})`, + function (needs) { + needs.settings({ + no_ads_for_categories: "", + glimmer_post_stream_mode: postStreamMode, + }); + needs.site({ + house_creatives: { + settings: { + topic_list_top: "Topic List Top One|Topic List Top Two", + }, + creatives: { + "Topic List Top One": { + html: "
TOPIC LIST TOP ONE
", + category_ids: [2], + }, + "Topic List Top Two": { + html: "
TOPIC LIST TOP TWO
", + category_ids: [], + }, + }, + }, + }); - assert - .dom("#post_6 + .widget-connector .h-post") - .exists({ count: 1 }, "ad after 6th post"); - - assert - .dom("#post_12 + .widget-connector .h-post") - .exists({ count: 1 }, "ad after 12th post"); - - assert - .dom("#post_18 + .widget-connector .h-post") - .exists({ count: 1 }, "ad after 18th post"); - - await visit("/latest"); - - assert - .dom(".h-topic-list") - .exists({ count: 1 }, "it should render ad above topic list"); - const originalTopAdElement = query(".h-topic-list"); - - assert - .dom(".h-between-topic-list") - .exists({ count: 5 }, "it should render 5 ads between topics"); - - await visit("/top"); - const newTopAdElement = query(".h-topic-list"); - - assert.notStrictEqual( - originalTopAdElement, - newTopAdElement, - "ad is fully re-rendered when changing pages" - ); - - await visit("/t/28830"); - - assert - .dom(".h-above-post-stream") - .doesNotExist( - "no ad above post stream because category is in no_ads_for_categories" - ); - - assert - .dom(".h-post") - .doesNotExist( - "no ad between posts because category is in no_ads_for_categories" - ); - - assert - .dom(".h-above-suggested") - .doesNotExist( - "no ad above suggested because category is in no_ads_for_categories" - ); - - await visit("/c/bug"); - - assert - .dom(".h-topic-list") - .doesNotExist( - "no ad above category topic list because category is in no_ads_for_categories" - ); - }); + test("shows non-restricted ad to anon users", async (assert) => { + await visit("/c/bug/1"); + assert + .dom(".h-topic-list-two") + .exists("non-restricted ad is displayed"); + }); + } + ); }); - -acceptance( - "House Ads | Category and Group Permissions | Authenticated | Display Ad", - function (needs) { - needs.user(); - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - // match /c/bug/1 - category_ids: [1], - }, - }, - }, - }); - - test("displays ad to users when current category id is included in ad category_ids", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - show_to_groups: true, - }); - await visit("/c/bug/1"); - assert - .dom(".h-topic-list") - .exists( - "ad is displayed above the topic list because the current category id is included in the ad category_ids" - ); - }); - } -); - -acceptance( - "House Ads | Category and Group Permissions | Authenticated | Hide Ad", - function (needs) { - needs.user(); - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - // restrict ad to a different category than /c/bug/1 - category_ids: [2], - }, - }, - }, - }); - - test("hides ad to users when current category id is not included in ad category_ids", async (assert) => { - updateCurrentUser({ - staff: false, - trust_level: 1, - show_to_groups: true, - }); - await visit("/c/bug/1"); - assert - .dom(".h-topic-list") - .doesNotExist( - "ad is not displayed because the current category id is not included in the ad category_ids" - ); - }); - } -); - -acceptance( - "House Ads | Category and Group Permissions | Anonymous | Hide Ad", - function (needs) { - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - // restrict ad to a different category than /c/bug/1 - category_ids: [2], - }, - }, - }, - }); - - test("hides ad to anon users when current category id is not included in ad category_ids", async (assert) => { - await visit("/c/bug/1"); - assert - .dom(".h-topic-list") - .doesNotExist( - "ad is not displayed because the current category id is not included in the ad category_ids" - ); - }); - } -); - -acceptance( - "House Ads | Category and Group Permissions | Anonymous | Hide Ad", - function (needs) { - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - // restrict ad to a different category than /c/bug/1 - category_ids: [2], - }, - }, - }, - }); - - test("hides ad to anon users when current category id is not included in ad category_ids", async (assert) => { - await visit("/c/bug/1"); - assert - .dom(".h-topic-list") - .doesNotExist( - "ad is not displayed because the current category id is not included in the ad category_ids" - ); - }); - } -); - -acceptance( - "House Ads | Category and Group Permissions | Anonymous | Show Ad", - function (needs) { - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top", - }, - creatives: { - "Topic List Top": { - html: "
TOPIC LIST TOP
", - // match /c/bug/1 - category_ids: [1], - }, - }, - }, - }); - - test("shows ad to anon users when current category id is included in ad category_ids", async (assert) => { - await visit("/c/bug/1"); - assert - .dom(".h-topic-list") - .exists( - "ad is displayed because the current category id is included in the ad category_ids" - ); - }); - } -); - -acceptance( - "House Ads | Category and Group Permissions | Anonymous | Show non-restricted ads", - function (needs) { - needs.settings({ - no_ads_for_categories: "", - }); - needs.site({ - house_creatives: { - settings: { - topic_list_top: "Topic List Top One|Topic List Top Two", - }, - creatives: { - "Topic List Top One": { - html: "
TOPIC LIST TOP ONE
", - category_ids: [2], - }, - "Topic List Top Two": { - html: "
TOPIC LIST TOP TWO
", - category_ids: [], - }, - }, - }, - }); - - test("shows non-restricted ad to anon users", async (assert) => { - await visit("/c/bug/1"); - assert.dom(".h-topic-list-two").exists("non-restricted ad is displayed"); - }); - } -);