defmodule Plausible.Plugins.API.TokenTest do use Plausible.DataCase, async: false alias Plausible.Plugins.API.Token @tag :ee_only test "basic token properties" do t1 = Token.generate() t2 = Token.generate() assert is_binary(t1.raw) assert is_binary(t1.hash) assert is_binary(t2.raw) assert is_binary(t2.hash) assert byte_size(t1.hash) == 32 assert byte_size(t2.hash) == 32 assert <<"plausible-plugin-test-", _::binary-size(40)>> = t1.raw assert <<"plausible-plugin-test-", _::binary-size(40)>> = t2.raw assert t1.raw != t2.raw assert t1.hash != t2.hash end describe "prefix/0" do @tag :ee_only test "default prefix - full build" do assert Token.prefix() == "plausible-plugin-test" end @tag :ce_build_only test "selfhosted prefix" do assert Token.prefix() == "plausible-plugin-selfhost" end @tag :ee_only test "prod prefix" do patch_env(:environment, "prod") assert Token.prefix() == "plausible-plugin" end @tag :ee_only test "staging prefix" do patch_env(:environment, "staging") assert Token.prefix() == "plausible-plugin-staging" end end describe "insert_changeset/2" do test "required fields" do changeset = Token.insert_changeset(nil, %{raw: "", hash: ""}, %{}) refute changeset.valid? assert [ description: {"can't be blank", _}, site: {"can't be blank", _}, token_hash: {"can't be blank", _}, hint: {"can't be blank", _} ] = changeset.errors end test "valid changeset" do site = build(:site, id: 1_892_787) changeset = Token.insert_changeset(site, Token.generate(), %{ "description" => "My token" }) assert changeset.valid? assert Ecto.Changeset.get_field(changeset, :site).id == 1_892_787 end end test "last_used_humanize/1" do now = NaiveDateTime.utc_now() last_seen = fn shift -> Token.last_used_humanize(%Token{last_used_at: NaiveDateTime.shift(now, shift)}) end assert Token.last_used_humanize(%Token{}) == "Not yet" assert last_seen.(minute: -1) == "Just recently" assert last_seen.(minute: -4) == "Just recently" assert last_seen.(minute: -6) == "Several minutes ago" assert last_seen.(hour: -1) == "An hour ago" assert last_seen.(hour: -7) == "Hours ago" assert last_seen.(day: -1) == "Yesterday" assert last_seen.(day: -3) == "Sometime this week" assert last_seen.(month: -1) == "Long time ago" end end