Blake Erickson b0c95114ea
FIX: Calculate no ads for groups server side (#200)
If the selected group to not display ads to had its visibility set to
not be visible then this setting wouldn't work correctly because that
group wouldn't be available client side. The change moves that group
check to be server side so that we can correctly see all the groups that
should not see ads.
2024-02-15 14:52:15 -07:00

105 lines
3.2 KiB
JavaScript

import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import { AUTO_GROUPS } from "discourse/lib/constants";
import groupFixtures from "discourse/tests/fixtures/group-fixtures";
import {
acceptance,
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: {},
},
});
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("#post_6 + .widget-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_18 + .widget-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("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");
});
});