test_ASRouterTargeting_attribution.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /* Any copyright is dedicated to the Public Domain.
  2. * http://creativecommons.org/publicdomain/zero/1.0/
  3. */
  4. "use strict";
  5. const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
  6. const {AttributionCode} = ChromeUtils.import("resource:///modules/AttributionCode.jsm");
  7. const {ASRouterTargeting} = ChromeUtils.import("resource://activity-stream/lib/ASRouterTargeting.jsm");
  8. add_task(async function check_attribution_data() {
  9. // Some setup to fake the correct attribution data
  10. const appPath = Services.dirsvc.get("GreD", Ci.nsIFile).parent.parent.path;
  11. const attributionSvc = Cc["@mozilla.org/mac-attribution;1"]
  12. .getService(Ci.nsIMacAttributionService);
  13. const campaign = "non-fx-button";
  14. const source = "addons.mozilla.org";
  15. const referrer = `https://allizom.org/anything/?utm_campaign=${campaign}&utm_source=${source}`;
  16. attributionSvc.setReferrerUrl(appPath, referrer, true);
  17. AttributionCode._clearCache();
  18. AttributionCode.getAttrDataAsync();
  19. const {campaign: attributionCampain, source: attributionSource} = ASRouterTargeting.Environment.attributionData;
  20. equal(attributionCampain, campaign, "should get the correct campaign out of attributionData");
  21. equal(attributionSource, source, "should get the correct source out of attributionData");
  22. const messages = [
  23. {id: "foo1", targeting: "attributionData.campaign == 'back_to_school' && attributionData.source == 'addons.mozilla.org'"},
  24. {id: "foo2", targeting: "attributionData.campaign == 'non-fx-button' && attributionData.source == 'addons.mozilla.org'"},
  25. ];
  26. equal(await ASRouterTargeting.findMatchingMessage({messages}), messages[1],
  27. "should select the message with the correct campaign and source");
  28. AttributionCode._clearCache();
  29. });