forked from eliotsykes/rspec-rails-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
user_login_and_logout_spec.rb
73 lines (48 loc) · 2.04 KB
/
user_login_and_logout_spec.rb
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require 'rails_helper'
feature "User logs in and logs out" do
# `js: true` spec metadata means this will run using the `:selenium`
# browser driver configured in spec/support/capybara.rb
scenario "with correct details", js: true do
create(:user, email: "[email protected]", password: "somepassword")
visit "/"
click_link "Log in"
expect(page).to have_css("h2", text: "Log in")
expect(current_path).to eq(new_user_session_path)
login "[email protected]", "somepassword"
expect(page).to have_css("h1", text: "Welcome to RSpec Rails Examples")
expect(current_path).to eq "/"
expect(page).to have_content "Signed in successfully"
expect(page).to have_content "Hello, [email protected]"
click_button "Log out"
expect(current_path).to eq "/"
expect(page).to have_content "Signed out successfully"
expect(page).not_to have_content "[email protected]"
end
scenario "unconfirmed user cannot login" do
create(:user, skip_confirmation: false, email: "[email protected]", password: "test-password")
visit new_user_session_path
login "[email protected]", "test-password"
expect(current_path).to eq(new_user_session_path)
expect(page).not_to have_content "Signed in successfully"
expect(page).to have_content "You have to confirm your email address before continuing"
end
scenario "locks account after 10 failed attempts" do
email = "[email protected]"
create(:user, email: email, password: "somepassword")
visit new_user_session_path
(1..8).each do |attempt_num|
login email, "wrong-password #{attempt_num}"
expect(page).to have_content "Invalid email or password"
end
login email, "wrong-password 9"
expect(page).to have_content "You have one more attempt before your account is locked"
login email, "wrong-password 10"
expect(page).to have_content "Your account is locked."
end
private
def login(email, password)
fill_in "Email", with: email
fill_in "Password", with: password
click_button "Log in"
end
end