towerops/test/support/fixtures/accounts_fixtures_test.exs
2026-06-15 11:15:46 -05:00

142 lines
4 KiB
Elixir

defmodule Towerops.AccountsFixturesTest do
use Towerops.DataCase
import Towerops.AccountsFixtures
alias Towerops.Accounts.UserToken
describe "unique_user_email/0" do
test "generates unique email addresses" do
email1 = unique_user_email()
email2 = unique_user_email()
assert email1 != email2
assert email1 =~ ~r/@example\.com$/
assert email2 =~ ~r/@example\.com$/
end
end
describe "valid_user_password/0" do
test "returns valid password" do
password = valid_user_password()
assert String.length(password) >= 12
end
end
describe "valid_user_attributes/1" do
test "returns valid user attributes with default email" do
attrs = valid_user_attributes()
assert attrs.email =~ ~r/@example\.com$/
end
test "merges provided attributes" do
attrs = valid_user_attributes(%{custom_field: "value"})
assert attrs.email =~ ~r/@example\.com$/
assert attrs.custom_field == "value"
end
end
describe "unconfirmed_user_fixture/1" do
test "creates an unconfirmed user" do
user = unconfirmed_user_fixture()
assert user.email =~ ~r/@example\.com$/
refute user.confirmed_at
end
test "creates user with custom attributes" do
email = "custom@example.com"
user = unconfirmed_user_fixture(%{email: email})
assert user.email == email
end
end
describe "user_fixture/1" do
test "creates a confirmed user" do
user = user_fixture()
assert user.email =~ ~r/@example\.com$/
assert user.confirmed_at
end
test "creates user with custom attributes" do
email = "confirmed@example.com"
user = user_fixture(%{email: email})
assert user.email == email
assert user.confirmed_at
end
end
describe "user_scope_fixture/0 and user_scope_fixture/1" do
test "creates a user scope without arguments" do
scope = user_scope_fixture()
assert scope.user
assert scope.user.email =~ ~r/@example\.com$/
end
test "creates a user scope from existing user" do
user = user_fixture()
scope = user_scope_fixture(user)
assert scope.user.id == user.id
end
end
describe "set_password/1" do
test "sets password for user" do
user = user_fixture()
user_with_password = set_password(user)
assert user_with_password.id == user.id
# Verify password was set by attempting login
assert Towerops.Accounts.get_user_by_email_and_password(
user_with_password.email,
valid_user_password()
)
end
end
describe "generate_user_magic_link_token/1" do
test "generates a magic link token for user" do
user = user_fixture()
{encoded_token, token} = generate_user_magic_link_token(user)
assert byte_size(encoded_token) > 0
assert byte_size(token) > 0
assert encoded_token != token
end
end
describe "offset_user_token/3" do
test "offsets a user token's timestamps" do
user = user_fixture()
{_encoded_token, token} = generate_user_magic_link_token(user)
assert {1, _} = offset_user_token(token, -1, :day)
# Verify the token was updated
assert %{inserted_at: inserted_at} = Towerops.Repo.get_by(UserToken, token: token)
assert DateTime.before?(inserted_at, DateTime.utc_now())
end
end
describe "override_token_authenticated_at/2" do
test "overrides authenticated_at for a token" do
user = user_fixture()
{_encoded_token, token} = generate_user_magic_link_token(user)
custom_time = DateTime.utc_now() |> DateTime.add(-2, :hour) |> DateTime.truncate(:second)
assert {1, _} = override_token_authenticated_at(token, custom_time)
# Verify the token was updated
assert %{authenticated_at: auth_at} = Towerops.Repo.get_by(UserToken, token: token)
# Compare with truncated time since database might store at second precision
assert DateTime.diff(auth_at, custom_time, :second) == 0
end
end
end