2022-05-27 10:11:40 +03:00
|
|
|
defmodule PlausibleWeb.TrackerTest do
|
2022-10-11 13:19:28 +03:00
|
|
|
@moduledoc """
|
|
|
|
This test module uses auto-generated JavaScript tracker files in priv/tracker/js.
|
|
|
|
|
|
|
|
To speed up running Elixir tests locally, the tracker files are not automatically generated
|
|
|
|
with every `mix test` command. That means, you have to manually run the below command
|
|
|
|
once before executing `mix test`. This is to make sure all tracker files are in place and up to date.
|
|
|
|
|
|
|
|
```
|
|
|
|
npm run deploy --prefix tracker
|
|
|
|
```
|
|
|
|
|
|
|
|
If you're making changes in the tracker template files (`src/plausible.js`, `compile.js`),
|
|
|
|
do regenerate the files before running tests, so they're up to date.
|
|
|
|
"""
|
2022-12-26 16:20:29 +03:00
|
|
|
use PlausibleWeb.ConnCase, async: true
|
2022-05-27 10:11:40 +03:00
|
|
|
use Plug.Test
|
|
|
|
|
|
|
|
test "returns legacy script p.js" do
|
|
|
|
assert String.contains?(get_script("p.js"), "; samesite=strict; path=/")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "returns plausible script with every alias" do
|
|
|
|
plausible_js_response = get_script("plausible.js")
|
|
|
|
|
|
|
|
assert plausible_js_response == get_script("script.js")
|
|
|
|
assert plausible_js_response == get_script("analytics.js")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "returns the right script extensions no matter the order" do
|
|
|
|
response = get_script("plausible.compat.file-downloads.hash.outbound-links.js")
|
|
|
|
|
|
|
|
assert String.contains?(response, "getElementById(\"plausible\")")
|
|
|
|
assert String.contains?(response, "file-types")
|
|
|
|
assert String.contains?(response, "hashchange")
|
|
|
|
assert String.contains?(response, "Outbound Link: Click")
|
|
|
|
|
|
|
|
assert !String.contains?(response, "data-exclude")
|
|
|
|
# local extension disabled
|
|
|
|
assert String.contains?(response, "/^localhost$|^127(\\.[0-9]+)")
|
|
|
|
|
|
|
|
assert response == get_script("plausible.outbound-links.file-downloads.compat.hash.js")
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_script(filename) do
|
|
|
|
opts = PlausibleWeb.Tracker.init([])
|
|
|
|
|
|
|
|
conn(:get, "/js/#{filename}")
|
|
|
|
|> PlausibleWeb.Tracker.call(opts)
|
|
|
|
|> response(200)
|
|
|
|
end
|
|
|
|
end
|