cadenero 0.0.2.b4 → 0.0.2.b5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +19 -4
  3. data/app/controllers/cadenero/v1/account/users_controller.rb +4 -3
  4. data/app/controllers/cadenero/v1/accounts_controller.rb +3 -5
  5. data/app/extenders/controllers/application_controller_decorator.rb +4 -5
  6. data/app/models/cadenero/member.rb +43 -1
  7. data/app/models/cadenero/user.rb +5 -5
  8. data/app/models/cadenero/v1/account.rb +17 -10
  9. data/config/initializers/apartment.rb +0 -1
  10. data/config/initializers/warden/strategies/password.rb +1 -1
  11. data/db/migrate/20130612061604_create_cadenero_v1_accounts.rb +1 -1
  12. data/db/migrate/20130715174857_add_auth_token_to_cadenero_members.rb +6 -0
  13. data/db/seeds.rb +3 -3
  14. data/lib/cadenero.rb +6 -6
  15. data/lib/cadenero/engine.rb +1 -1
  16. data/lib/cadenero/testing_support/authentication_helpers.rb +55 -18
  17. data/lib/cadenero/testing_support/subdomain_helpers.rb +1 -1
  18. data/lib/cadenero/version.rb +1 -1
  19. data/lib/generators/cadenero/install_generator.rb +4 -9
  20. data/spec/controllers/cadenero/v1/accounts_controller_spec.rb +3 -5
  21. data/spec/controllers/cadenero/v1/users_controller_spec.rb +53 -0
  22. data/spec/dummy/config/initializers/cadenero.rb +13 -0
  23. data/spec/dummy/db/schema.rb +3 -1
  24. data/spec/dummy/log/development.log +8 -0
  25. data/spec/dummy/log/test.log +39150 -0
  26. data/spec/features/accounts/sign_up_spec.rb +1 -1
  27. data/spec/features/users/sign_in_spec.rb +49 -24
  28. data/spec/features/users/sign_up_spec.rb +8 -15
  29. data/spec/generators/install_generator_spec.rb +41 -6
  30. data/spec/models/cadenero/member_spec.rb +11 -1
  31. metadata +5 -2
@@ -14,7 +14,7 @@ feature 'Accounts' do
14
14
  end
15
15
 
16
16
  scenario "cannot create an account with an already used subdomain" do
17
- Cadenero::V1::Account.create!(create_account)
17
+ Cadenero::V1::Account.create!(create_account_params_json)
18
18
  sign_up_account
19
19
  expected_json_errors(errors_already_taken_subdomain)
20
20
  end
@@ -5,7 +5,6 @@ require 'cadenero/testing_support/authentication_helpers'
5
5
  feature 'User sign in' do
6
6
  extend Cadenero::TestingSupport::SubdomainHelpers
7
7
  include Cadenero::TestingSupport::AuthenticationHelpers
8
-
9
8
 
10
9
  let(:account) { FactoryGirl.create(:account_with_schema) }
11
10
  let(:errors_redirect_ro_sign_in) {{errors: %Q{Please sign in. posting the user json credentials as: {"user": {"email": "testy2@example.com", "password": "changeme"}} to /v1/sessions}, links: "/v1/sessions"}.to_json}
@@ -18,44 +17,70 @@ feature 'User sign in' do
18
17
  within_account_subdomain do
19
18
  scenario "signs in as an account owner successfully" do
20
19
  check_error_for_not_signed_in_yet
21
- user_email = successful_sign_in_owner(account)
20
+ user_email = successful_sign_in_owner account
22
21
  get root_url
23
22
  expect(last_response.status).to eq 200
24
23
  expect(json_last_response_body["message"]).to have_content user_email
25
24
  end
26
25
 
