Advertisement
Guest User

Untitled

a guest
Feb 16th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. defmodule Hoarder.PasswordResetTest do
  2. use Hoarder.TestCase, async: true
  3. alias Hoarder.PasswordReset
  4. alias Hoarder.User
  5.  
  6. setup do
  7. Ecto.Adapters.SQL.Sandbox.allow(Hoarder.Repo, self(), GenServer.whereis(PasswordResetHoard))
  8. :ok
  9. end
  10.  
  11. describe "starting with an email that doesn't exist" do
  12. test "has default secure response" do
  13. assert :ok = PasswordReset.start("fake@example.com")
  14. end
  15. end
  16.  
  17. describe "starting with an email that is in the system" do
  18. setup do
  19. clear_reset_cache()
  20. email = "real@example.com"
  21.  
  22. user = Repo.insert!(User.enroll_changeset(%User{}, %{email: email, plain_password: "password"}))
  23. response = PasswordReset.start(user.email)
  24.  
  25. %{user: user, response: response}
  26. end
  27.  
  28. test "has default secure response", %{response: response, user: user} do
  29. assert :ok == response
  30. end
  31.  
  32. test "the user is assigned a reset tokoen", %{user: %{id: id}} do
  33. user = Repo.get(User, id)
  34. hoard_state = :sys.get_state(PasswordResetHoard)
  35.  
  36. [token | []] = Map.keys(hoard_state)
  37.  
  38. assert Map.get(hoard_state, token) == user
  39. end
  40. end
  41.  
  42. describe "resetting with an invalid token" do
  43. test "responds with :error" do
  44. assert :error == PasswordReset.complete("invalid_token", "new password")
  45. end
  46. end
  47.  
  48. describe "resetting with a valid token" do
  49. setup do
  50. email = "real@example.com"
  51.  
  52. user = Repo.insert!(User.enroll_changeset(%User{}, %{email: email, plain_password: "password"}))
  53.  
  54. set_cache_state %{"valid_token" => user}
  55.  
  56. %{user: user}
  57. end
  58.  
  59. test "changes the password and valid password", %{user: %{password: original_password, id: id}} do
  60. PasswordReset.complete("valid_token", "new password")
  61.  
  62. user = Repo.get(User, id)
  63.  
  64. refute original_password == user.password
  65. end
  66.  
  67. test "does not change the password with an invalid password", %{user: %{password: original_password, id: id}} do
  68. PasswordReset.complete("valid_token", "invalid")
  69.  
  70. user = Repo.get(User, id)
  71.  
  72. assert original_password == user.password
  73. end
  74.  
  75. test "returns invalid changeset" do
  76. {:error, changeset} = PasswordReset.complete("valid_token", "invalid")
  77.  
  78. refute changeset.valid?
  79. end
  80.  
  81. test "clears out the token", %{user: %{id: id}} do
  82. PasswordReset.complete("valid_token", "new password")
  83.  
  84. user = Repo.get(User, id)
  85.  
  86. refute user.reset_token
  87. end
  88.  
  89. test "responds with ok" do
  90. assert :ok == PasswordReset.complete("valid_token", "new password")
  91. end
  92. end
  93.  
  94. def clear_reset_cache do
  95. set_cache_state %{}
  96. end
  97.  
  98. def set_cache_state(state) do
  99. :sys.replace_state(PasswordResetHoard, fn(_) -> state end)
  100. end
  101. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement