authkit 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +11 -3
  5. data/Rakefile +15 -8
  6. data/authkit.gemspec +2 -2
  7. data/lib/authkit/version.rb +1 -1
  8. data/lib/generators/authkit/install_generator.rb +8 -1
  9. data/lib/generators/authkit/templates/app/controllers/application_controller.rb +23 -20
  10. data/lib/generators/authkit/templates/app/controllers/auths_controller.rb +4 -4
  11. data/lib/generators/authkit/templates/app/controllers/email_confirmation_controller.rb +3 -6
  12. data/lib/generators/authkit/templates/app/controllers/password_change_controller.rb +4 -5
  13. data/lib/generators/authkit/templates/app/controllers/signup_controller.rb +4 -1
  14. data/lib/generators/authkit/templates/app/controllers/upload_controller.rb +3 -3
  15. data/lib/generators/authkit/templates/app/controllers/users_controller.rb +1 -3
  16. data/lib/generators/authkit/templates/app/forms/signup.rb +10 -2
  17. data/lib/generators/authkit/templates/app/models/user.rb +2 -22
  18. data/lib/generators/authkit/templates/app/models/user_session.rb +55 -0
  19. data/lib/generators/authkit/templates/app/views/password_reset/show.html.erb +0 -2
  20. data/lib/generators/authkit/templates/db/migrate/add_authkit_fields_to_users.rb +1 -10
  21. data/lib/generators/authkit/templates/db/migrate/create_auths.rb +6 -2
  22. data/lib/generators/authkit/templates/db/migrate/create_avatars.rb +3 -2
  23. data/lib/generators/authkit/templates/db/migrate/create_user_sessions.rb +27 -0
  24. data/lib/generators/authkit/templates/db/migrate/create_users.rb +2 -2
  25. data/lib/generators/authkit/templates/spec/controllers/application_controller_spec.rb +40 -47
  26. data/lib/generators/authkit/templates/spec/controllers/email_confirmation_controller_spec.rb +11 -11
  27. data/lib/generators/authkit/templates/spec/controllers/password_change_controller_spec.rb +21 -26
  28. data/lib/generators/authkit/templates/spec/controllers/password_reset_controller_spec.rb +11 -16
  29. data/lib/generators/authkit/templates/spec/controllers/sessions_controller_spec.rb +17 -23
  30. data/lib/generators/authkit/templates/spec/controllers/signup_controller_spec.rb +21 -29
  31. data/lib/generators/authkit/templates/spec/controllers/users_controller_spec.rb +14 -18
  32. data/lib/generators/authkit/templates/spec/factories/user_session.rb +6 -0
  33. data/lib/generators/authkit/templates/spec/forms/signup_spec.rb +1 -1
  34. data/lib/generators/authkit/templates/spec/models/user_session_spec.rb +81 -0
  35. data/lib/generators/authkit/templates/spec/models/user_spec.rb +18 -45
  36. data/lib/generators/authkit/templates/spec/support/factory_girl.rb +5 -0
  37. data/lib/generators/authkit/templates/spec/support/shoulda_matchers.rb +6 -0
  38. metadata +13 -6
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe PasswordChangeController do
3
+ RSpec.describe PasswordChangeController do
4
4
  render_views
5
5
 
6
6
  let(:token) { "TOKEN" }
@@ -12,26 +12,26 @@ describe PasswordChangeController do
12
12
  it "requires no user" do
13
13
  allow(controller).to receive(:email_user).and_return(user)
14
14
  expect(controller).to receive(:logout)
15
- get 'show', valid_params
15
+ get 'show', params: valid_params
16
16
  end
17
17
 
18
18
  it "requires an email user" do
19
19
  user.save
20
- get 'show', valid_params
21
- expect(assigns(:user).id).to eq(user.id)
20
+ get 'show', params: valid_params
21
+ expect(controller.send(:email_user).id).to eq(user.id)
22
22
  end
23
23
 
24
24
  it "redirects if there is no email user" do
25
25
  user.save
26
26
  expect {
27
- get 'show', {token: token, email: "invalid@example.com"}
27
+ get 'show', params: {token: token, email: "invalid@example.com"}
28
28
  }.to raise_error(ActiveRecord::RecordNotFound)
29
29
  end
30
30
 
31
31
  it "requires a valid token" do
32
32
  allow(controller).to receive(:email_user).and_return(user)
33
33
  user.reset_password_token = "OTHER TOKEN"
34
- get 'show', valid_params
34
+ get 'show', params: valid_params
35
35
  expect(response).to be_redirect
