hello-rails 0.5.0 → 0.5.1

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -4
  3. data/app/controllers/hello/concerns/management/forgot_password.rb +1 -1
  4. data/app/controllers/hello/concerns/registration/sign_up.rb +7 -3
  5. data/app/controllers/hello/registration/sign_up_controller.rb +9 -1
  6. data/app/models/access.rb +2 -1
  7. data/app/models/credential.rb +2 -1
  8. data/app/models/email_credential.rb +2 -1
  9. data/app/models/password_credential.rb +2 -1
  10. data/app/models/user.rb +2 -1
  11. data/app/views/hello/shared/_nav_pills.html.erb +0 -2
  12. data/config/locales/hello.fr.yml +2 -4
  13. data/db/migrate/3_create_users.rb +10 -15
  14. data/lib/data/locales.yml +228 -0
  15. data/lib/generators/hello/install/install_generator.rb +8 -29
  16. data/lib/generators/hello/install/templates/initializer.rb +1 -1
  17. data/lib/generators/hello/install/templates/models/concerns/user/authorization.rb +8 -13
  18. data/lib/generators/hello/install/templates/models/user.rb +2 -1
  19. data/lib/generators/hello/users/USAGE +10 -0
  20. data/lib/generators/hello/{install/templates/users → users/templates/app}/controllers/users_controller.rb +2 -4
  21. data/lib/generators/hello/{install/templates/users → users/templates/app}/views/users/index.html.erb +1 -1
  22. data/lib/generators/hello/{install/templates/users → users/templates/app}/views/users/list.html.erb +3 -1
  23. data/lib/generators/hello/{install/templates/users → users/templates/app}/views/users/new.html.erb +2 -2
  24. data/lib/generators/hello/{install/templates/users → users/templates/app}/views/users/show.html.erb +0 -0
  25. data/lib/generators/hello/users/users_generator.rb +21 -0
  26. data/lib/hello/business/registration/sign_up.rb +30 -122
  27. data/lib/hello/locales.rb +1 -232
  28. data/lib/hello/rails_active_record/access.rb +12 -10
  29. data/lib/hello/rails_active_record/credential.rb +22 -18
  30. data/lib/hello/rails_active_record/email_credential.rb +12 -20
  31. data/lib/hello/rails_active_record/password_credential.rb +11 -32
  32. data/lib/hello/rails_active_record/user.rb +75 -54
  33. data/lib/hello/rails_controller.rb +1 -3
  34. data/lib/hello/rails_controller/restrict_by_role.rb +2 -2
  35. data/lib/hello/version.rb +1 -1
  36. data/spec/bdd/hello/authentication/classic_sign_in_spec.rb +2 -2
  37. data/spec/bdd/hello/internalionalization/anyone_can_change_their_locale/change_locale_on_the_sign_in_form_spec.rb +1 -1
  38. data/spec/bdd/hello/management/manage_email_credentials/manage_email_credentials_emails_page_spec.rb +7 -7
  39. data/spec/bdd/hello/management/manage_password_credentials/manage_password_forgot_password_spec.rb +1 -1
  40. data/spec/bdd/hello/management/manage_password_credentials/manage_password_reset_password_spec.rb +1 -1
  41. data/spec/bdd/hello/management/manage_profile/manage_profile_page_spec.rb +0 -2
  42. data/spec/bdd/hello/other/create_user_spec.rb +1 -3
  43. data/spec/bdd/hello/other/impersonate_user_spec.rb +1 -2
  44. data/spec/bdd/hello/other/list_users_spec.rb +2 -4
  45. data/spec/bdd/hello/registration/classic_sign_up_spec.rb +3 -4
  46. data/spec/bdd/hello/support.rb +0 -4
  47. data/spec/business/hello/registration/sign_up_spec.rb +10 -2
  48. data/spec/controllers/authentication_spec.rb +3 -3
  49. data/spec/models/create_and_destroy/email_credential_create_and_destroy_spec.rb +81 -0
  50. data/spec/models/create_and_destroy/password_credential_create_and_destroy_spec.rb +60 -0
  51. data/spec/models/create_and_destroy/user_create_and_destroy_spec.rb +124 -0
  52. data/spec/models/credential_spec.rb +12 -3
  53. data/spec/models/email_credential_spec.rb +1 -2
  54. data/spec/models/password_credential_spec.rb +1 -2
  55. data/spec/models/user_spec.rb +87 -27
  56. data/spec/requests/forgot_password_spec.rb +1 -1
  57. data/spec/support/factories.rb +10 -14
  58. data/spec/support/helpers/given.rb +8 -16
  59. data/spec/support/helpers/when.rb +0 -1
  60. metadata +42 -38
  61. data/lib/generators/hello/from_devise/USAGE +0 -8
  62. data/lib/generators/hello/from_devise/from_devise_generator.rb +0 -13
  63. data/lib/generators/hello/from_devise/templates/from_devise.migration.rb +0 -39
  64. data/spec/models/hello/sign_up_model_spec.rb +0 -64
