aboutsummaryrefslogtreecommitdiff
path: root/spec/support/flows/reset_password_flow.cr
blob: b1df710461b0ce5c31b056680b36c01f114a8ef7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class ResetPasswordFlow < BaseFlow
  private getter user, authentication_flow
  delegate sign_in, sign_out, should_have_password_error, should_be_signed_in,
    to: authentication_flow
  delegate email, to: user

  def initialize(@user : User)
    @authentication_flow = AuthenticationFlow.new(user.email)
  end

  def request_password_reset
    with_fake_token do
      visit PasswordResetRequests::New
      fill_form RequestPasswordReset,
        email: email
      click "@request-password-reset-button"
    end
  end

  def should_have_sent_reset_email
    with_fake_token do
      user = UserQuery.new.email(email).first
      PasswordResetRequestEmail.new(user).should be_delivered
    end
  end

  def reset_password(password)
    user = UserQuery.new.email(email).first
    token = Authentic.generate_password_reset_token(user)
    visit PasswordResets::New.with(user.id, token)
    fill_form ResetPassword,
      password: password,
      password_confirmation: password
    click "@update-password-button"
  end

  private def with_fake_token(&)
    PasswordResetRequestEmail.temp_config(stubbed_token: "fake") do
      yield
    end
  end
end