daily-tracker

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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