@@ -89,11 +89,11 @@ RSpec.bdd.uic "Emails Page" do
89
89
  end
90
90
 
91
91
  When "I attempt to remove that email" do
92
- click_on "Remove"
92
+ click_nth_button("Remove", 0)
93
93
  end
94
94
 
95
95
  Then "I should see an alert message" do
96
- expect_flash_alert "must have at least one credential"
96
+ expect_flash_alert "Email credentials is too short (minimum is 1 character)"
97
97
  end
98
98
 
99
99
  Then "and I should still see that email on the list" do
@@ -114,21 +114,21 @@ RSpec.bdd.uic "Emails Page" do
114
114
  end
115
115
 
116
116
  When "I attempt to remove that email" do
117
- click_nth_button("Remove", 1)
117
+ click_nth_button("Remove", 0)
118
118
  end
119
119
 
120
120
  Then "I should see a confirmation message" do
121
- expect_flash_notice "newemail@provider.com was successfully removed"
121
+ expect_flash_notice "foo@bar.com was successfully removed"
122
122
  end
123
123
 
124
- Then "and I should no longer see that email on the list" do
124
+ Then "and I should no longer see the old email on the list" do
125
125
  within all("table tr")[1] do
126
126
  expect_not_to_see @new_email
127
127
  end
128
128
  end
129
129
 
130
130
  Then "nor in the database" do
131
- expect(EmailCredential.pluck(:email)).not_to include @new_email
131
+ expect(EmailCredential.pluck(:email)).not_to include 'foo@bar.com'
132
132
  end
133
133
  end
134
134
  end
@@ -221,7 +221,7 @@ RSpec.bdd.uic "Emails Page" do
221
221
 
222
222
  def _when_visit_valid
223
223
  When "I visit a valid token URL" do
224
- @credential = create(:email_credential)
224
+ @credential = create(:user).email_credentials.first
225
225
  token = @credential.reset_verifying_token!
226
226
  visit the_url(@credential.id, token)
227
227
  end
@@ -5,7 +5,7 @@ RSpec.bdd.uic "Forgot Password" do
5
5
  story "-" do
6
6
 
7
7
  before do
8
- given_I_have_an_email_credential
8
+ given_I_have_a_user
9
9
  end
10
10
 
11
11
 
@@ -12,7 +12,7 @@ RSpec.bdd.uic "Reset Password" do
12
12
  end
13
13
 
14
14
  def _I_visit_with_a_valid_token
15
- @reset_token ||= given_I_have_an_email_credential_and_forgot_my_password
15
+ @reset_token ||= given_I_have_a_user_and_forgot_my_password
16
16
  p = PasswordCredential.last
17
17
  visit hello.reset_password_path(p.id, p.user_id, @reset_token)
18
18
  end
@@ -24,7 +24,6 @@ RSpec.bdd.uic "Profile Page" do
24
24
  scenario "Valid" do
25
25
  When "I submit new valid values in the form" do
26
26
  fill_in 'user_name', with: (@new_name = 'James Pinto')
27
- fill_in 'user_city', with: (@new_city = 'Brasilia')
28
27
  fill_in 'user_username', with: (@new_username = 'new_username')
29
28
  click_button 'Update'
30
29
  end