26
+ scenario "signs in as a user successfully" do
27
+ check_error_for_not_signed_in_yet
28
+ second_user_email = successful_sign_up_user_in_existing_account account, "_second"
29
+ second_user = Cadenero::User.where(email: second_user_email).first
30
+ successful_sign_in_user(account, account_user_params_json(second_user))
31
+ get root_url
32
+ expect(last_response.status).to eq 200
33
+ expect(json_last_response_body["message"]).to have_content second_user_email
34
+ end
35
+
27
36
  scenario "signout as an account owner successfully" do
28
- user_email = successful_sign_in_owner(account)
37
+ user_email = successful_sign_in_owner account
29
38
  delete sessions_url, id: account.owner.id
30
39
  expect(last_response.status).to eq 200
31
40
  expect(json_last_response_body["message"]).to have_content "Successful logout"
32
41
  check_error_for_not_signed_in_yet
33
42
  end
34
43
 
35
- end
44
+ scenario "two users of the same account should have different auth_tokens" do
45
+ user_email = successful_sign_in_owner account
46
+ user_auth_token = json_last_response_body["user"]["auth_token"]
47
+ user = Cadenero::User.where(email: user_email).first
48
+ delete sessions_url, id: user.id
49
+ check_error_for_not_signed_in_yet
50
+ second_user_email = successful_sign_up_user_in_existing_account account, "_second"
51
+ second_user = Cadenero::User.where(email: second_user_email).first
52
+ successful_sign_in_user(account, account_user_params_json(second_user))
53
+ second_user_auth_token = json_last_response_body["user"]["auth_token"]
54
+ expect(second_user_auth_token).not_to eq([])
55
+ expect(user).not_to eq(second_user)
56
+ expect(user_auth_token).not_to eq(second_user_auth_token)
57
+ end
36
58
 
37
- it "attempts sign in with an invalid password and fails" do
38
- check_error_for_not_signed_in_yet
39
- sign_in_user sessions_url, { email: "user@example.com", password: "" }
40
- expected_json_errors(errors_invalid_email_or_password)
41
59
  end
42
60
 
43
- it "attempts sign in with an invalid email address and fails" do
44
- check_error_for_not_signed_in_yet
45
- sign_in_user sessions_url, { email: "foo@example.com", password: "password"}
46
- expected_json_errors(errors_invalid_email_or_password)
47
- end
61
+ context "without sign in" do
62
+ scenario "attempts sign in with an invalid password and fails" do
63
+ check_error_for_not_signed_in_yet
64
+ sign_in_user sessions_url, { email: "user@example.com", password: "" }
65
+ expected_json_errors(errors_invalid_email_or_password)
66
+ end
48
67
 
49
- it "cannot sign in if not a member of an existing subdomain" do
50
- other_account = FactoryGirl.create(:account)
51
- get cadenero.v1_root_url(:subdomain => account.subdomain)
52
- expect(last_response.body).to eql(errors_redirect_ro_sign_in)
53
- sign_in_user sessions_url, { email: other_account.owner.email, password: "" }
54
- expected_json_errors(errors_invalid_email_or_password)
55
- end
68
+ scenario "attempts sign in with an invalid email address and fails" do
69
+ check_error_for_not_signed_in_yet
70
+ sign_in_user sessions_url, { email: "foo@example.com", password: "password"}
71
+ expected_json_errors(errors_invalid_email_or_password)
72
+ end
56
73
 
57
- it "cannot sign in if the subdomain does not exist" do
58
- sign_in_user error_url, account_user(account.owner)
59
- expected_json_errors(errors_invalid_subdomain)
60
- end
74
+ scenario "cannot sign in if not a member of an existing subdomain" do
75
+ other_account = FactoryGirl.create(:account)
76
+ check_error_for_not_signed_in_yet
77
+ sign_in_user sessions_url, { email: other_account.owner.email, password: "password" }
78
+ expected_json_errors(errors_invalid_email_or_password)
79
+ end
80
+
81
+ scenario "cannot sign in if the subdomain does not exist" do
82
+ sign_in_user error_url, account_user_params_json(account.owner)
83
+ expected_json_errors(errors_invalid_subdomain)
84
+ end
85
+ end
61
86
  end
