Skip to content
Open

v12 #40

Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
4e33371
Fix problem with solana extension
ironbrands16 May 11, 2023
38373b8
Move from _phantom to phantom
adriaandotcom May 12, 2023
ea0cd3d
Merge pull request #39 from ironbrands16/patch-1
adriaandotcom May 12, 2023
f79ba5d
Run prettier via GitHub Action
May 12, 2023
3d7ccb5
Fix bug in checking phantom.solana
adriaandotcom Jun 19, 2023
65a6c3a
Always expose sa_pageview
adriaandotcom Jun 29, 2023
a914c9a
Check for Cloudflare under attack mode param
adriaandotcom Jul 14, 2023
de31383
Run prettier via GitHub Action
Jul 14, 2023
4924174
Test for all Cloudflare params
adriaandotcom Jul 14, 2023
23e043d
Clean subdomain hostname, fix auto events for links with child elemen…
adriaandotcom Mar 7, 2024
dc1a3ef
Add acron and remove trailing comma
adriaandotcom Feb 13, 2025
6e7ce19
Run prettier via GitHub Action
adriaandotcom Feb 13, 2025
e717409
Save local changes [no ci]
adriaandotcom May 27, 2025
8845936
Add jsdom unit tests
adriaandotcom May 27, 2025
46992f6
Fix default test without Browserstack
adriaandotcom May 29, 2025
5dad1ea
Add unit test to job
adriaandotcom May 29, 2025
770470a
Make sure all node js version are the same
adriaandotcom May 29, 2025
cda1d7d
Merge pull request #63 from simpleanalytics/codex/set-up-unit-tests-w…
adriaandotcom May 29, 2025
3fb3495
Merge branch 'v12' into v12-b
adriaandotcom May 29, 2025
065dbb1
Allow overwriting referrer
adriaandotcom May 29, 2025
ae84e8d
Merge pull request #62 from simpleanalytics/v12-b
adriaandotcom May 29, 2025
e1702cf
Rename testing file
adriaandotcom May 29, 2025
779661a
Run prettier in dry mode [no ci]
adriaandotcom May 29, 2025
dc35828
Add AGENTS guidance
adriaandotcom May 29, 2025
f99b45f
Improve AGENTS.md
adriaandotcom May 29, 2025
fbdd6ee
Add .cursorrules [no ci]
adriaandotcom May 29, 2025
fb045ce
Merge pull request #64 from simpleanalytics/codex/create-agents.md-fi…
adriaandotcom May 29, 2025
6bbf49a
Add modular unit tests and helpers
adriaandotcom May 29, 2025
d16c953
Merge pull request #65 from simpleanalytics/codex/plan-unit-testing-s…
adriaandotcom May 29, 2025
6f06801
Run browserstack not every time, and add linting
adriaandotcom May 29, 2025
b721ad0
Run browserstack not every time, for real
adriaandotcom May 29, 2025
495be42
Require prettier for brwoserstack too
adriaandotcom May 29, 2025
6bb5c0d
Rename prettier to linting
adriaandotcom May 29, 2025
8bfb9ec
Merge pull request #67 from simpleanalytics/codex/create-agents.md-file
adriaandotcom May 29, 2025
0a8a5ff
chore: fix eslint errors
adriaandotcom May 30, 2025
47bda2f
Merge pull request #68 from simpleanalytics/codex/fix-eslint-errors
adriaandotcom May 30, 2025
bfd91a4
feat(auto-events): skip automation when data-simple-event present
adriaandotcom May 30, 2025
912f482
Add manual build step
adriaandotcom May 30, 2025
5ee72b9
Merge branch 'v12' into codex/skip-automated-events-for-data-simple-e…
adriaandotcom May 30, 2025
0f12612
Merge pull request #69 from simpleanalytics/codex/skip-automated-even…
adriaandotcom May 30, 2025
82fcbb4
Rename to Testing Suite
adriaandotcom May 30, 2025
e38d8f6
Merge branch 'main' into v12
adriaandotcom May 30, 2025
21ae5b7
fix metadata reload in appendMetadata
adriaandotcom May 30, 2025
c256994
Merge pull request #70 from simpleanalytics/codex/fix-sa_metadata-loa…
adriaandotcom May 30, 2025
1835428
Bind sendBeacon calls
adriaandotcom May 30, 2025
f37e4ee
Merge branch 'v12' into codex/implement-fix-for-sendbeacon-error
adriaandotcom May 30, 2025
cfdd6f6
Merge pull request #71 from simpleanalytics/codex/implement-fix-for-s…
adriaandotcom May 30, 2025
7dc389f
Add callback support to sa_pageview
adriaandotcom May 30, 2025
3ac0008
Merge branch 'v12' into codex/add-callback-to-sa_pageview
adriaandotcom May 30, 2025
76b0426
Merge pull request #72 from simpleanalytics/codex/add-callback-to-sa_…
adriaandotcom Jun 13, 2025
cba0b20
Checkout dist after test:unit
adriaandotcom Jun 13, 2025
2d165c9
Reuse query param filter for manual pageviews
adriaandotcom Jun 13, 2025
984f634
Merge branch 'v12' into codex/fix-query-param-handling-in-sa_pageview
adriaandotcom Jun 13, 2025
2bfd05c
Merge pull request #74 from simpleanalytics/codex/fix-query-param-han…
adriaandotcom Jun 13, 2025
8ed3786
test: add metadata collector attr test
adriaandotcom Jun 13, 2025
28bf151
Merge branch 'v12' into codex/add-test-for-data-metadata-collector
adriaandotcom Jun 13, 2025
e1b021e
Merge pull request #75 from simpleanalytics/codex/add-test-for-data-m…
adriaandotcom Jun 13, 2025
571b372
Run npm run build
adriaandotcom Jun 13, 2025
c938f2f
Add tel link tracking to auto events
adriaandotcom Jun 13, 2025
67edab1
Add unit tests for auto-events
adriaandotcom Jun 13, 2025
defc6a0
Warn when metadata collector function is not found
adriaandotcom Jun 24, 2025
a216bda
Run npm run build
adriaandotcom Jun 24, 2025
aa513da
Merge pull request #77 from simpleanalytics/codex/add-unit-tests-for-…
adriaandotcom Jun 24, 2025
78bc66d
Fix delayed phone link events
adriaandotcom Jun 24, 2025
dc116ae
Merge pull request #76 from simpleanalytics/codex/add-tel--clicks-to-…
adriaandotcom Jul 29, 2025
9294410
fix allowParams regex to be case insensitive
adriaandotcom Jul 29, 2025
c869bb0
Merge pull request #81 from simpleanalytics/codex/make-allow-params-r…
adriaandotcom Jul 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions test/unit/auto-events.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
const { expect } = require("chai");
const { createDOM } = require("./helpers/dom-auto-events");