36
36
  expect(flash[:error]).to_not be_empty
37
37
  end
@@ -39,14 +39,14 @@ describe PasswordChangeController do
39
39
  it "requires an unexpired token" do
40
40
  allow(controller).to receive(:email_user).and_return(user)
41
41
  user.reset_password_token_created_at = 1.year.ago
42
- get 'show', valid_params
42
+ get 'show', params: valid_params
43
43
  expect(response).to be_redirect
44
44
  expect(flash[:error]).to_not be_empty
45
45
  end
46
46
 
47
47
  it "returns http success" do
48
48
  allow(controller).to receive(:email_user).and_return(user)
49
- get 'show', valid_params
49
+ get 'show', params: valid_params
50
50
  expect(response).to be_success
51
51
  end
52
52
  end
@@ -55,26 +55,26 @@ describe PasswordChangeController do
55
55
  it "requires no user" do
56
56
  allow(controller).to receive(:email_user).and_return(user)
57
57
  expect(controller).to receive(:logout)
58
- get 'show', valid_params
58
+ get 'show', params: valid_params
59
59
  end
60
60
 
61
61
  it "requires an email user" do
62
62
  user.save
63
- post 'create', password_params
64
- expect(assigns(:user).id).to eq(user.id)
63
+ post 'create', params: password_params
64
+ expect(controller.send(:email_user).id).to eq(user.id)
65
65
  end
66
66
 
67
67
  it "redirects if there is no email user" do
68
68
  user.save
69
69
  expect {
70
- get 'show', {token: token, email: "invalid@example.com"}
70
+ get 'show', params: {token: token, email: "invalid@example.com"}
71
71
  }.to raise_error(ActiveRecord::RecordNotFound)
72
72
  end
73
73
 
74
74
  it "requires a valid token" do
75
75
  allow(controller).to receive(:email_user).and_return(user)
76
76
  user.reset_password_token = "OTHER TOKEN"
77
- post 'create', password_params
77
+ post 'create', params: password_params
78
78
  expect(response).to be_redirect
79
79
  expect(flash[:error]).to_not be_empty
80
80
  end
@@ -86,7 +86,7 @@ describe PasswordChangeController do
86
86
 
87
87
  it "changes the password" do
88
88
  expect {
89
- post 'create', password_params
89
+ post 'create', params: password_params
90
90
  }.to change(user, :password_digest)
91
91
 
92
92
  expect(user).to be_valid
@@ -94,22 +94,22 @@ describe PasswordChangeController do
94
94
 
95
95
  it "does not sign the user in" do
96
96
  expect(controller).to_not receive(:login)
97
- post 'create', password_params
97
+ post 'create', params: password_params
98
98
  end
99
99
 
100
100
  it "redirects the user" do
101
- post 'create', password_params
101
+ post 'create', params: password_params
102
102
  expect(response).to be_redirect
103
103
  end
104
104
 
105
105
  it "sets the flash" do
106
- post 'create', password_params
106
+ post 'create', params: password_params
107
107
  expect(flash[:notice]).to match(/successfully/i)
108
108
  end
109
109
 
110
110
  describe "from json" do
111
111
  it "returns http success" do
112
- post 'create', password_params.merge(format: 'json')
112
+ post 'create', params: password_params.merge(format: 'json')
113
113
  expect(response).to be_success
114
114
  end
115
115
  end
@@ -122,22 +122,17 @@ describe PasswordChangeController do
122
122
 
123
123
  it "doesn't sign the user in" do
124
124
  expect(controller).to_not receive(:login)