@@ -40,7 +39,6 @@ RSpec.bdd.uic "Profile Page" do
40
39
  Then "and the new values should reflect on the database" do
41
40
  user = User.last
42
41
  expect(user.name).to eq(@new_name)
43
- expect(user.city).to eq(@new_city)
44
42
  expect(user.username).to eq(@new_username)
45
43
  end
46
44
  end
@@ -17,8 +17,7 @@ RSpec.bdd.capability "I can Create Users" do
17
17
  end
18
18
 
19
19
  Given 'I visit New User Webmaster Page with Sudo Mode' do
20
- visit '/'
21
- click_link 'User List'
20
+ visit '/users'
22
21
  click_link "View User List as a Webmaster"
23
22
  fill_in 'user_password', with: '1234'
24
23
  click_button 'Confirm'
@@ -28,7 +27,6 @@ RSpec.bdd.capability "I can Create Users" do
28
27
  scenario "Success" do
29
28
 
30
29
  When 'I submit a new user John' do
31
- fill_in 'user_city', with: 'Brasilia'
32
30
  fill_in 'user_name', with: 'john'
33
31
  fill_in 'user_username', with: 'john'
34
32
  fill_in 'user_email', with: 'john@test.com'
@@ -18,8 +18,7 @@ RSpec.bdd.capability "I can Impersonate Users" do
18
18
 
19
19
  scenario "Success" do
20
20
  Given 'I visit Users List Webmaster Page with Sudo Mode' do
21
- visit '/'
22
- click_link 'User List'
21
+ visit '/users'
23
22
  click_link "View User List as a Webmaster"
24
23
  end
25
24
 
@@ -15,8 +15,7 @@ RSpec.bdd.capability "I can List Users" do
15
15
  scenario 'I have access to the page' do
16
16
 
17
17
  When 'I visit the users page' do
18
- visit '/'
19
- click_link 'User List'
18
+ visit '/users'
20
19
  end
21
20
 
22
21
  Then 'I should be on the users page' do
@@ -37,8 +36,7 @@ RSpec.bdd.capability "I can List Users" do
37
36
 
38
37
  scenario "Via User List Page" do
39
38
  When 'I visit james profile from the User List page' do
40
- visit '/'
41
- click_link 'User List'
39
+ visit '/users'
42
40
  click_link 'james'
43
41
  end
44
42
  end # scenario
@@ -46,7 +46,7 @@ RSpec.bdd.capability "I can Sign Up With Email" do
46
46
  api "API", type: :request do
47
47
  scenario "Valid Parameters" do
48
48
  When "I sign up with valid parameters" do
49
- post "/hello/sign_up.json", sign_up: {email: "foo@bar.com", password: "foobar", name: "Foo Bar", city: "Brasilia", username: "foobar"}
49
+ post "/hello/sign_up.json", sign_up: {email: "foo@bar.com", password: "foobar", name: "Foo Bar", username: "foobar"}
50
50
  end
51
51
  end # scenario
52
52
 
@@ -168,12 +168,12 @@ RSpec.bdd.capability "I can Sign Up With Email" do
168
168
  api "API", type: :request do
169
169
  scenario "Valid Parameters" do
170
170
  When "I sign up with valid parameters" do
171
- post "/hello/sign_up.json", sign_up: {email: "foo@bar.com", password: "foobar", name: "Foo Bar", city: "Brasilia", username: "foobar"}
171
+ post "/hello/sign_up.json", sign_up: {email: "foo@bar.com", password: "foobar", name: "Foo Bar", username: "foobar"}
172
172
  end
173
173
 
174
174
  Then "I should see the access object" do
175
175
  expect(json_response.keys).to match_array ["expires_at", "token", "user", "user_id"]
176
- expect(json_response["user"].keys).to match_array ["id", "accesses_count", "city", "created_at", "credentials_count", "locale", "name", "role", "time_zone", "updated_at", "username"]
176
+ expect(json_response["user"].keys).to match_array ["id", "accesses_count", "created_at", "credentials_count", "locale", "name", "role", "time_zone", "updated_at", "username"]
177
177
  end
178
178
 
179
179
  Then "I should get a 201 response" do