function setupDOM() {
const events = [];
const dom = createDOM({
beforeRun(vm) {
vm.sa_event = function (name, metadata, cb) {
events.push({ name, metadata });
if (typeof cb === "function") cb();
};
vm.sa_event_loaded = true;
},
});
dom.events = events;
return dom;
}

describe("auto-events", function () {
it("tracks outbound link clicks", function (done) {
const dom = setupDOM();
const link = dom.window.document.createElement("a");
link.href = "https://example.org/path";
link.target = "_blank";
dom.window.document.body.appendChild(link);

dom.window.saAutomatedLink(link, "outbound");

setTimeout(() => {
expect(dom.events[0]).to.deep.include({ name: "outbound_example_org" });
expect(dom.events[0].metadata).to.include({ url: link.href });
done();
}, 0);
});

it("tracks download link clicks", function (done) {
const dom = setupDOM();
const link = dom.window.document.createElement("a");
link.href = "https://example.com/file.pdf";
link.target = "_blank";
dom.window.document.body.appendChild(link);

dom.window.saAutomatedLink(link, "download");

setTimeout(() => {
expect(dom.events[0]).to.deep.include({ name: "download_file_pdf" });
expect(dom.events[0].metadata).to.include({ url: link.href });
done();
}, 0);
});

it("tracks email link clicks", function (done) {
const dom = setupDOM();
const link = dom.window.document.createElement("a");
link.href = "mailto:test@example.com";
link.target = "_blank";
dom.window.document.body.appendChild(link);

dom.window.saAutomatedLink(link, "email");

setTimeout(() => {
expect(dom.events[0]).to.deep.include({ name: "email_test_example_com" });
expect(dom.events[0].metadata).to.include({ email: "test@example.com" });
done();
}, 0);
});
});
78 changes: 78 additions & 0 deletions test/unit/helpers/dom-auto-events.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
const { JSDOM } = require("jsdom");
const { readFileSync } = require("fs");
const vm = require("vm");

const SCRIPT_PATH = "dist/latest/auto-events.js";

/**
* @typedef {"navigate" | "reload" | "back_forward" | "prerender"} NavigationType
*/

/** @type {Record<NavigationType, {name: NavigationType, code: number}>} */
const NAVIGATION_TYPES = {
navigate: { name: "navigate", code: 0 },
reload: { name: "reload", code: 1 },
back_forward: { name: "back_forward", code: 2 },
prerender: { name: "prerender", code: 255 },
};

function createDOM(options = {}) {
const {
url = "https://example.com/",
navigationType = "navigate",
settings,
beforeRun,
} = options;
const dom = new JSDOM("<!doctype html><html><body></body></html>", {
url,
runScripts: "outside-only",
pretendToBeVisual: true,
});

if (settings) {
vm.runInContext(
`window.sa_settings = ${JSON.stringify(settings)}`,
dom.getInternalVMContext()
);
}

if (typeof beforeRun === "function") beforeRun(dom.getInternalVMContext());

const sent = [];
dom.window.Image = function () {
return {
set src(value) {
sent.push({ type: "image", url: value });
},
};
};
dom.window.navigator.sendBeacon = function (url, data) {
sent.push({ type: "beacon", url, data });
return true;
};

Object.defineProperty(dom.window, "performance", {
writable: true,
value: {
getEntriesByType: function (type) {
if (type === "navigation") {
return [{ type: NAVIGATION_TYPES[navigationType].name }];
}
return [];
},
navigation: { type: NAVIGATION_TYPES[navigationType].code },
},
});

const script = readFileSync(SCRIPT_PATH, "utf8");
vm.runInContext(script, dom.getInternalVMContext());

dom.sent = sent;
return dom;
}

module.exports = {
createDOM,
SCRIPT_PATH,
NAVIGATION_TYPES,
};