125
- post 'create', {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid'}
126
- end
127
-
128
- it "renders the show template" do
129
- post 'create', {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid'}
130
- expect(response).to render_template(:show)
125
+ post 'create', params: {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid'}
131
126
  end
132
127
 
133
128
  it "has errors" do
134
- post 'create', {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid'}
129
+ post 'create', params: {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid'}
135
130
  expect(user.errors[:password_confirmation].size).to eq(1)
136
131
  end
137
132
 
138
133
  describe "from json" do
139
134
  it "returns an error" do
140
- post 'create', {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid', format: 'json'}
135
+ post 'create', params: {token: token, email: user.email, password: 'newpassword', password_confirmation: 'invalid', format: 'json'}
141
136
  expect(response.code).to eq('422')
142
137
  expect(response.body).to match(/doesn't match/i)
143
138
  end
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe PasswordResetController do
3
+ RSpec.describe PasswordResetController do
4
4
  render_views
5
5
 
6
6
  let(:user) { create(:user) }
@@ -18,38 +18,38 @@ describe PasswordResetController do
18
18
  end
19
19
 
20
20
  it "redirects the user" do
21
- post :create, {email: user.email}
21
+ post :create, params: { email: user.email }
22
22
  expect(response).to be_redirect
23
23
  end
24
24
 
25
25
  it "finds the user by the email or user name" do
26
- post :create, {email: user.email}
26
+ post :create, params: { email: user.email }
27
27
  expect(controller.send(:user)).to eq(user)
28
28
  end
29
29
 
30
30
  it "logs any current user out if it finds the user" do
31
31
  expect(controller).to receive(:logout)
32
- post :create, {email: user.email}
32
+ post :create, params: { email: user.email }
33
33
  end
34
34
 
35
35
  it "resets the password if it finds the user" do
36
36
  expect_any_instance_of(User).to receive(:send_reset_password).and_return(true)
37
- post :create, {email: user.email}
37
+ post :create, params: { email: user.email }
38
38
  end
39
39
 
40
40
  it "does not reset the password if it does not find a user" do
41
41
  expect_any_instance_of(User).to_not receive(:send_reset_password)
42
- post :create, {email: "unknown@example.com"}
42
+ post :create, params: { email: "unknown@example.com" }
43
43
  end
44
44
 
45
45
  it "downcases the email or user name" do
46
46
  expect_any_instance_of(User).to receive(:send_reset_password).and_return(true)
47
- post :create, {email: user.email.upcase}
47
+ post :create, params: { email: user.email.upcase }
48
48
  end
49
49
 
50
50
  describe "from json" do
51
51
  it "returns http success" do
52
- post :create, {email: user.email, format: "json"}
52
+ post :create, params: { email: user.email, format: "json" }
53
53
  expect(response).to be_success
54
54
  end
55
55
  end
@@ -57,24 +57,19 @@ describe PasswordResetController do
57
57
  describe "with invalid email" do
58
58
  describe "from html" do
59
59
  it "sets the flash message" do
60
- post :create, {email: "unknown@example.com"}
60
+ post :create, params: { email: "unknown@example.com" }
61
61
  expect(flash.now[:error]).to_not be_empty
62
62
  end
63
-
64
- it "renders the show page" do
65
- post :create, {email: "unknown@example.com"}
66
- expect(response).to render_template(:show)
67
- end
68
63
  end
69
64
 
70
65
  describe "from json" do
71
66
  it "returns an error" do
72
- post :create, {email: "unknown@example.com", format: "json"}
67
+ post :create, params: { email: "unknown@example.com", format: "json" }
73
68
  expect(response.body).to match(/invalid user name or email/i)
74
69
  end
75
70
 
76
71
  it "returns forbidden status" do
77
- post :create, {email: "unknown@example.com", format: "json"}
72
+ post :create, params: { email: "unknown@example.com", format: "json" }
78
73
  expect(response.code).to eq('422')
79
74
  end
80
75
  end
@@ -3,8 +3,9 @@ require 'rails_helper'
3
3
  describe SessionsController do
4
4
  render_views
5
5
 
6
- let(:user) { create(:user) }
7
- let(:logged_in_session) { { user_id: user.id } }
6
+ let(:user_session) { create(:user_session) }
7
+ let(:user) { user_session.user }
8
+ let(:logged_in_session) { { user_session_id: user_session.id } }
8
9
 
9
10
  describe "GET 'new'" do
10
11
  it "returns http success" do
@@ -19,47 +20,45 @@ describe SessionsController do
19
20
  end
20
21
 
21
22
  it "redirects the user" do
22
- post :create, {email: user.email, password: "example"}
23
+ post :create, params: { email: user.email, password: "example" }
23
24
  expect(response).to be_redirect
24
25
  end
25
26
 
26
27
  it "authenticates if it finds the user" do
27
28
  expect_any_instance_of(User).to receive(:authenticate).and_return(true)
28
- post :create, {email: user.email, password: "example"}
29
+ post :create, params: { email: user.email, password: "example" }
29
30
  end
30
31
 
31
32
  it "does not authenticate if it does not find a user" do
32
33
  expect_any_instance_of(User).to_not receive(:authenticate)
33
- post :create, {email: "unknown@example.com", password: "example"}
34
+ post :create, params: { email: "unknown@example.com", password: "example" }
34
35
  end
35
36
 
36
37
  it "downcases the email or user name" do
37
38
  expect_any_instance_of(User).to receive(:authenticate).and_return(true)
38
- post :create, {email: user.email, password: "example"}
39
+ post :create, params: { email: user.email, password: "example" }
39
40
  end
40
41
 
41
42
  it "signs the user in" do
42
- post :create, {email: user.email, password: "example"}
43
+ post :create, params: { email: user.email, password: "example" }
43
44
  expect(controller.send(:current_user)).to eq(user)
44
45
  end
45
46
 
46
47
  it "remembers the user if remember me is chosen" do
47
- expect_any_instance_of(User).to receive(:set_remember_token)
48
48
  expect(controller).to receive(:set_remember_cookie)
49
- post :create, {email: user.email, password: "example", remember_me: "1"}
49
+ post :create, params: { email: user.email, password: "example", remember_me: "1" }
50
50
  expect(controller.send(:current_user)).to eq(user)
51
51
  end
52
52
 
53
53
  it "does not remember the user if remember me is not chosen" do
54
- expect_any_instance_of(User).to_not receive(:set_remember_token)
55
54
  expect(controller).to_not receive(:set_remember_cookie)
56
- post :create, {email: user.email, password: "example", remember_me: ""}
55
+ post :create, params: { email: user.email, password: "example", remember_me: "" }
57
56
  expect(controller.send(:current_user)).to eq(user)
58
57
  end
59
58
 
60
59
  describe "from json" do
61
60
  it "returns http success" do
62
- post :create, {email: user.email, password: "example", format: "json"}
61
+ post :create, params: { email: user.email, password: "example", format: "json" }
63
62
  expect(response).to be_success
64
63
  end
65
64
  end
@@ -67,24 +66,19 @@ describe SessionsController do
67
66
  describe "with invalid password" do
68
67
  describe "from html" do
69
68
  it "sets the flash message" do
70
- post :create, {email: user.email, password: "wrongpassword"}
69
+ post :create, params: { email: user.email, password: "wrongpassword" }
71
70
  expect(flash.now[:error]).to_not be_empty
72
71
  end
73
-
74
- it "renders the new page" do
75
- post :create, {email: user.email, password: "wrongpassword"}
76
- expect(response).to render_template(:new)
77
- end
78
72
  end
79
73
 
80
74
  describe "from json" do
81
75
  it "returns an error" do
82
- post :create, {email: user.email, password: "wrongpassword", format: "json"}
76
+ post :create, params: { email: user.email, password: "wrongpassword", format: "json" }
83
77
  expect(response.body).to match(/invalid user name or password/i)
84
78
  end
85
79
 
86
80
  it "returns forbidden status" do
87
- post :create, {email: user.email, password: "wrongpassword", format: "json"}
81
+ post :create, params: { email: user.email, password: "wrongpassword", format: "json" }
88
82
  expect(response.code).to eq('422')
89
83
  end
90
84
  end
@@ -93,20 +87,20 @@ describe SessionsController do
93
87
 
94
88
  describe "DELETE 'destroy'" do
95
89
  it "logs the user out" do
96
- delete "destroy", {}, logged_in_session
90
+ delete "destroy", session: logged_in_session
97
91
  expect(controller.send(:current_user)).to be_nil
98
92
  end
99
93
 
100
94
  describe "from html" do
101
95
  it "redirects the user" do
102
- delete "destroy", {}, logged_in_session
96
+ delete "destroy", session: logged_in_session
103
97
  expect(response).to redirect_to(root_path)
104
98
  end
105
99
  end
106
100
 
107
101
  describe "from json" do
108
102
  it "returns http success" do
109
- delete "destroy", {format: 'json'}, logged_in_session
103
+ delete "destroy", params: { format: 'json' }, session: logged_in_session
110
104
  expect(response).to be_success
111
105
  end
112
106
  end
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe SignupController do
3
+ RSpec.describe SignupController do
4
4
  render_views
5
5
 
6
6
  let(:signup_params) { attributes_for(:user) }
@@ -10,7 +10,7 @@ describe SignupController do
10
10
  it "returns http success" do
11
11
  get :new
12
12
  expect(response).to be_success
13
- expect(assigns(:signup)).to_not be_nil
13
+ expect(controller.send(:signup)).to_not be_nil
14
14
  end
15
15
  end
16
16
 
@@ -19,36 +19,34 @@ describe SignupController do
19
19
  describe "from html" do
20
20
  it "creates a new user" do
21
21
  expect {
22
- post :create, {signup: signup_params}, {}
22
+ post :create, params: { signup: signup_params }
23
23
  }.to change(User, :count).by(1)
24
24
  end
25
25
 
26
26
  it "confirms the email" do
27
27
  expect_any_instance_of(User).to receive(:send_confirmation)
28
- post :create, {signup: signup_params}, {}
28
+ post :create, params: { signup: signup_params }
29
29
  end
30
30
 
31
31
  it "signs the user in" do
32
- post :create, {signup: signup_params}, {}
33
- expect(controller.send(:current_user)).to eq(assigns(:signup).user)
32
+ post :create, params: { signup: signup_params }
33
+ expect(controller.send(:current_user)).to eq(controller.send(:signup).user)
34
34
  end
35
35
 
36
36
  it "remembers the user if remember me is chosen" do
37
- expect_any_instance_of(User).to receive(:set_remember_token)
38
37
  expect(controller).to receive(:set_remember_cookie)
39
- post :create, {signup: signup_params, remember_me: "1"}, {}
40
- expect(controller.send(:current_user)).to eq(assigns(:signup).user)
38
+ post :create, params: { signup: signup_params, remember_me: "1" }
39
+ expect(controller.send(:current_user)).to eq(controller.send(:signup).user)
41
40
  end
42
41
 
43
42
  it "does not remember the user if remember me is not chosen" do
44
- expect_any_instance_of(User).to_not receive(:set_remember_token)
45
43
  expect(controller).to_not receive(:set_remember_cookie)
46
- post :create, {signup: signup_params, remember_me: ""}, {}
47
- expect(controller.send(:current_user)).to eq(assigns(:signup).user)
44
+ post :create, params: { signup: signup_params, remember_me: "" }
45
+ expect(controller.send(:current_user)).to eq(controller.send(:signup).user)
48
46
  end
49
47
 
50
48
  it "redirects to the root" do
51
- post :create, {signup: signup_params}
49
+ post :create, params: { signup: signup_params }
52
50
  expect(response).to be_redirect
53
51
  end
54
52
  end
@@ -56,17 +54,17 @@ describe SignupController do
56
54
  describe "from json" do
57
55
  it "creates the user" do
58
56
  expect {
59
- post :create, {signup: signup_params, format: 'json'}, {}
57
+ post :create, params: { signup: signup_params, format: 'json' }
60
58
  }.to change(User, :count).by(1)
61
59
  end
62
60
 
63
61
  it "signs the user in" do
64
- post :create, {signup: signup_params, format: 'json'}, {}
65
- expect(controller.send(:current_user)).to eq(assigns(:signup).user)
62
+ post :create, params: { signup: signup_params, format: 'json' }
63
+ expect(controller.send(:current_user)).to eq(controller.send(:signup).user)
66
64
  end
67
65
 
68
66
  it "returns http success" do
69
- post :create, {signup: signup_params, format: 'json'}
67
+ post :create, params: { signup: signup_params, format: 'json' }
70
68
  expect(response).to be_success
71
69
  end
72
70
  end
@@ -74,36 +72,30 @@ describe SignupController do
74
72
 
75
73
  describe "with invalid params" do
76
74
  describe "from html" do
77
- it "renders the new page" do
78
- post :create, {signup: invalid_params}, {}
79
- expect(response).to render_template("new")
80
- end
81
-
82
75
  it "does not create a user" do
83
76
  expect {
84
- post :create, {signup: invalid_params}, {}
77
+ post :create, params: { signup: invalid_params }
85
78
  }.to_not change(User, :count)
86
79
  end
87
80
 
88
81
  it "sets the errors" do
89
- post :create, {signup: invalid_params}, {}
90
- expect(assigns(:signup).errors[:password_confirmation].size).to eq(1)
82
+ post :create, params: { signup: invalid_params }
83
+ expect(controller.send(:signup).errors[:password_confirmation].size).to eq(1)
91
84
  end
92
85
  end
93
86
 
94
87
  describe "from json" do
95
88
  it "returns a 422" do
96
- post :create, {signup: invalid_params, format: 'json'}, {}
89
+ post :create, params: { signup: invalid_params, format: 'json' }
97
90
  expect(response.code).to eq('422')
98
91
  end
99
92
 
100
93
  it "includes the errors in the json" do
101
- post :create, {signup: invalid_params, format: 'json'}, {}
102
- expect(assigns(:signup).errors[:password_confirmation].size).to eq(1)
94
+ post :create, params: { signup: invalid_params, format: 'json' }
95
+ expect(controller.send(:signup).errors[:password_confirmation].size).to eq(1)
103
96
  expect(response.body).to match(/doesn't match Password/i)
104
97
  end
105
98
  end
106
99
  end
107
100
  end
108
101
  end
109
-