@@ -204,7 +204,6 @@ RSpec.bdd.capability "I can Sign Up With Email" do
204
204
  "email"=>["can't be blank"],
205
205
  "password"=>["can't be blank"],
206
206
  "name"=>["can't be blank"],
207
- "city"=>["can't be blank"]
208
207
  })
209
208
  end
210
209
 
@@ -5,7 +5,6 @@ def fill_in_registration_form
5
5
  fill_in 'sign_up_email', with: 'foo@bar.com'
6
6
  fill_in 'sign_up_username', with: 'foobar'
7
7
  fill_in 'sign_up_password', with: '1234'
8
- fill_in 'sign_up_city', with: 'OMG! I can customize Hello!'
9
8
  end
10
9
  end
11
10
 
@@ -26,21 +25,18 @@ end
26
25
 
27
26
  def sign_in_as_an_onboarding
28
27
  u = create(:user_onboarding)
29
- create(:email_credential, user: u, email: "#{u.username}@example.com")
30
28
  sign_in_with(u.username)
31
29
  expect(current_user.role).to eq('onboarding')
32
30
  end
33
31
 
34
32
  def sign_in_as_a_user
35
33
  u = create(:user_user)
36
- create(:email_credential, user: u, email: "#{u.username}@example.com")
37
34
  sign_in_with(u.username)
38
35
  expect(current_user.role).to eq('user')
39
36
  end
40
37
 
41
38
  def sign_in_as_a_webmaster
42
39
  u = create(:user_webmaster)
43
- create(:email_credential, user: u, email: "#{u.username}@example.com")
44
40
  sign_in_with(u.username)
45
41
  expect(current_user.role).to eq('webmaster')
46
42
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  module Hello
4
4
  describe Business::Registration::SignUp do
5
5
  describe '.register(email:string, username:string, password:string)' do
6
- let(:valid_attrs) { { city: 'Brasilia', name: 'James Pinto', email: 'foo@bar.com', username: 'foobar', password: 'foobar' } }
6
+ let(:valid_attrs) { { name: 'James Pinto', email: 'foo@bar.com', username: 'foobar', password: 'foobar' } }
7
7
 
8
8
  describe 'original state' do
9
9
  it('no errors') { expect(subject.errors.messages).to eq({}) }
@@ -13,7 +13,14 @@ module Hello
13
13
  before do
14
14
  subject.register({})
15
15
  end
16
- it('a lot of errors') { expect(subject.errors.messages).to eq(email: ["can't be blank"], name: ["can't be blank"], city: ["can't be blank"], password: ["can't be blank"], username: ["can't be blank"]) }
16
+ it('has a lot of errors') do
17
+ expect(subject.errors.messages).to eq({
18
+ email: ["can't be blank"],
19
+ name: ["can't be blank"],
20
+ password: ["can't be blank"],
21
+ username: ["can't be blank"]
22
+ })
23
+ end
17
24
  end # describe
18
25
 
19
26
  describe 'by field' do
@@ -252,6 +259,7 @@ module Hello
252
259
  end # describe
253
260
  end # describe config
254
261
  end # describe password
262
+
255
263
  end # describe by field
256
264
  end # describe .register
257
265
  end # describe Business::SignUp
@@ -46,7 +46,7 @@ module Hello::Management
46
46
  json_body = JSON(response.body)
47
47
  expect(response.status).to eq(200)
48
48
  expect(response.status_message).to eq('OK')
49
- expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count city))
49
+ expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count))
50
50
  end
51
51
 
52
52
  it 'SESSION' do
@@ -56,7 +56,7 @@ module Hello::Management
56
56
  json_body = JSON(response.body)
57
57
  expect(response.status).to eq(200)
58
58
  expect(response.status_message).to eq('OK')
59
- expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count city))
59
+ expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count))
60
60
  end
61
61
 
62
62
  it 'HEADER' do
@@ -66,7 +66,7 @@ module Hello::Management
66
66
  json_body = JSON(response.body)
67
67
  expect(response.status).to eq(200)
68
68
  expect(response.status_message).to eq('OK')
69
- expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count city))
69
+ expect(json_body.keys).to match_array(%w(id created_at updated_at name role username locale time_zone credentials_count accesses_count))
70
70
  end
