You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
asciinema.org/test/asciinema/accounts_test.exs

53 lines
1.6 KiB
Elixir

defmodule Asciinema.AccountsTest do
import Asciinema.Fixtures
use Asciinema.DataCase
use Bamboo.Test
alias Asciinema.Email
alias Asciinema.Accounts.User
describe "send_login_email/1" do
import Asciinema.Accounts, only: [send_login_email: 1]
test "existing user, by email" do
user = fixture(:user)
assert {:ok, url} = send_login_email(user.email)
assert_delivered_email Email.login_email(user.email, url)
end
test "existing user, by username" do
user = fixture(:user)
assert {:ok, url} = send_login_email(user.username)
assert_delivered_email Email.login_email(user.email, url)
end
test "non-existing user, by email" do
assert {:ok, url} = send_login_email("new@example.com")
assert_delivered_email Email.signup_email("new@example.com", url)
end
test "non-existing user, by email, when email is invalid" do
assert send_login_email("new@") == {:error, :email_invalid}
assert_no_emails_delivered()
end
test "non-existing user, by username" do
assert send_login_email("idontexist") == {:error, :user_not_found}
assert_no_emails_delivered()
end
end
describe "verify_signup_token/1" do
import Asciinema.Accounts, only: [verify_signup_token: 1, signup_url: 1]
test "invalid token" do
assert verify_signup_token("invalid") == {:error, :token_invalid}
end
test "valid token" do
token = "test@example.com" |> signup_url |> String.split("?t=") |> List.last
assert {:ok, %User{}} = verify_signup_token(token)
assert verify_signup_token(token) == {:error, :email_taken}
end
end
end