Guest User

Untitled

a guest
Feb 16th, 2017
91
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("[email protected]")
  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.  
  21. user = Repo.insert!(User.enroll_changeset(%User{}, %{email: email, plain_password: "password"}))
  22. response = PasswordReset.start(user.email)
  23.  
  24. %{user: user, response: response}
  25. end
  26.  
  27. test "has default secure response", %{response: response, user: user} do
  28. assert :ok == response
  29. end
  30.  
  31. test "the user is assigned a reset tokoen", %{user: %{id: id}} do
  32. user = Repo.get(User, id)
  33. hoard_state = :sys.get_state(PasswordResetHoard)
  34.  
  35. [token | []] = Map.keys(hoard_state)
  36.  
  37. assert Map.get(hoard_state, token) == user
  38. end
  39. end
  40.  
  41. describe "resetting with an invalid token" do
  42. test "responds with :error" do
  43. assert :error == PasswordReset.complete("invalid_token", "new password")
  44. end
  45. end
  46.  
  47. describe "resetting with a valid token" do
  48. setup do
  49.  
  50. user = Repo.insert!(User.enroll_changeset(%User{}, %{email: email, plain_password: "password"}))
  51.  
  52. set_cache_state %{"valid_token" => user}
  53.  
  54. %{user: user}
  55. end
  56.  
  57. test "changes the password and valid password", %{user: %{password: original_password, id: id}} do
  58. PasswordReset.complete("valid_token", "new password")
  59.  
  60. user = Repo.get(User, id)
  61.  
  62. refute original_password == user.password
  63. end
  64.  
  65. test "does not change the password with an invalid password", %{user: %{password: original_password, id: id}} do
  66. PasswordReset.complete("valid_token", "invalid")
  67.  
  68. user = Repo.get(User, id)
  69.  
  70. assert original_password == user.password
  71. end
  72.  
  73. test "returns invalid changeset" do
  74. {:error, changeset} = PasswordReset.complete("valid_token", "invalid")
  75.  
  76. refute changeset.valid?
  77. end
  78.  
  79. test "clears out the token", %{user: %{id: id}} do
  80. PasswordReset.complete("valid_token", "new password")
  81.  
  82. user = Repo.get(User, id)
  83.  
  84. refute user.reset_token
  85. end
  86.  
  87. test "responds with ok" do
  88. assert :ok == PasswordReset.complete("valid_token", "new password")
  89. end
  90. end
  91.  
  92. def clear_reset_cache do
  93. set_cache_state %{}
  94. end
  95.  
  96. def set_cache_state(state) do
  97. :sys.replace_state(PasswordResetHoard, fn(_) -> state end)
  98. end
  99. end
Advertisement
Add Comment
Please, Sign In to add comment