import { visit } from "@ember/test-helpers"; import { test } from "qunit"; import { acceptance, query, 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: [], }, "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: [], }, }, }, }); 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 + .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" ); }); }); 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"); }); } );