@@ -7,24 +7,17 @@ feature "User signup" do
7
7
  let!(:account) { FactoryGirl.create(:account_with_schema) }
8
8
  let(:root_url) { "http://#{account.subdomain}.example.com/" }
9
9
  scenario "under an account" do
10
- sign_up_user root_url
11
- expect(last_response.status).to eq 201
12
- expect(json_last_response_body["user"]["membership_ids"]).to eq [account.id]
13
- expect(last_request.url).to eq "#{root_url}v1/users"
14
- get "#{root_url}v1/users/#{json_last_response_body['user']['id']}"
15
- expect(json_last_response_body["user"]["membership_ids"]).to eq [account.id]
10
+ user_email = successful_sign_up_user_in_existing_account account
11
+ expect(user_email).to eq("user@example.com")
16
12
  end
17
13
 
18
14
  scenario "under two accounts" do
19
- sign_up_user root_url
20
- user_id = json_last_response_body['user']['id']
21
- get "#{root_url}v1/users/#{user_id}"
22
- expect(json_last_response_body["user"]["membership_ids"]).to eq [account.id]
23
- second_account = FactoryGirl.create(:account_with_schema, owner: Cadenero::User.where(id: user_id).first)
24
- sign_up_user "http://#{second_account.subdomain}.example.com/"
25
- expect(json_last_response_body["user"]["membership_ids"]).to eq [second_account.id]
26
- get "#{root_url}v1/users/#{user_id}"
27
- expect(json_last_response_body["user"]["membership_ids"]).to eq [account.id, second_account.id]
15
+ account_user_email = successful_sign_up_user_in_existing_account account
16
+ owner = Cadenero::User.where(email: account_user_email).first
17
+ second_account = FactoryGirl.create(:account_with_schema, owner: owner)
18
+ second_account_user_email = successful_sign_up_user_in_existing_account second_account
19
+ get "#{root_url}v1/users/#{owner.id}"
20
+ expect_subject_ids_to_have("user", "membership_ids", [second_account.id, account.id], 200)
28
21
  get "#{root_url}v1/users"
29
22
  expect(json_last_response_body["users"].length).to eq 2
30
23
  end
@@ -8,15 +8,18 @@ describe Cadenero::Generators::InstallGenerator do
8
8
  # So we can know whether to backup or restore in cleanup!
9
9
  # Wish RSpec had a setting for this already
10
10
  before { flag_example! }
11
+
12
+ # For the example flag its run metadata to true
11
13
  def flag_example!
12
14
  example.metadata[:run] = true
13
15
  end
14
16
 
17
+ # Sort the migrations
15
18
  def migrations
16
19
  Dir["#{Rails.root}/db/migrate/*.rb"].sort
17
20
  end
18
21
 
19
- it "copies over the migrations" do
22
+ it "runs the installer correctly" do
20
23
  migrations.should be_empty
21
24
  capture(:stdout) do
