stormpath-rails 1.0.0.beta.2 → 1.1.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -19
  3. data/.rspec +0 -1
  4. data/.travis.yml +4 -23
  5. data/Gemfile +18 -0
  6. data/README.md +163 -73
  7. data/Rakefile +18 -3
  8. data/app/assets/stylesheets/stormpath.css.scss +283 -0
  9. data/app/controllers/stormpath/rails/base_controller.rb +10 -0
  10. data/app/controllers/stormpath/rails/omniauth_controller.rb +11 -0
  11. data/app/controllers/stormpath/rails/passwords_controller.rb +56 -0
  12. data/app/controllers/stormpath/rails/sessions_controller.rb +52 -0
  13. data/app/controllers/stormpath/rails/users_controller.rb +65 -0
  14. data/app/helpers/social_helper.rb +13 -0
  15. data/app/views/layouts/stormpath.html.erb +31 -0
  16. data/app/views/passwords/edit.html.erb +0 -0
  17. data/app/views/passwords/email_sent.html.erb +15 -0
  18. data/app/views/passwords/forgot.html.erb +33 -0
  19. data/app/views/passwords/forgot_change.html.erb +38 -0
  20. data/app/views/passwords/forgot_change_failed.html.erb +14 -0
  21. data/app/views/passwords/forgot_complete.html.erb +19 -0
  22. data/app/views/sessions/_facebook_login_form.erb +31 -0
  23. data/app/views/sessions/_form.html.erb +31 -0
  24. data/app/views/sessions/_google_login_form.html.erb +3 -0
  25. data/app/views/sessions/_social_auth.html.erb +7 -0
  26. data/app/views/sessions/new.html.erb +21 -0
  27. data/app/views/users/_form.html.erb +43 -0
  28. data/app/views/users/new.html.erb +10 -0
  29. data/app/views/users/verification_complete.html.erb +20 -0
  30. data/app/views/users/verification_email_sent.html.erb +15 -0
  31. data/app/views/users/verification_failed.html.erb +14 -0
  32. data/app/views/users/verification_resend.html.erb +14 -0
  33. data/bin/console +14 -0
  34. data/bin/rails +12 -0
  35. data/bin/rake +16 -0
  36. data/bin/rspec +16 -0
  37. data/bin/setup +8 -0
  38. data/config/initializers/assets.rb +1 -0
  39. data/config/routes.rb +16 -0
  40. data/lib/generators/stormpath/install/install_generator.rb +114 -0
  41. data/lib/generators/stormpath/install/templates/db/migrate/add_stormpath_to_users.rb +21 -0
  42. data/lib/generators/stormpath/install/templates/db/migrate/create_users.rb +12 -0
  43. data/lib/generators/stormpath/install/templates/stormpath.rb +4 -0
  44. data/lib/generators/stormpath/install/templates/user.rb +3 -0
  45. data/lib/generators/stormpath/routes/routes_generator.rb +23 -0
  46. data/lib/generators/stormpath/routes/templates/routes.rb +5 -0
  47. data/lib/generators/stormpath/views/USAGE +11 -0
  48. data/lib/generators/stormpath/views/views_generator.rb +29 -0
  49. data/lib/stormpath/rails/account.rb +2 -116
  50. data/lib/stormpath/rails/account_status.rb +28 -0
  51. data/lib/stormpath/rails/authentication.rb +72 -0
  52. data/lib/stormpath/rails/authentication_status.rb +22 -0
  53. data/lib/stormpath/rails/client.rb +73 -60
  54. data/lib/stormpath/rails/configuration.rb +56 -0
  55. data/lib/stormpath/rails/controller.rb +13 -0
  56. data/lib/stormpath/rails/engine.rb +6 -0
  57. data/lib/stormpath/rails/session.rb +37 -0
  58. data/lib/stormpath/rails/social.rb +34 -0
  59. data/lib/stormpath/rails/user.rb +25 -0
  60. data/lib/stormpath/rails/user_config/api_key.rb +17 -0
  61. data/lib/stormpath/rails/user_config/application.rb +12 -0
  62. data/lib/stormpath/rails/user_config/facebook.rb +16 -0
  63. data/lib/stormpath/rails/user_config/forgot_password.rb +12 -0
  64. data/lib/stormpath/rails/user_config/google.rb +16 -0
  65. data/lib/stormpath/rails/user_config/id_site.rb +13 -0
  66. data/lib/stormpath/rails/user_config/login.rb +13 -0
  67. data/lib/stormpath/rails/user_config/logout.rb +13 -0
  68. data/lib/stormpath/rails/user_config/register.rb +13 -0
  69. data/lib/stormpath/rails/user_config/verify_email.rb +14 -0
  70. data/lib/stormpath/rails/version.rb +1 -2
  71. data/lib/stormpath/rails.rb +32 -0
  72. data/lib/stormpath/testing/helpers.rb +49 -0
  73. data/lib/stormpath-rails.rb +6 -1
  74. data/stormpath-rails.gemspec +22 -28
  75. metadata +97 -256
  76. data/.ruby-gemset +0 -1
  77. data/.ruby-version +0 -1
  78. data/CHANGES.md +0 -19
  79. data/Guardfile +0 -23
  80. data/LICENSE.txt +0 -22
  81. data/lib/generators/stormpath/rails/migration/migration_generator.rb +0 -17
  82. data/lib/generators/stormpath/rails/templates/update_account_model.rb +0 -10
  83. data/lib/stormpath/rails/railtie.rb +0 -13
  84. data/spec/client_spec.rb +0 -222
  85. data/spec/generators/migration_generator_spec.rb +0 -19
  86. data/spec/integration/active_record_spec.rb +0 -23
  87. data/spec/integration/mongoid_spec.rb +0 -19
  88. data/spec/spec_helper.rb +0 -96
  89. data/spec/support/stormpath_account_shared_examples.rb +0 -212