71
71
  end
72
72
  end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmailCredential do
4
+
5
+ describe 'ClassMethods' do
6
+ describe '#new' do
7
+ it "is not valid" do
8
+ expect(subject).to be_invalid
9
+ expect(subject.errors.messages).to eq({:email => ["can't be blank"]})
10
+ end
11
+ end
12
+
13
+ describe ".create" do
14
+ subject { EmailCredential.new(email: 'foo@example.com') }
15
+
16
+ describe "invalid examples" do
17
+
18
+ end
19
+
20
+ describe "valid examples" do
21
+ describe "does save without a user" do
22
+ it "does save without a user" do
23
+ expect(subject.user).to eq(nil)
24
+ expect(subject.save).to eq(true)
25
+ expect(Credential.count).to eq(1)
26
+ end
27
+
28
+ it "does save with an invalid user" do
29
+ subject.user = User.new
30
+ expect(subject.save).to eq(true)
31
+ expect(subject.errors.messages).to eq({})
32
+ expect(Credential.count).to eq(1)
33
+ end
34
+ end
35
+
36
+ it "saves with a valid user" do
37
+ user = create(:user)
38
+ expect(Credential.count).to eq(2)
39
+ subject.user = user
40
+ expect(subject.save).to eq(true)
41
+ expect(Credential.count).to eq(3)
42
+ end
43
+
44
+ end
45
+ end
46
+
47
+ describe ".destroy!" do
48
+ describe "valid examples" do
49
+ describe "with 1 email and 1 password" do
50
+ subject { create(:user) }
51
+
52
+ it "works" do
53
+ subject # touch
54
+ expect(User.count).to eq(1)
55
+ expect(Credential.count).to eq(2)
56
+ subject.destroy!
57
+ expect(User.count).to eq(0)
58
+ expect(Credential.count).to eq(0)
59
+ end
60
+ end
61
+
62
+ describe "with 2 emails and 1 password" do
63
+ subject do
64
+ u = create(:user)
65
+ u.email_credentials.create!(email: 'bar@example.com')
66
+ u
67
+ end
68
+
69
+ it "works" do
70
+ subject # touch
71
+ expect(User.count).to eq(1)
72
+ expect(Credential.count).to eq(3)
73
+ subject.destroy!
74
+ expect(User.count).to eq(0)
75
+ expect(Credential.count).to eq(0)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe PasswordCredential do
4
+
5
+ describe 'ClassMethods' do
6
+ describe '#new' do
7
+ it "is not valid" do
8
+ expect(subject).to be_invalid
9
+ expect(subject.errors.messages).to eq({:password => ["can't be blank"]})
10
+ end
11
+ end
12
+
13
+ describe ".create" do
14
+ subject { PasswordCredential.new(password: '1234') }
15
+
16
+ describe "valid examples" do
17
+ describe "does save without a user" do
18
+ it "does save without a user" do
19
+ expect(subject.user).to eq(nil)
20
+ expect(subject.save).to eq(true)
21
+ expect(Credential.count).to eq(1)
22
+ end
23
+
24
+ it "does save with an invalid user" do
25
+ subject.user = User.new
26
+ expect(subject.save).to eq(true)
27
+ expect(subject.errors.messages).to eq({})
28
+ expect(Credential.count).to eq(1)
29
+ end
30
+ end
31
+
32
+ it "saves with a valid user" do
33
+ user = create(:user)
34
+ expect(Credential.count).to eq(2)
35
+ subject.user = user
36
+ expect(subject.save).to eq(true)
37
+ expect(Credential.count).to eq(3)
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ describe ".destroy!" do
44
+ describe "valid examples" do
45
+ describe "with 1 email and 1 password" do
46
+ subject { create(:user) }
47
+
48
+ it "works" do
49
+ subject # touch
50
+ expect(User.count).to eq(1)
51
+ expect(Credential.count).to eq(2)
52
+ subject.destroy!
53
+ expect(User.count).to eq(0)
54
+ expect(Credential.count).to eq(0)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,124 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+
5
+ describe 'ClassMethods' do
6
+ describe '#new' do
7
+ it "is not valid" do
8
+ expect(subject).to be_invalid
9
+ expect(subject.errors.messages).to eq({
10
+ :locale=>["can't be blank", "is not included in the list"],
11
+ :time_zone=>["can't be blank", "is not included in the list"],
12
+ :name=>["can't be blank"],
13
+ :email_credentials=>["is too short (minimum is 1 character)"],
14
+ :username => ["can't be blank"],
15
+ :email => ["can't be blank"],
16
+ :password => ["can't be blank"],
17
+ })
18
+ end
19
+ end
20
+
21
+ describe ".create" do
22
+ subject do
23
+ build(:user, :without_credentials)
24
+ end
25
+
26
+ describe "invalid examples" do
27
+ describe "number of emails" do
28
+ it "does not save with 0 emails and 0 passwords" do
29
+ expect(subject.save).to eq(false)
30
+ expect(User.count).to eq(0)
31
+ end
32
+
33
+ it "does not save with 0 email and 1 password" do
34
+ subject.password_credentials.build(password: '1234')
35
+ subject.save
36
+ expect(subject.errors.messages).to eq({:email => ["can't be blank"], :email_credentials=>["is too short (minimum is 1 character)"]})
37
+ expect(User.count).to eq(0)
38
+ expect(Credential.count).to eq(0)
39
+ end
40
+ end
41
+
42
+ describe "number of passwords" do
43
+ it "does not save with 1 email and 0 passwords" do
44
+ subject.email_credentials.build(email: 'foo@example.com')
45
+ subject.save
46
+ expect(subject.errors.messages).to eq(:password => ["can't be blank"])
47
+ expect(User.count).to eq(0)
48
+ expect(Credential.count).to eq(0)
49
+ end
50
+
51
+ it "does not save with 1 email and 2 passwords" do
52
+ subject.email_credentials.build(email: 'foo@example.com')
53
+ subject.password_credentials.build(password: '1234')
54
+ subject.password_credentials.build(password: '5678')
55
+ subject.save
56
+ expect(subject.errors.messages).to eq(:password_credentials => ["is the wrong length (should be 1 character)"])
57
+ expect(User.count).to eq(0)
58
+ expect(Credential.count).to eq(0)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "valid examples" do
64
+ it "save with 1 email and 1 passwords" do
65
+ subject.email_credentials.build(email: 'foo@example.com')
66
+ subject.password_credentials.build(password: '1234')
67
+ subject.save
68
+ expect(subject.errors.messages).to eq({})
69
+ expect(User.count).to eq(1)
70
+ expect(Credential.count).to eq(2)
71
+ end
72
+
73
+ it "save with 2 email and 1 passwords" do
74
+ subject.email_credentials.build(email: 'foo@example.com')
75
+ subject.email_credentials.build(email: 'bar@example.com')
76
+ subject.password_credentials.build(password: '1234')
77
+ subject.save
78
+ expect(subject.errors.messages).to eq({})
79
+ expect(User.count).to eq(1)
80
+ expect(Credential.count).to eq(3)
81
+ end
82
+ end
83
+ end
84
+
85
+ describe ".destroy!" do
86
+ describe "valid examples" do
87
+ describe "with 1 email and 1 password" do
88
+ subject do
89
+ u = build(:user)
90
+ u.save!
91
+ u
92
+ end
93
+
94
+ it "works" do
95
+ subject # touch
96
+ expect(User.count).to eq(1)
97
+ expect(Credential.count).to eq(2)
98
+ subject.destroy!
99
+ expect(User.count).to eq(0)
100
+ expect(Credential.count).to eq(0)
101
+ end
102
+ end
103
+ describe "with 2 emails and 1 password" do
104
+ subject do
105
+ u = build(:user)
106
+ u.email_credentials.build(email: 'bar@example.com')
107
+ u.save!
108
+ u
109
+ end
110
+
111
+ it "works" do
112
+ subject # touch
113
+ expect(User.count).to eq(1)
114
+ expect(Credential.count).to eq(3)
115
+ subject.destroy!
116
+ expect(User.count).to eq(0)
117
+ expect(Credential.count).to eq(0)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ end