accounts_fixtures.ex (2215B)
1 defmodule DailyTracker.AccountsFixtures do 2 @moduledoc """ 3 This module defines test helpers for creating 4 entities via the `DailyTracker.Accounts` context. 5 """ 6 7 import Ecto.Query 8 9 alias DailyTracker.Accounts 10 alias DailyTracker.Accounts.Scope 11 12 def unique_user_email, do: "user#{System.unique_integer()}@example.com" 13 def valid_user_password, do: "hello world!" 14 15 def valid_user_attributes(attrs \\ %{}) do 16 Enum.into(attrs, %{ 17 email: unique_user_email() 18 }) 19 end 20 21 def unconfirmed_user_fixture(attrs \\ %{}) do 22 {:ok, user} = 23 attrs 24 |> valid_user_attributes() 25 |> Accounts.register_user() 26 27 user 28 end 29 30 def user_fixture(attrs \\ %{}) do 31 user = unconfirmed_user_fixture(attrs) 32 33 token = 34 extract_user_token(fn url -> 35 Accounts.deliver_login_instructions(user, url) 36 end) 37 38 {:ok, {user, _expired_tokens}} = 39 Accounts.login_user_by_magic_link(token) 40 41 user 42 end 43 44 def user_scope_fixture do 45 user = user_fixture() 46 user_scope_fixture(user) 47 end 48 49 def user_scope_fixture(user) do 50 Scope.for_user(user) 51 end 52 53 def set_password(user) do 54 {:ok, {user, _expired_tokens}} = 55 Accounts.update_user_password(user, %{password: valid_user_password()}) 56 57 user 58 end 59 60 def extract_user_token(fun) do 61 {:ok, captured_email} = fun.(&"[TOKEN]#{&1}[TOKEN]") 62 [_, token | _] = String.split(captured_email.text_body, "[TOKEN]") 63 token 64 end 65 66 def override_token_authenticated_at(token, authenticated_at) when is_binary(token) do 67 DailyTracker.Repo.update_all( 68 from(t in Accounts.UserToken, 69 where: t.token == ^token 70 ), 71 set: [authenticated_at: authenticated_at] 72 ) 73 end 74 75 def generate_user_magic_link_token(user) do 76 {encoded_token, user_token} = Accounts.UserToken.build_email_token(user, "login") 77 DailyTracker.Repo.insert!(user_token) 78 {encoded_token, user_token.token} 79 end 80 81 def offset_user_token(token, amount_to_add, unit) do 82 dt = DateTime.add(DateTime.utc_now(:second), amount_to_add, unit) 83 84 DailyTracker.Repo.update_all( 85 from(ut in Accounts.UserToken, where: ut.token == ^token), 86 set: [inserted_at: dt, authenticated_at: dt] 87 ) 88 end 89 end