data/spec/client_spec.rb DELETED
@@ -1,222 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Stormpath::Rails::Client, :vcr do
4
-
5
- describe ".client" do
6
- context "given a valid Stormpath API key ID and secret" do
7
- let(:client) do
8
- Stormpath::Rails::Client.client
9
- end
10
-
11
- it "should instantiate a Stormpath Client" do
12
- expect(client).to be
13
- expect(client).to be_kind_of Stormpath::Client
14
- end
15
-
16
- it "should instantiate a Stormpath Tenant" do
17
- expect(client.tenant).to be
18
- expect(client.tenant).to be_kind_of Stormpath::Resource::Tenant
19
- end
20
- end
21
-
22
- context 'given a composite url' do
23
- let(:composite_url) { 'http://ASDF1234:ZXCV5678@example.com/foo/bar' }
24
- let(:application) { double 'application' }
25
- let(:loaded_client) { double 'client' }
26
- let(:returned_client) { Stormpath::Rails::Client.client }
27
-
28
- before do
29
- ENV['STORMPATH_URL'] = composite_url
30
- end
31
-
32
- it 'loads the client from the application' do
33
- Stormpath::Resource::Application
34
- .should_receive(:load)
35
- .with(composite_url)
36
- .and_return(application)
37
-
38
- application
39
- .should_receive(:client)
40
- .and_return(loaded_client)
41
-
42
- expect(returned_client).to be
43
- expect(returned_client).to eq(loaded_client)
44
- end
45
-
46
- after do
47
- ENV['STORMPATH_URL'] = nil
48
- end
49
- end
50
- end
51
-
52
- describe ".create_account!" do
53
- context "given a hash of account attributes" do
54
- let(:attributes) do
55
- {
56
- 'email' => 'test+foo+bar@example.com',
57
- 'given_name' => 'bazzy',
58
- 'surname' => 'foo',
59
- 'password' => 'P@66w0rd!',
60
- 'username' => 'testfoobar'
61
- }
62
- end
63
-
64
- let(:account) do
65
- Stormpath::Rails::Client.create_account! attributes
66
- end
67
-
68
- it "should create an account" do
69
- expect(account).to be
70
- expect(account).to be_kind_of Stormpath::Resource::Account
71
- expect(account.given_name).to eq(attributes['given_name'])
72
- end
73
-
74
- after do
75
- account.delete
76
- end
77
- end
78
- end
79
-
80
- describe ".authenticate_account" do
81
- context "given a valid username and password" do
82
- let(:username) { 'testfoobar' }
83
- let(:password) { 'Succ3ss!' }
84
-
85
- let!(:test_account) do
86
- obtain_test_account(
87
- 'username' => 'testfoobar',
88
- 'password' => 'Succ3ss!'
89
- )
90
- end
91
-
92
- let(:authenticated_account) do
93
- Stormpath::Rails::Client.authenticate_account(
94
- username, password
95
- )
96
- end
97
-
98
- it "authenticates the account" do
99
- expect(authenticated_account).to be
100
- expect(authenticated_account).to be_kind_of Stormpath::Resource::Account
101
- expect(authenticated_account.username).to eq(username)
102
- end
103
-
104
- after do
105
- authenticated_account.delete
106
- end
107
- end
108
- end
109
-
110
- describe ".update_account!" do
111
- context "given a valid account" do
112
- let(:new_name) { "Bartholomew" }
113
-
114
- let(:created_account) do
115
- obtain_test_account 'given_name' => 'Foo'
116
- end
117
-
118
- let(:reloaded_account) do
119
- found_account = nil
120
-
121
- Stormpath::Rails::Client.all_accounts.each do |a|
122
- found_account = a unless a.href != created_account.href or !found_account.nil?
123
- end
124
-
125
- found_account
126
- end
127
-
128
- before do
129
- Stormpath::Rails::Client.update_account!(
130
- created_account.href, 'given_name' => new_name
131
- )
132
- end
133
-
134
- it "updates the account" do
135
- expect(reloaded_account).to be
136
- expect(reloaded_account.given_name).to eq(new_name)
137
- end
138
-
139
- after do
140
- created_account.delete
141
- end
142
- end
143
- end
144
-
145
- describe ".find_account" do
146
- context "given a valid account" do
147
- let(:created_account) { obtain_test_account }
148
- let(:returned_account) do
149
- Stormpath::Rails::Client.find_account(
150
- created_account.href
151
- )
152
- end
153
-
154
- it "returns the account" do
155
- expect(returned_account).to be
156
- expect(returned_account).to be_kind_of Stormpath::Resource::Account
157
- expect(returned_account.href).to eq(created_account.href)
158
- end
159
-
160
- after do
161
- created_account.delete
162
- end
163
- end
164
- end
165
-
166
- describe ".send_password_reset_email" do
167
- context "given a valid account" do
168
- let(:created_account) { obtain_test_account }
169
- let(:returned_account) do
170
- Stormpath::Rails::Client.send_password_reset_email(
171
- created_account.email
172
- )
173
- end
174
-
175
- it "sends the reset email" do
176
- expect(returned_account).to be
177
- expect(returned_account).to be_kind_of Stormpath::Resource::Account
178
- expect(returned_account.href).to eq(created_account.href)
179
- end
180
-
181
- after do
182
- created_account.delete
183
- end
184
- end
185
- end
186
-
187
- describe '.verify_password_reset_token' do
188
- let(:password_reset_token) { 'ASDF1234' }
189
- let(:application) { double('application') }
190
-
191
- it 'delegates to the application instance' do
192
- Stormpath::Rails::Client
193
- .should_receive(:application)
194
- .and_return application
195
-
196
- application
197
- .should_receive(:verify_password_reset_token)
198
- .with(password_reset_token)
199
-
200
- Stormpath::Rails::Client.verify_password_reset_token(
201
- password_reset_token
202
- )
203
- end
204
- end
205
-
206
- describe '.verify_account_email' do
207
- let(:email_verification_token) { 'ASDF1234' }
208
- let(:accounts) { double('accounts') }
209
-
210
- it 'delegates to the application instance' do
211
- Stormpath::Rails::Client
212
- .stub_chain(:client, :accounts)
213
- .and_return(accounts)
214
-
215
- accounts
216
- .should_receive(:verify_email_token)
217
- .with email_verification_token
218
-
219
- Stormpath::Rails::Client.verify_account_email email_verification_token
220
- end
221
- end
222
- end
@@ -1,19 +0,0 @@
1
- require "active_support/core_ext/class/attribute_accessors"
2
- require "generator_spec/test_case"
3
- require "generators/stormpath/rails/migration/migration_generator"
4
-
5
- describe Stormpath::Rails::Generators::MigrationGenerator do
6
- include GeneratorSpec::TestCase
7
- destination File.expand_path("../tmp", __FILE__)
8
- arguments %w(person)
9
-
10
- before do
11
- Time.stub_chain(:now, :utc, :strftime).and_return("0")
12
- prepare_destination
13
- run_generator
14
- end
15
-
16
- it "creates configuration file" do
17
- assert_file "db/migrate/0_add_stormpath_url_to_people.rb", "class AddStormpathUrlToPeople < ActiveRecord::Migration\n def up\n add_column :people, :stormpath_url, :string\n add_index :people, :stormpath_url\n end\n\n def down\n remove_column :people, :stormpath_url\n end\nend"
18
- end
19
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
- require "active_record"
3
- require "stormpath-rails"
4
-
5
- describe "ActiveRecord record" do
6
- class ArEntity < ActiveRecord::Base
7
- include Stormpath::Rails::Account
8
- end
9
-
10
- subject { ArEntity.new }
11
-
12
- before(:each) do
13
- ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
14
- ActiveRecord::Migration.verbose = false
15
- ActiveRecord::Migration.create_table :ar_entities do |t|
16
- t.string :id
17
- t.string :stormpath_url
18
- end
19
- end
20
-
21
- it_should_behave_like "stormpath account"
22
-
23
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
- require 'mongoid'
3
- require "stormpath-rails"
4
-
5
- describe "Mongoid document" do
6
- class MongoidEntity
7
- include Mongoid::Document
8
- include Stormpath::Rails::Account
9
- end
10
-
11
- subject { MongoidEntity.new }
12
-
13
- before(:each) do
14
- Mongoid::Config.connect_to("stormpath_rails_test")
15
- end
16
-
17
- it_should_behave_like "stormpath account"
18
-
19
- end
data/spec/spec_helper.rb DELETED
@@ -1,96 +0,0 @@
1
- # Note: If SimpleCov starts after your application code is already loaded (via require),
2
- # it won't be able to track your files and their coverage! The SimpleCov.start must be
3
- # issued before any of your application code is required!
4
- require 'simplecov'
5
- SimpleCov.start
6
-
7
- require "vcr"
8
- require "webmock"
9
- require "pry"
10
- require "pry-debugger"
11
- require 'stormpath-rails'
12
-
13
- Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
14
-
15
- module Stormpath
16
- module TestResourceHelpers
17
- def reload_client
18
- Stormpath::Rails.send(:remove_const, :Client)
19
- load 'lib/stormpath/rails/client.rb'
20
- end
21
-
22
- def obtain_test_account(opts={})
23
- defaults = {
24
- 'surname' => 'testsurname',
25
- 'given_name' => 'testgivenname',
26
- 'username' => 'testfoobar',
27
- 'password' => 'Succ3ss!',
28
- 'email' => 'test+foo+bar@example.com'
29
- }
30
-
31
- begin
32
- Stormpath::Rails::Client.create_account! defaults.merge!(opts)
33
- rescue Stormpath::Error => e
34
- Stormpath::Rails::Client.authenticate_account(opts['username'], opts['password'])
35
- end
36
- end
37
- end
38
-
39
- class TestEnvironmentConfigurator
40
- def self.verify_setup
41
- pfx = 'STORMPATH_RAILS_TEST'
42
-
43
- unless (ENV["#{pfx}_API_KEY_SECRET"] and ENV["#{pfx}_API_KEY_ID"]) or ENV["#{pfx}_API_KEY_FILE_LOCATION"]
44
- raise <<-message
45
- Must specify either STORMPATH_RAILS_TEST_API_KEY_FILE_LOCATION or
46
- STORMPATH_RAILS_TEST_API_KEY_SECRET and STORMPATH_RAILS_TEST_API_KEY_ID
47
- in order to run tests.
48
- message
49
- end
50
-
51
- unless ENV["#{pfx}_APPLICATION_URL"]
52
- raise <<-message
53
- Must specify STORMPATH_RAILS_TEST_APPLICATION_URL so that tests have
54
- an Application Resource to run against.
55
- message
56
- end
57
- end
58
-
59
- def self.create_test_env
60
- k = %w(SECRET ID FILE_LOCATION ID_PROPERTY_NAME SECRET_PROPERTY_NAME)
61
-
62
- k.each do |v|
63
- ENV["STORMPATH_API_KEY_#{v}"] = ENV["STORMPATH_RAILS_TEST_API_KEY_#{v}"]
64
- end
65
-
66
- ENV['STORMPATH_APPLICATION_URL'] = ENV['STORMPATH_RAILS_TEST_APPLICATION_URL']
67
- end
68
-
69
- def self.prepare_test_environment
70
- verify_setup
71
- create_test_env
72
- end
73
- end
74
- end
75
-
76
- RSpec.configure do |config|
77
- config.mock_framework = :rspec
78
- config.order = 'random'
79
- config.include Stormpath::TestResourceHelpers
80
-
81
- config.before(:all) do
82
- Stormpath::TestEnvironmentConfigurator.prepare_test_environment
83
- end
84
-
85
- config.before(:each) do
86
- reload_client
87
- end
88
-
89
- config.treat_symbols_as_metadata_keys_with_true_values = true
90
- end
91
-
92
- VCR.configure do |c|
93
- c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
94
- c.hook_into :webmock
95
- c.configure_rspec_metadata!
96
- end
@@ -1,212 +0,0 @@
1
- require "logger"
2
-
3
- shared_examples "stormpath account" do
4
- let(:mock_account) do
5
- mock("account", href: "account_href").tap do |account|
6
- subject.class::STORMPATH_FIELDS.each do |field_name|
7
- account.stub!("#{field_name}").and_return(field_name.to_s)
8
- end
9
- end
10
- end
11
-
12
- context 'class methods' do
13
- let(:username) { 'test@example.com' }
14
- let(:email) { username }
15
- let(:password) { 'adsf1234' }
16
- let(:mock_user) { subject.class.new }
17
-
18
- describe '.authenticate' do
19
- before do
20
- Stormpath::Rails::Client.stub!(:authenticate_account).and_return(mock_account)
21
- subject.class.stub_chain(:where, :first).and_return(mock_user)
22
- end
23
-
24
- it 'returns an instance of the class into which the Account module was mixed in' do
25
- instance = subject.class.authenticate username, password
26
- instance.should be_a_kind_of(subject.class)
27
- end
28
- end
29
-
30
- describe '.send_password_reset_email' do
31
- before do
32
- Stormpath::Rails::Client.stub!(:send_password_reset_email).and_return(mock_account)
33
- subject.class.stub_chain(:where, :first).and_return(mock_user)
34
- end
35
-
36
- it 'returns an instance of the class into which the Account module was mixed in' do
37
- instance = subject.class.send_password_reset_email email
38
- instance.should be_a_kind_of(subject.class)
39
- end
40
- end
41
-
42
- describe '.verify_password_reset_token' do
43
- let(:token) { 'ASDF1324' }
44
-
45
- before do
46
- Stormpath::Rails::Client.stub!(:verify_password_reset_token).and_return(mock_account)
47
- subject.class.stub_chain(:where, :first).and_return(mock_user)
48
- end
49
-
50
- it 'returns an instance of the class into which the Account module was mixed in' do
51
- instance = subject.class.verify_password_reset_token token
52
- instance.should be_a_kind_of(subject.class)
53
- end
54
- end
55
-
56
- describe '.verify_account_email' do
57
- let(:token) { 'ASDF1324' }
58
-
59
- before do
60
- Stormpath::Rails::Client.stub!(:verify_account_email).and_return(mock_account)
61
- subject.class.stub_chain(:where, :first).and_return(mock_user)
62
- end
63
-
64
- it 'returns an instance of the class into which the Account module was mixed in' do
65
- instance = subject.class.verify_account_email token
66
- instance.should be_a_kind_of(subject.class)
67
- end
68
- end
69
- end
70
-
71
- before(:each) do
72
- Stormpath::Rails::Client.stub!(:find_account).and_return(mock_account)
73
- Stormpath::Rails.logger = Logger.new(STDERR)
74
- end
75
-
76
- context "after initialize" do
77
- context 'when no Stormpath URL property is set' do
78
- it "does NOT load data from stormpath on initialization" do
79
- Stormpath::Rails::Client.should_not_receive(:find_account)
80
- expect { subject }.to_not raise_error
81
- end
82
- end
83
-
84
- context 'when a Stormpath URL property is set' do
85
- let(:reloaded_subject) { subject.class.all.first }
86
-
87
- before(:each) do
88
- Stormpath::Rails::Client.stub!(:create_account!).and_return(mock_account)
89
- subject.save!
90
- end
91
-
92
- it "does NOT load data from stormpath on initialization" do
93
- Stormpath::Rails::Client.should_not_receive(:find_account)
94
- reloaded_subject.stormpath_url.should == subject.stormpath_url
95
- end
96
- end
97
- end
98
-
99
- context 'lazy load Stormpath fields' do
100
- let(:reloaded_subject) { subject.class.all.first }
101
-
102
- before(:each) do
103
- Stormpath::Rails::Client.stub!(:create_account!).and_return(mock_account)
104
- subject.save!
105
- end
106
-
107
- context 'when no Stormpath account field has ever been read' do
108
- (Stormpath::Rails::Account::STORMPATH_FIELDS - [:password]).each do |field_name|
109
- context "when the #{field_name} is read" do
110
- it "retrieves the account fields from Stormpath" do
111
- Stormpath::Rails::Client.should_receive(:find_account).with(subject.stormpath_url)
112
- reloaded_subject.send(field_name).should == mock_account.send(field_name)
113
- end
114
-
115
- it "logs a warning to standard output" do
116
- Stormpath::Rails::Client.stub!(:find_account).and_raise(Stormpath::Error.new(mock("error", message: "Find failed")))
117
- Stormpath::Rails.logger.should_receive(:warn).with("Error loading Stormpath account (Find failed)")
118
- reloaded_subject.send(field_name).should be_nil
119
- end
120
- end
121
- end
122
- end
123
-
124
- context 'when a Stormpath account field has previously been read' do
125
- before do
126
- Stormpath::Rails::Client.should_receive(:find_account).with(subject.stormpath_url).at_most(:once).and_return(mock_account)
127
- reloaded_subject.send :email
128
- end
129
-
130
- (Stormpath::Rails::Account::STORMPATH_FIELDS - [:password]).each do |field_name|
131
- context "when reading the #{field_name} attribute" do
132
- it 'does NOT retrieve the full account from Stormpath' do
133
- reloaded_subject.send(field_name).should == mock_account.send(field_name)
134
- end
135
- end
136
- end
137
- end
138
- end
139
-
140
- context "before create" do
141
- before(:each) do
142
- subject.email = 'foo@example.com'
143
- subject.given_name = 'Foo'
144
- subject.surname = 'Bar'
145
-
146
- Stormpath::Rails::Client.stub!(:create_account!).and_return mock_account
147
- end
148
-
149
- it "should create account at stormpath and assign stormpath_url" do
150
- subject.stormpath_url.should be_nil
151
- Stormpath::Rails::Client.should_receive(:create_account!).once.with(hash_including({
152
- :email => 'foo@example.com',
153
- :given_name => 'Foo',
154
- :surname => 'Bar'
155
- }))
156
- subject.save
157
- subject.stormpath_url.should == "account_href"
158
- end
159
-
160
- it "should add error if stormpath account creation failed" do
161
- Stormpath::Rails::Client.stub!(:create_account!).and_raise(Stormpath::Error.new(mock("error", message: "Create failed")))
162
- subject.save
163
- subject.errors[:base].should == ["Create failed"]
164
- end
165
- end
166
-
167
- context "before update" do
168
- before(:each) do
169
- Stormpath::Rails::Client.stub!(:create_account!).and_return(mock_account)
170
- subject.save!
171
- end
172
-
173
- it "skip silently stormpath update if no stormpath_url set" do
174
- subject.stormpath_url = nil
175
- expect { subject.save! }.to_not raise_error
176
- end
177
-
178
- it "should update account at stormpath" do
179
- subject.stormpath_account.should_receive(:save)
180
- subject.save!
181
- end
182
-
183
- it "should add error if stormpath account update failed" do
184
- subject.stormpath_account.stub!(:save).and_raise(Stormpath::Error.new(mock("error", message: "Update failed")))
185
- subject.save.should be_false
186
- subject.errors[:base].should == ["Update failed"]
187
- end
188
- end
189
-
190
- context "after destroy" do
191
- before(:each) do
192
- Stormpath::Rails::Client.stub!(:create_account!).and_return(mock_account)
193
- subject.save!
194
- end
195
-
196
- it "should silently skip stormpath delete if no stormpath_url set" do
197
- subject.stormpath_url = nil
198
- expect { subject.destroy }.to_not raise_error
199
- end
200
-
201
- it "should destroy account at stormpath" do
202
- subject.stormpath_account.should_receive(:delete)
203
- subject.destroy
204
- end
205
-
206
- it "should log warning if stormpath account update failed" do
207
- subject.stormpath_account.stub!(:delete).and_raise(Stormpath::Error.new(mock("error", message: "Delete failed")))
208
- Stormpath::Rails.logger.should_receive(:warn).with("Error destroying Stormpath account (Delete failed)")
209
- subject.destroy.should be_true
210
- end
211
- end
212
- end