22
25
  described_class.start(["--user-class=User", "--no-migrate", "--current-user-helper=current_user",
@@ -40,16 +43,48 @@ describe Cadenero::Generators::InstallGenerator do
40
43
  helper_method :cadenero_user
41
44
 
42
45
  }
43
- application_controller.should include(expected_cadenero_user_method)
44
- Cadenero::V1::Account.count.should == 0
45
- Cadenero::User.count.should == 0
46
+ expect(application_controller).to include(expected_cadenero_user_method)
47
+ expect(Cadenero::V1::Account.count).to eq 0
48
+ expect(Cadenero::User.count).to eq 0
46
49
 
47
50
  FactoryGirl.create(:account)
48
51
  FactoryGirl.create(:user)
49
52
  Cadenero::Engine.load_seed
50
53
 
51
- Cadenero::V1::Account.count.should == 2
52
- Cadenero::User.count.should == 3
54
+ expect(Cadenero::V1::Account.count).to eq 2
55
+ expect(Cadenero::User.count).to eq 3
56
+ end
57
+
58
+ it "should add /config/initializers/cadenero.rb with Template if doesn't exist" do
59
+ FileUtils.rm("#{Rails.root}/config/initializers/cadenero.rb")
60
+ subject.add_cadenero_initializer
61
+ expect(File.exist?("#{Rails.root}/config/initializers/cadenero.rb")).to be_true
62
+ cadenero_initializer = File.read("#{Rails.root}/config/initializers/cadenero.rb")
63
+ expect(cadenero_initializer).to include("Cadenero.user_class =")
64
+ end
65
+
66
+ it "should run the Cadenero migrations" do
67
+ subject.run_migrations
68
+ expect(Cadenero::User.columns.map{|column| {name: column.name}}).to eq [{:name=>"id"},
69
+ {:name=>"email"},
70
+ {:name=>"password_digest"},
71
+ {:name=>"created_at"},
72
+ {:name=>"updated_at"}]
73
+ end
74
+
75
+ context "no-migrate" do
76
+ before { subject.stub :options => {"no-migrate" => true}}
77
+ it "should not load the seeds" do
78
+ subject.seed_database
79
+ expect(Cadenero::V1::Account.count).to eq 0
80
+ expect(Cadenero::User.count).to eq 0
81
+ end
82
+ it "should not output as a finished message that the migrations were run" do
83
+ output = capture(:stdout) do
84
+ subject.finished
85
+ end
86
+ expect(output).not_to include("rake db:migrate")
87
+ end
53
88
  end
54
89
 
55
90
  end
@@ -2,6 +2,16 @@ require 'spec_helper'
2
2
 
3
3
  module Cadenero
4
4
  describe Member do
5
-
5
+ let!(:user) { stub_model(Cadenero::User, id: 101, email: "testy@example.com", password: "12345678")}
6
+ let!(:account) { stub_model(Cadenero::V1::Account, id: 1001, authentication_token: "dsdaefer412add",
7
+ owner: user) }
8
+
9
+ it "should have the auth_token" do
10
+ member = Member.new
11
+ member.account = account
12
+ member.user = user
13
+ member.save!
14
+ expect(member.auth_token).not_to eq(nil)
15
+ end
6
16
  end
7
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cadenero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.b4
4
+ version: 0.0.2.b5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Vidaurre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-12 00:00:00.000000000 Z
11
+ date: 2013-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails-api
@@ -225,6 +225,7 @@ files:
225
225
  - db/migrate/20130612061604_create_cadenero_v1_accounts.rb
226
226
  - db/migrate/20130612064652_create_cadenero_v1_users.rb
227
227
  - db/migrate/20130612073709_create_cadenero_v1_members.rb
228
+ - db/migrate/20130715174857_add_auth_token_to_cadenero_members.rb
228
229
  - db/seeds.rb
229
230
  - lib/cadenero/active_record_extensions.rb
230
231
  - lib/cadenero/constraints/subdomain_required.rb
@@ -240,6 +241,7 @@ files:
240
241
  - Rakefile
241
242
  - README.md
242
243
  - spec/controllers/cadenero/v1/accounts_controller_spec.rb
244
+ - spec/controllers/cadenero/v1/users_controller_spec.rb
243
245
  - spec/dummy/app/controllers/application_controller.rb
244
246
  - spec/dummy/config/application.rb
245
247
  - spec/dummy/config/boot.rb
@@ -311,6 +313,7 @@ specification_version: 4
311
313
  summary: Rails.API Engine for manage multitenant authentication
312
314
  test_files:
313
315
  - spec/controllers/cadenero/v1/accounts_controller_spec.rb
316
+ - spec/controllers/cadenero/v1/users_controller_spec.rb
314
317
  - spec/dummy/app/controllers/application_controller.rb
315
318
  - spec/dummy/config/application.rb
316
319
  - spec/dummy/config/boot.rb