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.
53 lines
1.6 KiB
Elixir
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
|