stormpath-sdk 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +21 -0
  3. data/CHANGES.md +11 -0
  4. data/README.md +23 -25
  5. data/lib/stormpath-sdk.rb +11 -2
  6. data/lib/stormpath-sdk/api_key.rb +0 -1
  7. data/lib/stormpath-sdk/auth/basic_authenticator.rb +7 -7
  8. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +7 -11
  9. data/lib/stormpath-sdk/auth/create_factor.rb +1 -1
  10. data/lib/stormpath-sdk/auth/register_service_provider.rb +41 -0
  11. data/lib/stormpath-sdk/auth/username_password_request.rb +3 -5
  12. data/lib/stormpath-sdk/cache/cache.rb +3 -3
  13. data/lib/stormpath-sdk/cache/cache_entry.rb +2 -2
  14. data/lib/stormpath-sdk/cache/cache_manager.rb +3 -4
  15. data/lib/stormpath-sdk/cache/cache_stats.rb +1 -3
  16. data/lib/stormpath-sdk/cache/disabled_cache_store.rb +5 -8
  17. data/lib/stormpath-sdk/cache/memory_store.rb +1 -1
  18. data/lib/stormpath-sdk/cache/redis_store.rb +4 -4
  19. data/lib/stormpath-sdk/client.rb +35 -33
  20. data/lib/stormpath-sdk/data_store.rb +278 -257
  21. data/lib/stormpath-sdk/error.rb +18 -7
  22. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +76 -82
  23. data/lib/stormpath-sdk/http/http_client_request_executor.rb +10 -8
  24. data/lib/stormpath-sdk/http/response.rb +5 -7
  25. data/lib/stormpath-sdk/id_site/id_site_result.rb +5 -6
  26. data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +5 -9
  27. data/lib/stormpath-sdk/oauth/authenticator.rb +2 -2
  28. data/lib/stormpath-sdk/oauth/error.rb +4 -4
  29. data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +1 -1
  30. data/lib/stormpath-sdk/oauth/password_grant_request.rb +1 -1
  31. data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +2 -2
  32. data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +2 -2
  33. data/lib/stormpath-sdk/provider/account_access.rb +0 -2
  34. data/lib/stormpath-sdk/provider/account_result.rb +1 -2
  35. data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +6 -2
  36. data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +7 -3
  37. data/lib/stormpath-sdk/provider/github/github_provider.rb +6 -2
  38. data/lib/stormpath-sdk/provider/github/github_provider_data.rb +6 -2
  39. data/lib/stormpath-sdk/provider/google/google_provider.rb +7 -3
  40. data/lib/stormpath-sdk/provider/google/google_provider_data.rb +6 -2
  41. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +6 -2
  42. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +6 -2
  43. data/lib/stormpath-sdk/provider/provider.rb +8 -4
  44. data/lib/stormpath-sdk/provider/provider_data.rb +6 -2
  45. data/lib/stormpath-sdk/provider/saml/saml_provider.rb +10 -4
  46. data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +6 -3
  47. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +6 -2
  48. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +6 -2
  49. data/lib/stormpath-sdk/provider/twitter/twitter_provider.rb +6 -2
  50. data/lib/stormpath-sdk/provider/twitter/twitter_provider_data.rb +6 -2
  51. data/lib/stormpath-sdk/resource/account.rb +46 -40
  52. data/lib/stormpath-sdk/resource/account_link.rb +9 -5
  53. data/lib/stormpath-sdk/resource/account_linking_policy.rb +8 -4
  54. data/lib/stormpath-sdk/resource/account_membership.rb +1 -1
  55. data/lib/stormpath-sdk/resource/account_overrides.rb +20 -16
  56. data/lib/stormpath-sdk/resource/account_store.rb +15 -11
  57. data/lib/stormpath-sdk/resource/account_store_mapping.rb +14 -13
  58. data/lib/stormpath-sdk/resource/application.rb +147 -136
  59. data/lib/stormpath-sdk/resource/application_web_config.rb +11 -7
  60. data/lib/stormpath-sdk/resource/associations.rb +36 -43
  61. data/lib/stormpath-sdk/resource/attribute_statement_mapping_rules.rb +8 -0
  62. data/lib/stormpath-sdk/resource/base.rb +201 -200
  63. data/lib/stormpath-sdk/resource/challenge.rb +12 -8
  64. data/lib/stormpath-sdk/resource/collection.rb +77 -76
  65. data/lib/stormpath-sdk/resource/custom_data.rb +60 -61
  66. data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +28 -25
  67. data/lib/stormpath-sdk/resource/custom_data_storage.rb +18 -16
  68. data/lib/stormpath-sdk/resource/directory.rb +37 -60
  69. data/lib/stormpath-sdk/resource/email_verification_token.rb +7 -3
  70. data/lib/stormpath-sdk/resource/error.rb +8 -4
  71. data/lib/stormpath-sdk/resource/expansion.rb +22 -20
  72. data/lib/stormpath-sdk/resource/factor.rb +12 -8
  73. data/lib/stormpath-sdk/resource/field.rb +8 -4
  74. data/lib/stormpath-sdk/resource/group.rb +21 -16
  75. data/lib/stormpath-sdk/resource/group_membership.rb +7 -5
  76. data/lib/stormpath-sdk/resource/instance.rb +10 -6
  77. data/lib/stormpath-sdk/resource/linked_account.rb +7 -3
  78. data/lib/stormpath-sdk/resource/oauth_policy.rb +7 -3
  79. data/lib/stormpath-sdk/resource/organization.rb +14 -10
  80. data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +8 -4
  81. data/lib/stormpath-sdk/resource/password_reset_token.rb +9 -5
  82. data/lib/stormpath-sdk/resource/phone.rb +8 -4
  83. data/lib/stormpath-sdk/resource/registered_saml_service_provider.rb +8 -0
  84. data/lib/stormpath-sdk/resource/saml_identity_provider.rb +14 -0
  85. data/lib/stormpath-sdk/resource/saml_identity_provider_metadata.rb +9 -0
  86. data/lib/stormpath-sdk/resource/saml_policy.rb +10 -0
  87. data/lib/stormpath-sdk/resource/saml_service_provider.rb +7 -0
  88. data/lib/stormpath-sdk/{provider/saml/saml_mapping_rules.rb → resource/saml_service_provider_metadata.rb} +6 -5
  89. data/lib/stormpath-sdk/resource/saml_service_provider_registration.rb +11 -0
  90. data/lib/stormpath-sdk/resource/schema.rb +8 -4
  91. data/lib/stormpath-sdk/resource/tenant.rb +11 -8
  92. data/lib/stormpath-sdk/resource/user_info_mapping_rules.rb +7 -3
  93. data/lib/stormpath-sdk/resource/utils.rb +7 -10
  94. data/lib/stormpath-sdk/resource/verification_email.rb +7 -3
  95. data/lib/stormpath-sdk/resource/x_509_certificate.rb +7 -0
  96. data/lib/stormpath-sdk/util/assert.rb +1 -3
  97. data/lib/stormpath-sdk/version.rb +2 -2
  98. data/spec/auth/basic_authenticator_spec.rb +28 -24
  99. data/spec/auth/register_service_provider_spec.rb +68 -0
  100. data/spec/auth/sauthc1_signer_spec.rb +8 -4
  101. data/spec/cache/cache_entry_spec.rb +28 -29
  102. data/spec/cache/cache_spec.rb +9 -9
  103. data/spec/cache/cache_stats_spec.rb +1 -1
  104. data/spec/client_spec.rb +63 -63
  105. data/spec/data_store_spec.rb +23 -14
  106. data/spec/oauth/access_token_authentication_result_spec.rb +8 -2
  107. data/spec/provider/account_resolver_spec.rb +6 -4
  108. data/spec/provider/provider_spec.rb +6 -6
  109. data/spec/resource/account_creation_policy_spec.rb +1 -1
  110. data/spec/resource/account_link_spec.rb +7 -15
  111. data/spec/resource/account_spec.rb +17 -17
  112. data/spec/resource/account_store_mapping_spec.rb +16 -22
  113. data/spec/resource/account_store_spec.rb +3 -3
  114. data/spec/resource/application_spec.rb +324 -330
  115. data/spec/resource/base_spec.rb +7 -31
  116. data/spec/resource/collection_spec.rb +63 -114
  117. data/spec/resource/custom_data_spec.rb +1 -1
  118. data/spec/resource/directory_spec.rb +91 -87
  119. data/spec/resource/expansion_spec.rb +10 -10
  120. data/spec/resource/factor_spec.rb +1 -1
  121. data/spec/resource/group_spec.rb +1 -1
  122. data/spec/resource/linked_account_spec.rb +7 -7
  123. data/spec/resource/organization_spec.rb +12 -11
  124. data/spec/resource/phone_spec.rb +1 -1
  125. data/spec/resource/registered_saml_service_provider_spec.rb +35 -0
  126. data/spec/resource/saml_identity_provider_metadata_spec.rb +27 -0
  127. data/spec/resource/saml_identity_provider_spec.rb +94 -0
  128. data/spec/resource/saml_policy_spec.rb +27 -0
  129. data/spec/resource/saml_service_provider_registration_spec.rb +58 -0
  130. data/spec/resource/saml_service_provider_spec.rb +19 -0
  131. data/spec/resource/status_spec.rb +4 -3
  132. data/spec/resource/tenant_spec.rb +4 -6
  133. data/spec/spec_helper.rb +1 -1
  134. data/spec/support/custom_data_save_period.rb +4 -0
  135. data/spec/support/custom_data_storage_behavior.rb +7 -8
  136. data/spec/support/mocked_provider_accounts.rb +101 -101
  137. data/spec/support/mocked_saml_responses.rb +130 -0
  138. data/spec/support/resource_factory.rb +4 -4
  139. data/spec/support/resource_helpers.rb +10 -4
  140. data/spec/support/resource_matchers.rb +4 -4
  141. data/spec/support/test_request_executor.rb +2 -2
  142. metadata +21 -8
  143. data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -19
  144. data/spec/fixtures/response/create_saml_directory.json +0 -26
  145. data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -12
  146. data/spec/fixtures/response/get_saml_directory_provider.json +0 -16
  147. data/spec/fixtures/response/get_saml_directory_provider_metadata.json +0 -12
@@ -31,7 +31,10 @@ describe Stormpath::Oauth::AccessTokenAuthenticationResult, :vcr do
31
31
 
32
32
  expect(account.access_tokens.count).to eq(1)
33
33
 
34
- jti = JWT.decode(jwt_authentication_result.access_token, test_api_client.data_store.api_key.secret).first['jti']
34
+ jti = JWT.decode(
35
+ jwt_authentication_result.access_token,
36
+ test_api_client.data_store.api_key.secret
37
+ ).first['jti']
35
38
 
36
39
  fetched_access_token = test_api_client.access_tokens.get(jti)
37
40
 
@@ -49,7 +52,10 @@ describe Stormpath::Oauth::AccessTokenAuthenticationResult, :vcr do
49
52
 
50
53
  expect(account.refresh_tokens.count).to eq(1)
51
54
 
52
- jti = JWT.decode(jwt_authentication_result.refresh_token, test_api_client.data_store.api_key.secret).first['jti']
55
+ jti = JWT.decode(
56
+ jwt_authentication_result.refresh_token,
57
+ test_api_client.data_store.api_key.secret
58
+ ).first['jti']
53
59
 
54
60
  fetched_refresh_token = test_api_client.refresh_tokens.get(jti)
55
61
 
@@ -30,10 +30,12 @@ describe 'ProviderAccountResolver' do
30
30
 
31
31
  context 'with account store as a parameter' do
32
32
  let(:account_request) do
33
- Stormpath::Provider::AccountRequest.new(:facebook,
34
- :access_token,
35
- 'some-token',
36
- account_store: { name_key: 'app1' })
33
+ Stormpath::Provider::AccountRequest.new(
34
+ :facebook,
35
+ :access_token,
36
+ 'some-token',
37
+ account_store: { name_key: 'app1' }
38
+ )
37
39
  end
38
40
 
39
41
  it 'a ProviderResult is returned' do
@@ -121,7 +121,7 @@ describe Stormpath::Provider::Provider, :vcr do
121
121
  end
122
122
 
123
123
  describe 'create stormpath directory with empty provider credentials' do
124
- let(:name) { 'Stormpath' }
124
+ let(:name) { "ruby-sdk-stormpath-#{random_number}" }
125
125
  let(:description) { 'Directory for testing Stormpath directories.' }
126
126
  let(:provider_id) { 'stormpath' }
127
127
 
@@ -139,7 +139,7 @@ describe Stormpath::Provider::Provider, :vcr do
139
139
  end
140
140
 
141
141
  describe 'create facebook directory with provider credentials' do
142
- let(:name) { 'Facebook' }
142
+ let(:name) { "ruby-sdk-facebook-#{random_number}" }
143
143
  let(:description) { 'Directory for testing Facebook directories.' }
144
144
 
145
145
  let(:provider_id) { 'facebook' }
@@ -154,7 +154,7 @@ describe Stormpath::Provider::Provider, :vcr do
154
154
  end
155
155
 
156
156
  describe 'create google directory with provider credentials' do
157
- let(:name) { 'Google' }
157
+ let(:name) { "ruby-sdk-google-#{random_number}" }
158
158
  let(:description) { 'Directory for testing Google directories.' }
159
159
 
160
160
  let(:provider_id) { 'google' }
@@ -181,7 +181,7 @@ describe Stormpath::Provider::Provider, :vcr do
181
181
  end
182
182
 
183
183
  describe 'create linkedin directory with provider credentials' do
184
- let(:name) { 'Linkedin' }
184
+ let(:name) { "ruby-sdk-linkedin-#{random_number}" }
185
185
  let(:description) { 'Directory for testing Linkedin directories.' }
186
186
 
187
187
  let(:provider_id) { 'linkedin' }
@@ -196,7 +196,7 @@ describe Stormpath::Provider::Provider, :vcr do
196
196
  end
197
197
 
198
198
  describe 'create github directory with provider credentials' do
199
- let(:name) { 'Github' }
199
+ let(:name) { "ruby-sdk-github-#{random_number}" }
200
200
  let(:description) { 'Directory for testing Github directories.' }
201
201
 
202
202
  let(:provider_id) { 'github' }
@@ -211,7 +211,7 @@ describe Stormpath::Provider::Provider, :vcr do
211
211
  end
212
212
 
213
213
  describe 'create twitter directory with provider credentials' do
214
- let(:name) { 'Twitter' }
214
+ let(:name) { "ruby-sdk-twitter-#{random_number}" }
215
215
  let(:description) { 'Directory for testing Twitter directories.' }
216
216
 
217
217
  let(:provider_id) { 'twitter' }
@@ -99,7 +99,7 @@ describe Stormpath::Resource::AccountCreationPolicy, :vcr do
99
99
 
100
100
  context 'when domain not string' do
101
101
  it 'should raise error' do
102
- blacklisted = ['*spam.com', 12345]
102
+ blacklisted = ['*spam.com', 12_345]
103
103
  account_creation_policy.email_domain_blacklist = blacklisted
104
104
  expect do
105
105
  account_creation_policy.save
@@ -1,27 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::AccountLink, :vcr do
4
- let(:application) do
5
- test_api_client.applications.create(name: 'ruby sdk app', description: 'ruby sdk desc')
6
- end
7
- let(:directory1) do
8
- test_api_client.directories.create(name: 'ruby sdk dir 1')
9
- end
10
- let(:directory2) do
11
- test_api_client.directories.create(name: 'ruby sdk dir 2')
12
- end
4
+ let(:application) { test_api_client.applications.create(application_attrs) }
5
+ let(:directory1) { test_api_client.directories.create(directory_attrs) }
6
+ let(:directory2) { test_api_client.directories.create(directory_attrs) }
7
+ let(:username1) { "jekyll-#{random_number}" }
8
+ let(:username2) { "hyde-#{random_number}" }
13
9
 
14
10
  before do
15
11
  map_account_store(application, directory1, 1, true, false)
16
12
  map_account_store(application, directory2, 2, false, false)
17
13
  end
18
14
 
19
- let!(:account1) do
20
- directory1.accounts.create(account_attrs(email: 'jekyll', username: 'jekyll'))
21
- end
22
- let!(:account2) do
23
- directory2.accounts.create(account_attrs(email: 'hyde', username: 'hyde'))
24
- end
15
+ let!(:account1) { directory1.accounts.create(account_attrs(email: username1, username: username1)) }
16
+ let!(:account2) { directory2.accounts.create(account_attrs(email: username2, username: username2)) }
25
17
 
26
18
  let!(:account_link) do
27
19
  test_api_client.account_links.create(
@@ -4,10 +4,14 @@ describe Stormpath::Resource::Account, :vcr do
4
4
  describe 'instances should respond to attribute property methods' do
5
5
  let(:directory) { test_api_client.directories.create(directory_attrs) }
6
6
  let(:account) do
7
- directory.accounts.create(account_attrs(email: 'ruby',
8
- given_name: 'ruby',
9
- surname: 'ruby',
10
- middle_name: 'ruby'))
7
+ directory.accounts.create(
8
+ account_attrs(
9
+ email: 'ruby',
10
+ given_name: 'ruby',
11
+ surname: 'ruby',
12
+ middle_name: 'ruby'
13
+ )
14
+ )
11
15
  end
12
16
 
13
17
  after do
@@ -120,9 +124,7 @@ describe Stormpath::Resource::Account, :vcr do
120
124
 
121
125
  it 'adds and removes the group from the account' do
122
126
  expect(account.groups).to include(group)
123
-
124
127
  account.remove_group group
125
-
126
128
  expect(account.groups).not_to include(group)
127
129
  end
128
130
  end
@@ -237,11 +239,13 @@ describe Stormpath::Resource::Account, :vcr do
237
239
  end
238
240
 
239
241
  let(:factor) do
240
- account.create_factor(:sms,
241
- phone: { number: '+12025550173',
242
- name: 'Rspec test phone',
243
- description: 'This is a testing phone number' },
244
- challenge: { message: 'Enter code please: ' })
242
+ account.create_factor(
243
+ :sms,
244
+ phone: { number: '+12025550173',
245
+ name: 'Rspec test phone',
246
+ description: 'This is a testing phone number' },
247
+ challenge: { message: 'Enter code please: ' }
248
+ )
245
249
  end
246
250
 
247
251
  it 'factor should be created' do
@@ -250,9 +254,7 @@ describe Stormpath::Resource::Account, :vcr do
250
254
  end
251
255
 
252
256
  context 'type google-authenticator' do
253
- let(:factor) do
254
- account.create_factor(:google_authenticator, options)
255
- end
257
+ let(:factor) { account.create_factor(:google_authenticator, options) }
256
258
 
257
259
  context 'with account_name' do
258
260
  let(:account_name) { "marko.cilimkovic#{default_domain}" }
@@ -295,9 +297,7 @@ describe Stormpath::Resource::Account, :vcr do
295
297
  end
296
298
 
297
299
  context 'with bad type set' do
298
- let(:factor) do
299
- account.create_factor(:invalid_type)
300
- end
300
+ let(:factor) { account.create_factor(:invalid_type) }
301
301
 
302
302
  it 'should raise error' do
303
303
  expect { factor }.to raise_error(Stormpath::Error)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::AccountStoreMapping, :vcr do
4
- let(:directory_name) { 'rubysdktestdir' }
4
+ let(:directory_name) { "rubysdktestdir-#{random_number}" }
5
5
  let(:directory) { test_api_client.directories.create(directory_attrs(name: directory_name)) }
6
6
  let(:application) { test_api_client.applications.create(application_attrs) }
7
7
 
@@ -10,13 +10,13 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
10
10
  directory.delete if directory
11
11
  end
12
12
 
13
- describe "instances" do
13
+ describe 'instances' do
14
14
  let!(:account_store_mapping) do
15
15
  map_account_store(application, directory, 0, true, false)
16
16
  end
17
17
 
18
18
  it do
19
- [:list_index, :is_default_account_store, :is_default_group_store, :default_account_store, :default_group_store ].each do |prop_accessor|
19
+ [:list_index, :is_default_account_store, :is_default_group_store, :default_account_store, :default_group_store].each do |prop_accessor|
20
20
  expect(account_store_mapping).to respond_to(prop_accessor)
21
21
  expect(account_store_mapping).to respond_to("#{prop_accessor}=")
22
22
  end
@@ -25,11 +25,11 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
25
25
  expect(account_store_mapping).to respond_to(prop_getter)
26
26
  end
27
27
 
28
- expect(account_store_mapping.list_index).to be_a Fixnum
28
+ expect(account_store_mapping.list_index).to be_a Integer
29
29
 
30
30
  [:default_account_store, :default_group_store].each do |default_store_method|
31
31
  [default_store_method, "is_#{default_store_method}", "#{default_store_method}?"].each do |specific_store_method|
32
- expect(account_store_mapping.send specific_store_method).to be_boolean
32
+ expect(account_store_mapping.send(specific_store_method)).to be_boolean
33
33
  end
34
34
  end
35
35
 
@@ -38,9 +38,8 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
38
38
  end
39
39
  end
40
40
 
41
-
42
41
  describe 'given an application' do
43
- let(:reloaded_application) { test_api_client.applications.get application.href }
42
+ let(:reloaded_application) { test_api_client.applications.get(application.href) }
44
43
 
45
44
  context 'on application creation' do
46
45
  it 'there should be no default account/group store' do
@@ -72,7 +71,7 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
72
71
  end
73
72
 
74
73
  context 'remove the added default account/group store mapping' do
75
- let(:re_reloaded_application) { test_api_client.applications.get application.href }
74
+ let(:re_reloaded_application) { test_api_client.applications.get(application.href) }
76
75
 
77
76
  it 'there should not be a default account store mapping in the beginning and the end' do
78
77
  expect(application.default_account_store_mapping).to eq(nil)
@@ -104,10 +103,9 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
104
103
  expect(re_reloaded_application.default_group_store_mapping).to eq(nil)
105
104
  end
106
105
  end
107
-
108
106
  end
109
107
 
110
- describe "given a directory" do
108
+ describe 'given a directory' do
111
109
  before { map_account_store(application, directory, 0, false, false) }
112
110
 
113
111
  it 'add an account store mapping' do
@@ -115,13 +113,11 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
115
113
  end
116
114
  end
117
115
 
118
- describe "given a group" do
116
+ describe 'given a group' do
119
117
  let(:group) { directory.groups.create(group_attrs) }
120
- let(:reloaded_application) { test_api_client.applications.get application.href }
118
+ let(:reloaded_application) { test_api_client.applications.get(application.href) }
121
119
 
122
- after do
123
- group.delete if group
124
- end
120
+ after { group.delete if group }
125
121
 
126
122
  context 'add an account store mapping' do
127
123
  it 'being a default account store' do
@@ -136,26 +132,24 @@ describe Stormpath::Resource::AccountStoreMapping, :vcr do
136
132
  map_account_store(application, group, 0, false, true)
137
133
  end.to raise_error Stormpath::Error
138
134
  end
139
-
140
135
  end
141
-
142
136
  end
143
137
 
144
- describe "update attribute default_group_store" do
138
+ describe 'update attribute default_group_store' do
145
139
  let(:account_store_mapping) { map_account_store(application, directory, 0, true, false) }
146
- let(:reloaded_mapping){ application.account_store_mappings.get account_store_mapping.href }
140
+ let(:reloaded_mapping) { application.account_store_mappings.get(account_store_mapping.href) }
147
141
 
148
142
  it 'should go from true to false' do
149
143
  expect(account_store_mapping.is_default_account_store).to eq(true)
150
- account_store_mapping.default_account_store= false
144
+ account_store_mapping.default_account_store = false
151
145
  account_store_mapping.save
152
146
  expect(reloaded_mapping.is_default_account_store).to eq(false)
153
147
  end
154
148
  end
155
149
 
156
- describe "given a mapping" do
150
+ describe 'given a mapping' do
157
151
  let!(:account_store_mapping) { map_account_store(application, directory, 0, true, false) }
158
- let(:reloaded_application) { test_api_client.applications.get application.href}
152
+ let(:reloaded_application) { test_api_client.applications.get(application.href) }
159
153
 
160
154
  it 'function delete should destroy it' do
161
155
  expect(application.account_store_mappings.count).to eq(1)
@@ -15,7 +15,7 @@ describe Stormpath::Resource::AccountStore, :vcr do
15
15
 
16
16
  describe 'given an account_store_mapping and a directory' do
17
17
  let!(:account_store_mapping) { map_account_store(application, directory, 0, true, true) }
18
- let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
18
+ let(:reloaded_mapping) { application.account_store_mappings.get(account_store_mapping.href) }
19
19
 
20
20
  it 'should return a directory' do
21
21
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Directory)
@@ -25,7 +25,7 @@ describe Stormpath::Resource::AccountStore, :vcr do
25
25
 
26
26
  describe 'given an account_store_mapping and a group' do
27
27
  let!(:account_store_mapping) { map_account_store(application, group, 0, true, false) }
28
- let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
28
+ let(:reloaded_mapping) { application.account_store_mappings.get(account_store_mapping.href) }
29
29
 
30
30
  it 'should return a group' do
31
31
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Group)
@@ -35,7 +35,7 @@ describe Stormpath::Resource::AccountStore, :vcr do
35
35
 
36
36
  describe 'given an account_store_mapping and an organization' do
37
37
  let!(:account_store_mapping) { map_account_store(application, organization, 0, true, false) }
38
- let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
38
+ let(:reloaded_mapping) { application.account_store_mappings.get(account_store_mapping.href) }
39
39
 
40
40
  it 'should return an organization' do
41
41
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Organization)
@@ -3,12 +3,10 @@ include UUIDTools
3
3
 
4
4
  describe Stormpath::Resource::Application, :vcr do
5
5
  let(:app) { test_api_client.applications.create(application_attrs) }
6
- let(:application) { test_api_client.applications.get app.href }
6
+ let(:application) { test_api_client.applications.get(app.href) }
7
7
  let(:directory) { test_api_client.directories.create(directory_attrs) }
8
8
 
9
- before do
10
- map_account_store(app, directory, 1, true, true)
11
- end
9
+ before { map_account_store(app, directory, 1, true, true) }
12
10
 
13
11
  after do
14
12
  application.delete if application
@@ -16,24 +14,23 @@ describe Stormpath::Resource::Application, :vcr do
16
14
  end
17
15
 
18
16
  it 'instances should respond to attribute property methods' do
19
-
20
17
  expect(application).to be_a Stormpath::Resource::Application
21
18
 
22
19
  [:name, :description, :status].each do |property_accessor|
23
20
  expect(application).to respond_to(property_accessor)
24
21
  expect(application).to respond_to("#{property_accessor}=")
25
- expect(application.send property_accessor).to be_a String
22
+ expect(application.send(property_accessor)).to be_a String
26
23
  end
27
24
 
28
25
  [:authorized_callback_uris, :authorized_origin_uris].each do |property_accessor|
29
26
  expect(application).to respond_to(property_accessor)
30
27
  expect(application).to respond_to("#{property_accessor}=")
31
- expect(application.send property_accessor).to be_a Array
28
+ expect(application.send(property_accessor)).to be_a Array
32
29
  end
33
30
 
34
31
  [:created_at, :modified_at].each do |property_getter|
35
32
  expect(application).to respond_to(property_getter)
36
- expect(application.send property_getter).to be_a String
33
+ expect(application.send(property_getter)).to be_a String
37
34
  end
38
35
 
39
36
  expect(application.tenant).to be_a Stormpath::Resource::Tenant
@@ -47,6 +44,7 @@ describe Stormpath::Resource::Application, :vcr do
47
44
  expect(application.verification_emails).to be_a Stormpath::Resource::Collection
48
45
  expect(application.account_store_mappings).to be_a Stormpath::Resource::Collection
49
46
  expect(application.account_linking_policy).to be_a Stormpath::Resource::AccountLinkingPolicy
47
+ expect(application.saml_policy).to be_a Stormpath::Resource::SamlPolicy
50
48
  end
51
49
 
52
50
  describe '.load' do
@@ -72,13 +70,10 @@ describe Stormpath::Resource::Application, :vcr do
72
70
  end
73
71
 
74
72
  describe 'application_associations' do
75
-
76
73
  context '#accounts' do
77
74
  let(:account) { application.accounts.create(account_attrs) }
78
75
 
79
- after do
80
- account.delete if account
81
- end
76
+ after { account.delete if account }
82
77
 
83
78
  it 'should be able to create an account' do
84
79
  expect(application.accounts).to include(account)
@@ -86,7 +81,7 @@ describe Stormpath::Resource::Application, :vcr do
86
81
  end
87
82
 
88
83
  it 'should be able to create and fetch the account' do
89
- expect(application.accounts.get account.href).to be
84
+ expect(application.accounts.get(account.href)).to be
90
85
  end
91
86
  end
92
87
 
@@ -101,12 +96,13 @@ describe Stormpath::Resource::Application, :vcr do
101
96
  end
102
97
 
103
98
  it 'should be able to create and fetch a group' do
104
- expect(application.groups.get group.href).to be
99
+ expect(application.groups.get(group.href)).to be
105
100
  end
106
101
  end
107
102
 
108
103
  context '#web_config' do
109
104
  let(:web_config) { application.web_config }
105
+ let(:dns_label) { "ruby-dns-label-#{random_number}" }
110
106
 
111
107
  it 'should have web_config' do
112
108
  expect(application.web_config).to be_a Stormpath::Resource::ApplicationWebConfig
@@ -123,15 +119,15 @@ describe Stormpath::Resource::Application, :vcr do
123
119
  end
124
120
 
125
121
  it 'changing dns_label should affect domain_name' do
126
- web_config.dns_label = 'stormtrooper'
122
+ web_config.dns_label = dns_label
127
123
  web_config.save
128
- expect(application.web_config.domain_name).to eq 'stormtrooper.apps.stormpath.io'
124
+ expect(application.web_config.domain_name).to eq "#{dns_label}.apps.stormpath.io"
129
125
  end
130
126
  end
131
127
  end
132
128
 
133
129
  describe 'edit authorized_callback_uris' do
134
- let(:authorized_callback_uris) { ["https://myapplication.com/whatever/callback", "https://myapplication.com/whatever/callback2"] }
130
+ let(:authorized_callback_uris) { ['https://myapplication.com/whatever/callback', 'https://myapplication.com/whatever/callback2'] }
135
131
 
136
132
  it 'changes authorized callback uris on application' do
137
133
  application.authorized_callback_uris = authorized_callback_uris
@@ -178,24 +174,17 @@ describe Stormpath::Resource::Application, :vcr do
178
174
  end
179
175
 
180
176
  describe '#authenticate_account' do
181
- let(:account) do
182
- directory.accounts.create account_attrs(password: 'P@$$w0rd')
183
- end
184
-
177
+ let(:account) { directory.accounts.create(account_attrs(password: 'P@$$w0rd')) }
185
178
  let(:login_request) do
186
- Stormpath::Authentication::UsernamePasswordRequest.new account.username, password
179
+ Stormpath::Authentication::UsernamePasswordRequest.new(account.username, password)
187
180
  end
188
181
 
189
- let(:authentication_result) do
190
- application.authenticate_account login_request
191
- end
182
+ let(:authentication_result) { application.authenticate_account login_request }
192
183
 
193
- after do
194
- account.delete if account
195
- end
184
+ after { account.delete if account }
196
185
 
197
186
  context 'given a valid username and password' do
198
- let(:password) {'P@$$w0rd' }
187
+ let(:password) { 'P@$$w0rd' }
199
188
 
200
189
  it 'returns an authentication result' do
201
190
  expect(authentication_result).to be
@@ -215,19 +204,20 @@ describe Stormpath::Resource::Application, :vcr do
215
204
  end
216
205
 
217
206
  describe '#authenticate_account_with_an_account_store_specified' do
218
- let(:password) {'P@$$w0rd' }
219
-
207
+ let(:password) { 'P@$$w0rd' }
220
208
  let(:authentication_result) { application.authenticate_account login_request }
221
209
 
222
- after do
223
- account.delete if account
224
- end
210
+ after { account.delete if account }
225
211
 
226
212
  context 'given a proper directory' do
227
- let(:account) { directory.accounts.create account_attrs(password: 'P@$$w0rd') }
213
+ let(:account) { directory.accounts.create(account_attrs(password: 'P@$$w0rd')) }
228
214
 
229
215
  let(:login_request) do
230
- Stormpath::Authentication::UsernamePasswordRequest.new account.username, password, account_store: directory
216
+ Stormpath::Authentication::UsernamePasswordRequest.new(
217
+ account.username,
218
+ password,
219
+ account_store: directory
220
+ )
231
221
  end
232
222
 
233
223
  it 'should return an authentication result' do
@@ -240,14 +230,16 @@ describe Stormpath::Resource::Application, :vcr do
240
230
 
241
231
  context 'given a wrong directory' do
242
232
  let(:new_directory) { test_api_client.directories.create(directory_attrs) }
243
- let(:account) { new_directory.accounts.create account_attrs(password: 'P@$$w0rd') }
233
+ let(:account) { new_directory.accounts.create(account_attrs(password: 'P@$$w0rd')) }
244
234
  let(:login_request) do
245
- Stormpath::Authentication::UsernamePasswordRequest.new account.username, password, account_store: directory
235
+ Stormpath::Authentication::UsernamePasswordRequest.new(
236
+ account.username,
237
+ password,
238
+ account_store: directory
239
+ )
246
240
  end
247
241
 
248
- after do
249
- new_directory.delete if new_directory
250
- end
242
+ after { new_directory.delete if new_directory }
251
243
 
252
244
  it 'raises an error' do
253
245
  expect { authentication_result }.to raise_error Stormpath::Error
@@ -255,21 +247,19 @@ describe Stormpath::Resource::Application, :vcr do
255
247
  end
256
248
 
257
249
  context 'given a group' do
258
- let(:group) {directory.groups.create(group_attrs) }
259
-
260
- let(:account) { directory.accounts.create account_attrs(password: 'P@$$w0rd') }
261
-
250
+ let(:group) { directory.groups.create(group_attrs) }
251
+ let(:account) { directory.accounts.create(account_attrs(password: 'P@$$w0rd')) }
262
252
  let(:login_request) do
263
- Stormpath::Authentication::UsernamePasswordRequest.new account.username, password, account_store: group
253
+ Stormpath::Authentication::UsernamePasswordRequest.new(
254
+ account.username,
255
+ password,
256
+ account_store: group
257
+ )
264
258
  end
265
259
 
266
- before do
267
- map_account_store(application, group, 0, true, false)
268
- end
260
+ before { map_account_store(application, group, 0, true, false) }
269
261
 
270
- after do
271
- group.delete if group
272
- end
262
+ after { group.delete if group }
273
263
 
274
264
  it 'and assigning the account to it, should return a authentication result' do
275
265
  group.add_account account
@@ -283,16 +273,13 @@ describe Stormpath::Resource::Application, :vcr do
283
273
  expect { authentication_result }.to raise_error Stormpath::Error
284
274
  end
285
275
  end
286
-
287
276
  end
288
277
 
289
278
  describe '#send_password_reset_email' do
290
279
  context 'given an email' do
291
280
  context 'of an existing account on the application' do
292
- let(:account) { directory.accounts.create account_attrs }
293
-
281
+ let(:account) { directory.accounts.create(account_attrs) }
294
282
  let(:sent_to_account) { application.send_password_reset_email account.email }
295
-
296
283
  after { account.delete if account }
297
284
 
298
285
  it 'sends a password reset request of the account' do
@@ -303,7 +290,7 @@ describe Stormpath::Resource::Application, :vcr do
303
290
  end
304
291
 
305
292
  context 'of an existing account not mapped to the application' do
306
- let(:account) { other_directory.accounts.create account_attrs }
293
+ let(:account) { other_directory.accounts.create(account_attrs) }
307
294
  let(:other_directory) { test_api_client.directories.create(directory_attrs) }
308
295
 
309
296
  after do
@@ -321,14 +308,13 @@ describe Stormpath::Resource::Application, :vcr do
321
308
  context 'of a non exisitng account' do
322
309
  it 'raises an exception' do
323
310
  expect do
324
- application.send_password_reset_email "test@example.com"
311
+ application.send_password_reset_email 'test@example.com'
325
312
  end.to raise_error Stormpath::Error
326
313
  end
327
314
  end
328
315
 
329
316
  context 'of an existing account on the application with an account store href' do
330
- let(:account) { directory.accounts.create account_attrs }
331
-
317
+ let(:account) { directory.accounts.create(account_attrs) }
332
318
  let(:sent_to_account) do
333
319
  application.send_password_reset_email(account.email, account_store: { href: directory.href })
334
320
  end
@@ -343,8 +329,7 @@ describe Stormpath::Resource::Application, :vcr do
343
329
  end
344
330
 
345
331
  context 'of an existing account on the application with an account store resource object' do
346
- let(:account) { directory.accounts.create account_attrs }
347
-
332
+ let(:account) { directory.accounts.create(account_attrs) }
348
333
  let(:sent_to_account) do
349
334
  application.send_password_reset_email(account.email, account_store: directory)
350
335
  end
@@ -359,7 +344,7 @@ describe Stormpath::Resource::Application, :vcr do
359
344
  end
360
345
 
361
346
  context 'of an existing account not mapped to the application with an account store href' do
362
- let(:account) { directory.accounts.create account_attrs }
347
+ let(:account) { directory.accounts.create(account_attrs) }
363
348
  let(:other_directory) { test_api_client.directories.create(directory_attrs) }
364
349
 
365
350
  after do
@@ -375,36 +360,21 @@ describe Stormpath::Resource::Application, :vcr do
375
360
  end
376
361
 
377
362
  context 'of an existing account on the application with a non existant account store organization namekey' do
378
- let(:account) { directory.accounts.create account_attrs }
379
-
380
- after do
381
- account.delete
382
- end
363
+ let(:account) { directory.accounts.create(account_attrs) }
364
+ after { account.delete }
383
365
 
384
366
  it 'sends a password reset request of the account' do
385
367
  expect do
386
- application.send_password_reset_email(account.email, account_store: { name_key: "NoKey" })
368
+ application.send_password_reset_email(account.email, account_store: { name_key: 'NoKey' })
387
369
  end.to raise_error Stormpath::Error
388
370
  end
389
371
  end
390
372
 
391
373
  context 'of an existing account on the application with a right account store organization namekey' do
392
- let(:account) { account_directory.accounts.create account_attrs }
374
+ let(:account) { account_directory.accounts.create(account_attrs) }
393
375
  let(:account_directory) { test_api_client.directories.create(directory_attrs) }
394
-
395
- let(:reloaded_account_directory) do
396
- test_api_client.directories.get(account_directory.href)
397
- end
398
-
399
- let(:organization_name_key) { 'ruby-test-org-name-key' }
400
-
401
- let(:organization) do
402
- test_api_client.organizations.create(
403
- name: "ruby_test_organization_name",
404
- name_key: organization_name_key
405
- )
406
- end
407
-
376
+ let(:reloaded_account_directory) { test_api_client.directories.get(account_directory.href) }
377
+ let(:organization) { test_api_client.organizations.create(organization_attrs) }
408
378
  let(:sent_to_account) do
409
379
  application.send_password_reset_email(account.email, account_store: { name_key: organization.name_key })
410
380
  end
@@ -428,11 +398,9 @@ describe Stormpath::Resource::Application, :vcr do
428
398
  end
429
399
 
430
400
  context 'of an existing account on the application with a right account store organization resource object' do
431
- let(:account) { account_directory.accounts.create account_attrs }
401
+ let(:account) { account_directory.accounts.create(account_attrs) }
432
402
  let(:account_directory) { test_api_client.directories.create(directory_attrs) }
433
- let(:reloaded_account_directory) do
434
- test_api_client.directories.get(account_directory.href)
435
- end
403
+ let(:reloaded_account_directory) { test_api_client.directories.get(account_directory.href) }
436
404
  let(:organization) { test_api_client.organizations.create(organization_attrs) }
437
405
  let(:sent_to_account) do
438
406
  application.send_password_reset_email(account.email, account_store: organization)
@@ -457,11 +425,9 @@ describe Stormpath::Resource::Application, :vcr do
457
425
  end
458
426
 
459
427
  context 'of an existing account on the application with a wrong account store organization namekey' do
460
- let(:account) { account_directory.accounts.create account_attrs }
428
+ let(:account) { account_directory.accounts.create(account_attrs) }
461
429
  let(:account_directory) { test_api_client.directories.create(directory_attrs) }
462
- let(:reloaded_account_directory) do
463
- test_api_client.directories.get(account_directory.href)
464
- end
430
+ let(:reloaded_account_directory) { test_api_client.directories.get(account_directory.href) }
465
431
  let(:organization) { test_api_client.organizations.create(organization_attrs) }
466
432
  let(:other_organization) { test_api_client.organizations.create(organization_attrs) }
467
433
 
@@ -514,12 +480,8 @@ describe Stormpath::Resource::Application, :vcr do
514
480
 
515
481
  context 'valid credentials' do
516
482
  let(:username_password_request) do
517
- Stormpath::Authentication::UsernamePasswordRequest.new(
518
- account.email,
519
- "P@$$w0rd"
520
- )
483
+ Stormpath::Authentication::UsernamePasswordRequest.new(account.email, 'P@$$w0rd')
521
484
  end
522
-
523
485
  let(:auth_request) { application.authenticate_account(username_password_request) }
524
486
 
525
487
  it 'returns login attempt response' do
@@ -532,11 +494,7 @@ describe Stormpath::Resource::Application, :vcr do
532
494
  end
533
495
 
534
496
  context 'with organization as account store option' do
535
- let(:organization) do
536
- test_api_client.organizations.create(name: 'test_organization',
537
- name_key: 'testorganization')
538
- end
539
-
497
+ let(:organization) { test_api_client.organizations.create(organization_attrs) }
540
498
  let(:auth_request) { application.authenticate_account(username_password_request) }
541
499
 
542
500
  before do
@@ -544,15 +502,13 @@ describe Stormpath::Resource::Application, :vcr do
544
502
  map_account_store(application, organization, 0, true, false)
545
503
  end
546
504
 
547
- after do
548
- organization.delete if organization
549
- end
505
+ after { organization.delete if organization }
550
506
 
551
507
  describe 'when sending the proper organization' do
552
508
  describe 'using an organization name_key' do
553
509
  let(:username_password_request) do
554
510
  Stormpath::Authentication::UsernamePasswordRequest.new(
555
- account.email, "P@$$w0rd",
511
+ account.email, 'P@$$w0rd',
556
512
  account_store: { name_key: organization.name_key }
557
513
  )
558
514
  end
@@ -569,7 +525,7 @@ describe Stormpath::Resource::Application, :vcr do
569
525
  describe 'using an organization href' do
570
526
  let(:username_password_request) do
571
527
  Stormpath::Authentication::UsernamePasswordRequest.new(
572
- account.email, "P@$$w0rd",
528
+ account.email, 'P@$$w0rd',
573
529
  account_store: { href: organization.href }
574
530
  )
575
531
  end
@@ -586,7 +542,7 @@ describe Stormpath::Resource::Application, :vcr do
586
542
  describe 'using an organization object' do
587
543
  let(:username_password_request) do
588
544
  Stormpath::Authentication::UsernamePasswordRequest.new(
589
- account.email, "P@$$w0rd",
545
+ account.email, 'P@$$w0rd',
590
546
  account_store: organization
591
547
  )
592
548
  end
@@ -605,7 +561,7 @@ describe Stormpath::Resource::Application, :vcr do
605
561
  describe 'using an organization name_key' do
606
562
  let(:username_password_request) do
607
563
  Stormpath::Authentication::UsernamePasswordRequest.new(
608
- account.email, "P@$$w0rd",
564
+ account.email, 'P@$$w0rd',
609
565
  account_store: { name_key: 'wrong-name-key' }
610
566
  )
611
567
  end
@@ -618,55 +574,47 @@ describe Stormpath::Resource::Application, :vcr do
618
574
  describe 'using an organization href' do
619
575
  let(:username_password_request) do
620
576
  Stormpath::Authentication::UsernamePasswordRequest.new(
621
- account.email, "P@$$w0rd",
577
+ account.email, 'P@$$w0rd',
622
578
  account_store: { href: other_organization.href }
623
579
  )
624
580
  end
625
-
626
- let(:other_organization) do
627
- test_api_client.organizations.create name: 'other_organization',
628
- name_key: "other-organization"
629
- end
581
+ let(:other_organization) { test_api_client.organizations.create(organization_attrs) }
630
582
 
631
583
  it 'raises an error' do
632
584
  expect { auth_request }.to raise_error(Stormpath::Error)
633
585
  end
586
+
587
+ after { other_organization.delete }
634
588
  end
635
589
 
636
590
  describe 'using an organization object' do
637
591
  let(:username_password_request) do
638
592
  Stormpath::Authentication::UsernamePasswordRequest.new(
639
- account.email, "P@$$w0rd",
593
+ account.email, 'P@$$w0rd',
640
594
  account_store: other_organization
641
595
  )
642
596
  end
643
-
644
- let(:other_organization) do
645
- test_api_client.organizations.create name: 'other_organization',
646
- name_key: "other-organization"
647
- end
597
+ let(:other_organization) { test_api_client.organizations.create(organization_attrs) }
648
598
 
649
599
  it 'raises an error' do
650
600
  expect { auth_request }.to raise_error(Stormpath::Error)
651
601
  end
602
+
603
+ after { other_organization.delete }
652
604
  end
653
605
  end
654
606
  end
655
607
 
656
608
  context 'with invalid credentials' do
657
609
  let(:username_password_request) do
658
- Stormpath::Authentication::UsernamePasswordRequest.new(
659
- account.email,
660
- "invalid"
661
- )
610
+ Stormpath::Authentication::UsernamePasswordRequest.new(account.email, 'invalid')
662
611
  end
663
-
664
612
  let(:auth_request) { application.authenticate_account(username_password_request) }
665
613
 
666
614
  it 'returns stormpath error' do
667
- expect {
615
+ expect do
668
616
  auth_request
669
- }.to raise_error(Stormpath::Error)
617
+ end.to raise_error(Stormpath::Error)
670
618
  end
671
619
  end
672
620
  end
@@ -680,9 +628,7 @@ describe Stormpath::Resource::Application, :vcr do
680
628
  application.verify_password_reset_token password_reset_token
681
629
  end
682
630
 
683
- after do
684
- account.delete if account
685
- end
631
+ after { account.delete if account }
686
632
 
687
633
  context 'with decoded password reset token' do
688
634
  it 'retrieves the account with the reset password' do
@@ -703,14 +649,10 @@ describe Stormpath::Resource::Application, :vcr do
703
649
 
704
650
  context 'and if the password is changed' do
705
651
  let(:new_password) { 'N3wP@$$w0rd' }
706
-
707
652
  let(:login_request) do
708
- Stormpath::Authentication::UsernamePasswordRequest.new account.username, new_password
709
- end
710
-
711
- let(:authentication_result) do
712
- application.authenticate_account login_request
653
+ Stormpath::Authentication::UsernamePasswordRequest.new(account.username, new_password)
713
654
  end
655
+ let(:authentication_result) { application.authenticate_account login_request }
714
656
 
715
657
  before do
716
658
  reset_password_account.password = new_password
@@ -728,29 +670,31 @@ describe Stormpath::Resource::Application, :vcr do
728
670
 
729
671
  describe '#create_application_with_custom_data' do
730
672
  it 'creates an application with custom data' do
731
- application.custom_data["category"] = "classified"
673
+ application.custom_data['category'] = 'classified'
732
674
  application.save
733
675
 
734
- expect(application.custom_data["category"]).to eq("classified")
676
+ expect(application.custom_data['category']).to eq('classified')
735
677
  end
736
678
  end
737
679
 
738
680
  describe '#create_id_site_url' do
739
- let(:jwt_token) { JWT.encode({
740
- 'iat' => Time.now.to_i,
741
- 'jti' => UUID.method(:random_create).call.to_s,
742
- 'aud' => test_api_key_id,
743
- 'sub' => application.href,
744
- 'cb_uri' => 'http://localhost:9292/redirect',
745
- 'path' => '',
746
- 'state' => ''
747
- }, test_api_key_secret, 'HS256')
748
- }
749
-
750
- let(:create_id_site_url_result) do
751
- options = { callback_uri: 'http://localhost:9292/redirect' }
752
- application.create_id_site_url options
681
+ let(:jwt_token) do
682
+ JWT.encode(
683
+ {
684
+ 'iat' => Time.now.to_i,
685
+ 'jti' => UUID.method(:random_create).call.to_s,
686
+ 'aud' => test_api_key_id,
687
+ 'sub' => application.href,
688
+ 'cb_uri' => 'http://localhost:9292/redirect',
689
+ 'path' => '',
690
+ 'state' => ''
691
+ }, test_api_key_secret, 'HS256'
692
+ )
753
693
  end
694
+ let(:create_id_site_url_result) { application.create_id_site_url(options) }
695
+ let(:options) { { callback_uri: 'http://localhost:9292/redirect' } }
696
+ let(:uri) { Addressable::URI.parse(create_id_site_url_result) }
697
+ let(:jwt_token) { JWT.decode(uri.query_values['jwtRequest'], test_api_key_secret).first }
754
698
 
755
699
  it 'should create a url with jwtRequest' do
756
700
  expect(create_id_site_url_result).to include('jwtRequest')
@@ -761,37 +705,52 @@ describe Stormpath::Resource::Application, :vcr do
761
705
  end
762
706
 
763
707
  it 'should create a jwtRequest that is signed wit the client secret' do
764
- uri = Addressable::URI.parse(create_id_site_url_result)
765
- jwt_token = JWT.decode(uri.query_values["jwtRequest"], test_api_key_secret).first
766
-
767
- expect(jwt_token["iss"]).to eq test_api_key_id
768
- expect(jwt_token["sub"]).to eq application.href
769
- expect(jwt_token["cb_uri"]).to eq 'http://localhost:9292/redirect'
708
+ expect(jwt_token['iss']).to eq test_api_key_id
709
+ expect(jwt_token['sub']).to eq application.href
710
+ expect(jwt_token['cb_uri']).to eq 'http://localhost:9292/redirect'
770
711
  end
771
712
 
772
713
  context 'with logout option' do
714
+ before { options[:logout] = true }
715
+
773
716
  it 'shoud create a request to /sso/logout' do
717
+ expect(create_id_site_url_result).to include('/sso/logout')
774
718
  end
775
719
  end
776
720
 
777
- context 'without providing cb_uri' do
778
- let(:create_id_site_url_result) do
779
- options = { callback_uri: '' }
780
- application.create_id_site_url options
721
+ context 'with bad cb_uri' do
722
+ context 'blank' do
723
+ before { options[:callback_uri] = '' }
724
+
725
+ it 'should raise Stormpath Error with correct id_site error data' do
726
+ begin
727
+ create_id_site_url_result
728
+ rescue Stormpath::Error => error
729
+ expect(error.status).to eq(400)
730
+ expect(error.code).to eq(400)
731
+ expect(error.message).to eq('The specified callback URI (cb_uri) is not valid')
732
+ expect(error.developer_message).to eq('The specified callback URI (cb_uri) is not valid.'\
733
+ ' Make sure the callback URI specified in your ID Site configuration matches the value specified.')
734
+ end
735
+ end
781
736
  end
782
737
 
783
- it 'should raise Stormpath Error with correct id_site error data' do
784
- begin
785
- create_id_site_url_result
786
- rescue Stormpath::Error => error
787
- expect(error.status).to eq(400)
788
- expect(error.code).to eq(400)
789
- expect(error.message).to eq("The specified callback URI (cb_uri) is not valid")
790
- expect(error.developer_message).to eq("The specified callback URI (cb_uri) is not valid. Make sure the "\
791
- "callback URI specified in your ID Site configuration matches the value specified.")
738
+ context 'nil' do
739
+ before { options.delete(:callback_uri) }
740
+
741
+ it 'should raise Stormpath Error' do
742
+ expect { create_id_site_url_result }.to raise_error(Stormpath::Error)
792
743
  end
793
744
  end
794
745
  end
746
+
747
+ context 'with providing require_mfa' do
748
+ before { options[:require_mfa] = ['sms'] }
749
+
750
+ it 'should create a jwtRequest that contains require_mfa' do
751
+ expect(jwt_token['require_mfa']).to eq ['sms']
752
+ end
753
+ end
795
754
  end
796
755
 
797
756
  describe '#handle_id_site_callback' do
@@ -804,89 +763,95 @@ describe Stormpath::Resource::Application, :vcr do
804
763
  end
805
764
 
806
765
  context 'with a valid jwt response' do
807
- let(:jwt_token) { JWT.encode({
808
- 'iat' => Time.now.to_i,
809
- 'aud' => test_api_key_id,
810
- 'sub' => application.href,
811
- 'path' => '',
812
- 'state' => '',
813
- 'isNewSub' => true,
814
- 'status' => "REGISTERED"
815
- }, test_api_key_secret, 'HS256')
816
- }
817
-
818
- before do
819
- @site_result = application.handle_id_site_callback(callback_uri_base + jwt_token)
766
+ let(:jwt_token) do
767
+ JWT.encode(
768
+ {
769
+ 'iat' => Time.now.to_i,
770
+ 'aud' => test_api_key_id,
771
+ 'sub' => application.href,
772
+ 'path' => '',
773
+ 'state' => '',
774
+ 'isNewSub' => true,
775
+ 'status' => 'REGISTERED'
776
+ }, test_api_key_secret, 'HS256'
777
+ )
820
778
  end
779
+ let!(:site_result) { application.handle_id_site_callback(callback_uri_base + jwt_token) }
821
780
 
822
781
  it 'should return IdSiteResult object' do
823
- expect(@site_result).to be_kind_of(Stormpath::IdSite::IdSiteResult)
782
+ expect(site_result).to be_kind_of(Stormpath::IdSite::IdSiteResult)
824
783
  end
825
784
 
826
785
  it 'should set the correct account on IdSiteResult object' do
827
- expect(@site_result.account_href).to eq(application.href)
786
+ expect(site_result.account_href).to eq(application.href)
828
787
  end
829
788
 
830
789
  it 'should set the correct status on IdSiteResult object' do
831
- expect(@site_result.status).to eq("REGISTERED")
790
+ expect(site_result.status).to eq('REGISTERED')
832
791
  end
833
792
 
834
793
  it 'should set the correct state on IdSiteResult object' do
835
- expect(@site_result.state).to eq("")
794
+ expect(site_result.state).to eq('')
836
795
  end
837
796
 
838
797
  it 'should set the correct is_new_account on IdSiteResult object' do
839
- expect(@site_result.new_account?).to eq(true)
798
+ expect(site_result.new_account?).to eq(true)
840
799
  end
841
800
  end
842
801
 
843
802
  context 'with an expired token' do
844
- let(:jwt_token) { JWT.encode({
845
- 'iat' => Time.now.to_i,
846
- 'aud' => test_api_key_id,
847
- 'sub' => application.href,
848
- 'path' => '',
849
- 'state' => '',
850
- 'exp' => Time.now.to_i - 1,
851
- 'isNewSub' => true,
852
- 'status' => "REGISTERED"
853
- }, test_api_key_secret, 'HS256')
854
- }
803
+ let(:jwt_token) do
804
+ JWT.encode(
805
+ {
806
+ 'iat' => Time.now.to_i,
807
+ 'aud' => test_api_key_id,
808
+ 'sub' => application.href,
809
+ 'path' => '',
810
+ 'state' => '',
811
+ 'exp' => Time.now.to_i - 1,
812
+ 'isNewSub' => true,
813
+ 'status' => 'REGISTERED'
814
+ }, test_api_key_secret, 'HS256'
815
+ )
816
+ end
855
817
 
856
818
  it 'should raise Stormpath Error with correct data' do
857
819
  begin
858
820
  application.handle_id_site_callback(callback_uri_base + jwt_token)
859
821
  rescue Stormpath::Error => error
860
822
  expect(error.status).to eq(400)
861
- expect(error.code).to eq(10011)
862
- expect(error.message).to eq("Token is invalid")
863
- expect(error.developer_message).to eq("Token is no longer valid because it has expired")
823
+ expect(error.code).to eq(10_011)
824
+ expect(error.message).to eq('Token is invalid')
825
+ expect(error.developer_message).to eq('Token is no longer valid because it has expired')
864
826
  end
865
827
  end
866
828
 
867
829
  it 'should raise expiration error' do
868
- expect {
830
+ expect do
869
831
  application.handle_id_site_callback(callback_uri_base + jwt_token)
870
- }.to raise_error(Stormpath::Error)
832
+ end.to raise_error(Stormpath::Error)
871
833
  end
872
834
  end
873
835
 
874
836
  context 'with a different client id (aud)' do
875
- let(:jwt_token) { JWT.encode({
876
- 'iat' => Time.now.to_i,
877
- 'aud' => UUID.method(:random_create).call.to_s,
878
- 'sub' => application.href,
879
- 'path' => '',
880
- 'state' => '',
881
- 'isNewSub' => true,
882
- 'status' => "REGISTERED"
883
- }, test_api_key_secret, 'HS256')
884
- }
837
+ let(:jwt_token) do
838
+ JWT.encode(
839
+ {
840
+ 'iat' => Time.now.to_i,
841
+ 'aud' => UUID.method(:random_create).call.to_s,
842
+ 'sub' => application.href,
843
+ 'path' => '',
844
+ 'state' => '',
845
+ 'isNewSub' => true,
846
+ 'status' => 'REGISTERED'
847
+ }, test_api_key_secret, 'HS256'
848
+ )
849
+ end
885
850
 
886
851
  it 'should raise error' do
887
- expect {
852
+ expect do
888
853
  application.handle_id_site_callback(callback_uri_base + jwt_token)
889
- }.to raise_error(Stormpath::Error)
854
+ end.to raise_error(Stormpath::Error)
890
855
  end
891
856
 
892
857
  it 'should raise Stormpath Error with correct id_site error data' do
@@ -894,88 +859,98 @@ describe Stormpath::Resource::Application, :vcr do
894
859
  application.handle_id_site_callback(callback_uri_base + jwt_token)
895
860
  rescue Stormpath::Error => error
896
861
  expect(error.status).to eq(400)
897
- expect(error.code).to eq(10012)
898
- expect(error.message).to eq("Token is invalid")
899
- expect(error.developer_message).to eq("Token is invalid because the issued at time (iat) "\
900
- "is after the current time")
862
+ expect(error.code).to eq(10_012)
863
+ expect(error.message).to eq('Token is invalid')
864
+ expect(error.developer_message).to eq('Token is invalid because the issued at time (iat) '\
865
+ 'is after the current time')
901
866
  end
902
867
  end
903
868
  end
904
869
 
905
870
  context 'with an invalid exp value' do
906
- let(:jwt_token) { JWT.encode({
907
- 'iat' => Time.now.to_i,
908
- 'aud' => test_api_key_id,
909
- 'sub' => application.href,
910
- 'path' => '',
911
- 'state' => '',
912
- 'exp' => 'not gona work',
913
- 'isNewSub' => true,
914
- 'status' => "REGISTERED"
915
- }, test_api_key_secret, 'HS256')
916
- }
871
+ let(:jwt_token) do
872
+ JWT.encode(
873
+ {
874
+ 'iat' => Time.now.to_i,
875
+ 'aud' => test_api_key_id,
876
+ 'sub' => application.href,
877
+ 'path' => '',
878
+ 'state' => '',
879
+ 'exp' => 'not gona work',
880
+ 'isNewSub' => true,
881
+ 'status' => 'REGISTERED'
882
+ }, test_api_key_secret, 'HS256'
883
+ )
884
+ end
917
885
 
918
886
  it 'should error with the stormpath error' do
919
- expect {
887
+ expect do
920
888
  application.handle_id_site_callback(callback_uri_base + jwt_token)
921
- }.to raise_error(Stormpath::Error)
889
+ end.to raise_error(Stormpath::Error)
922
890
  end
923
891
  end
924
892
 
925
893
  context 'with an invalid signature' do
926
- let(:jwt_token) { JWT.encode({
927
- 'iat' => Time.now.to_i,
928
- 'aud' => test_api_key_id,
929
- 'sub' => application.href,
930
- 'path' => '',
931
- 'state' => '',
932
- 'isNewSub' => true,
933
- 'status' => "REGISTERED"
934
- }, 'false key', 'HS256')
935
- }
894
+ let(:jwt_token) do
895
+ JWT.encode(
896
+ {
897
+ 'iat' => Time.now.to_i,
898
+ 'aud' => test_api_key_id,
899
+ 'sub' => application.href,
900
+ 'path' => '',
901
+ 'state' => '',
902
+ 'isNewSub' => true,
903
+ 'status' => 'REGISTERED'
904
+ }, 'false key', 'HS256'
905
+ )
906
+ end
936
907
 
937
908
  it 'should reject the signature' do
938
- expect {
909
+ expect do
939
910
  application.handle_id_site_callback(callback_uri_base + jwt_token)
940
- }.to raise_error(JWT::DecodeError)
911
+ end.to raise_error(JWT::DecodeError)
941
912
  end
942
913
  end
943
914
 
944
915
  context 'with show_organization_field key specified' do
945
- let(:jwt_token) { JWT.encode({
946
- 'iat' => Time.now.to_i,
947
- 'aud' => test_api_key_id,
948
- 'sub' => application.href,
949
- 'path' => '',
950
- 'state' => '',
951
- 'isNewSub' => true,
952
- 'status' => "REGISTERED",
953
- 'organization_name_key' => 'stormtroopers',
954
- 'usd' => true,
955
- 'sof' => true
956
- }, test_api_key_secret, 'HS256')
957
- }
958
-
959
- before do
960
- @site_result = application.handle_id_site_callback(callback_uri_base + jwt_token)
916
+ let(:jwt_token) do
917
+ JWT.encode(
918
+ {
919
+ 'iat' => Time.now.to_i,
920
+ 'aud' => test_api_key_id,
921
+ 'sub' => application.href,
922
+ 'path' => '',
923
+ 'state' => '',
924
+ 'isNewSub' => true,
925
+ 'status' => 'REGISTERED',
926
+ 'organization_name_key' => 'stormtroopers',
927
+ 'usd' => true,
928
+ 'sof' => true
929
+ }, test_api_key_secret, 'HS256'
930
+ )
961
931
  end
932
+ let!(:site_result) { application.handle_id_site_callback(callback_uri_base + jwt_token) }
962
933
 
963
934
  it 'should return IdSiteResult object' do
964
- expect(@site_result).to be_kind_of(Stormpath::IdSite::IdSiteResult)
935
+ expect(site_result).to be_kind_of(Stormpath::IdSite::IdSiteResult)
965
936
  end
966
937
  end
967
938
  end
968
939
 
969
940
  describe '#authenticate_oauth' do
970
941
  let(:account_data) { account_attrs }
971
- let(:password_grant_request) { Stormpath::Oauth::PasswordGrantRequest.new account_data[:email], account_data[:password] }
942
+ let(:password_grant_request) do
943
+ Stormpath::Oauth::PasswordGrantRequest.new(account_data[:email], account_data[:password])
944
+ end
972
945
  let(:aquire_token) { application.authenticate_oauth(password_grant_request) }
973
- let(:account) { application.accounts.create account_data }
946
+ let(:account) { application.accounts.create(account_data) }
974
947
 
975
948
  before { account }
976
949
 
977
950
  context 'generate access token from password grant request' do
978
- let(:password_grant_request) { Stormpath::Oauth::PasswordGrantRequest.new account_data[:email], account_data[:password] }
951
+ let(:password_grant_request) do
952
+ Stormpath::Oauth::PasswordGrantRequest.new(account_data[:email], account_data[:password])
953
+ end
979
954
  let(:authenticate_oauth) { application.authenticate_oauth(password_grant_request) }
980
955
 
981
956
  context 'without organization_name_key' do
@@ -993,21 +968,21 @@ describe Stormpath::Resource::Application, :vcr do
993
968
  end
994
969
 
995
970
  context 'with the organization name key' do
996
- let!(:organization) do
997
- test_api_client.organizations.create name: 'rspec-test-org', name_key: 'rspec-test-org'
998
- end
999
- let(:account_directory) do
1000
- test_api_client.directories.create(
1001
- name: 'rspec-directory'
971
+ let!(:organization) { test_api_client.organizations.create(organization_attrs) }
972
+ let(:account_directory) { test_api_client.directories.create(directory_attrs) }
973
+ let(:reloaded_account_directory) { test_api_client.directories.get(account_directory.href) }
974
+ let(:password_grant_request) do
975
+ Stormpath::Oauth::PasswordGrantRequest.new(
976
+ account_data[:email],
977
+ account_data[:password],
978
+ organization_name_key: organization.name_key
1002
979
  )
1003
980
  end
1004
- let(:reloaded_account_directory) do
1005
- test_api_client.directories.get(account_directory.href)
1006
- end
1007
- let(:password_grant_request) do
1008
- Stormpath::Oauth::PasswordGrantRequest.new(account_data[:email],
1009
- account_data[:password],
1010
- organization_name_key: 'rspec-test-org')
981
+
982
+ before do
983
+ map_account_store(application, organization, 0, true, true)
984
+ map_organization_store(account_directory, organization)
985
+ account_directory.accounts.create(account_data)
1011
986
  end
1012
987
 
1013
988
  after do
@@ -1015,12 +990,6 @@ describe Stormpath::Resource::Application, :vcr do
1015
990
  reloaded_account_directory.delete
1016
991
  end
1017
992
 
1018
- before do
1019
- map_account_store(application, organization, 0, true, true)
1020
- map_organization_store(account_directory, organization)
1021
- account_directory.accounts.create account_data
1022
- end
1023
-
1024
993
  it 'should return access token response' do
1025
994
  expect(authenticate_oauth).to be_kind_of(Stormpath::Oauth::AccessTokenAuthenticationResult)
1026
995
  end
@@ -1095,14 +1064,12 @@ describe Stormpath::Resource::Application, :vcr do
1095
1064
 
1096
1065
  context 'generate access token from client credentials request' do
1097
1066
  let(:account_api_key) { account.api_keys.create({}) }
1098
-
1099
1067
  let(:client_credentials_grant_request) do
1100
1068
  Stormpath::Oauth::ClientCredentialsGrantRequest.new(
1101
1069
  account_api_key.id,
1102
1070
  account_api_key.secret
1103
1071
  )
1104
1072
  end
1105
-
1106
1073
  let(:authenticate_oauth) { application.authenticate_oauth(client_credentials_grant_request) }
1107
1074
 
1108
1075
  it 'should return access token response' do
@@ -1126,9 +1093,10 @@ describe Stormpath::Resource::Application, :vcr do
1126
1093
  Stormpath::Oauth::SocialGrantRequest.new(:google, code: code)
1127
1094
  end
1128
1095
  before do
1129
- stub_request(:post,
1130
- "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token")
1131
- .to_return(body: Stormpath::Test.mocked_social_grant_response)
1096
+ stub_request(
1097
+ :post,
1098
+ "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token"
1099
+ ).to_return(body: Stormpath::Test.mocked_social_grant_response)
1132
1100
  end
1133
1101
 
1134
1102
  it 'should return access token response' do
@@ -1150,9 +1118,10 @@ describe Stormpath::Resource::Application, :vcr do
1150
1118
  Stormpath::Oauth::SocialGrantRequest.new(:linkedin, code: code)
1151
1119
  end
1152
1120
  before do
1153
- stub_request(:post,
1154
- "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token")
1155
- .to_return(body: Stormpath::Test.mocked_social_grant_response)
1121
+ stub_request(
1122
+ :post,
1123
+ "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token"
1124
+ ).to_return(body: Stormpath::Test.mocked_social_grant_response)
1156
1125
  end
1157
1126
 
1158
1127
  it 'should return access token response' do
@@ -1174,9 +1143,10 @@ describe Stormpath::Resource::Application, :vcr do
1174
1143
  Stormpath::Oauth::SocialGrantRequest.new(:google, access_token: access_token)
1175
1144
  end
1176
1145
  before do
1177
- stub_request(:post,
1178
- "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token")
1179
- .to_return(body: Stormpath::Test.mocked_social_grant_response)
1146
+ stub_request(
1147
+ :post,
1148
+ "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token"
1149
+ ).to_return(body: Stormpath::Test.mocked_social_grant_response)
1180
1150
  end
1181
1151
 
1182
1152
  it 'should return access token response' do
@@ -1198,9 +1168,10 @@ describe Stormpath::Resource::Application, :vcr do
1198
1168
  Stormpath::Oauth::SocialGrantRequest.new(:github, access_token: access_token)
1199
1169
  end
1200
1170
  before do
1201
- stub_request(:post,
1202
- "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token")
1203
- .to_return(body: Stormpath::Test.mocked_social_grant_response)
1171
+ stub_request(
1172
+ :post,
1173
+ "https://#{test_api_key_id}:#{test_api_key_secret}@api.stormpath.com/v1/applications/#{application.href.split('/').last}/oauth/token"
1174
+ ).to_return(body: Stormpath::Test.mocked_social_grant_response)
1204
1175
  end
1205
1176
 
1206
1177
  it 'should return access token response' do
@@ -1219,13 +1190,15 @@ describe Stormpath::Resource::Application, :vcr do
1219
1190
 
1220
1191
  context 'generate access token from challenge factor grant request' do
1221
1192
  before do
1222
- stub_request(:post,
1223
- "https://#{test_api_key_id}:#{test_api_key_secret}@#{test_host}/v1/accounts/#{account.href.split('/').last}/factors?challenge=true")
1224
- .to_return(body: Stormpath::Test.mocked_factor_response)
1193
+ stub_request(
1194
+ :post,
1195
+ "https://#{test_api_key_id}:#{test_api_key_secret}@#{test_host}/v1/accounts/#{account.href.split('/').last}/factors?challenge=true"
1196
+ ).to_return(body: Stormpath::Test.mocked_factor_response)
1225
1197
 
1226
- stub_request(:post,
1227
- "https://#{test_api_key_id}:#{test_api_key_secret}@#{test_host}/v1/applications/#{application.href.split('/').last}/oauth/token")
1228
- .to_return(body: Stormpath::Test.mocked_challenge_factor_grant_response)
1198
+ stub_request(
1199
+ :post,
1200
+ "https://#{test_api_key_id}:#{test_api_key_secret}@#{test_host}/v1/applications/#{application.href.split('/').last}/oauth/token"
1201
+ ).to_return(body: Stormpath::Test.mocked_challenge_factor_grant_response)
1229
1202
  end
1230
1203
  let(:account_data) { account_attrs }
1231
1204
  let(:authenticate_oauth) { application.authenticate_oauth(challenge_factor_grant_request) }
@@ -1236,11 +1209,13 @@ describe Stormpath::Resource::Application, :vcr do
1236
1209
  application.accounts.create(account_data)
1237
1210
  end
1238
1211
  let(:factor) do
1239
- account.create_factor(:sms,
1240
- phone: { number: '+12025550173',
1241
- name: 'Rspec test phone',
1242
- description: 'This is a testing phone number' },
1243
- challenge: { message: 'Enter code please: ' })
1212
+ account.create_factor(
1213
+ :sms,
1214
+ phone: { number: '+12025550173',
1215
+ name: 'Rspec test phone',
1216
+ description: 'This is a testing phone number' },
1217
+ challenge: { message: 'Enter code please: ' }
1218
+ )
1244
1219
  end
1245
1220
  let(:challenge) { "https://#{test_host}/v1/challenges/29300284904" }
1246
1221
  let(:code) { '123456' }
@@ -1260,28 +1235,28 @@ describe Stormpath::Resource::Application, :vcr do
1260
1235
 
1261
1236
  context 'exchange id site token for access_token with invalid jwt' do
1262
1237
  let(:invalid_jwt_token) { 'invalid_token' }
1263
-
1264
- let(:id_site_grant_request) { Stormpath::Oauth::IdSiteGrantRequest.new invalid_jwt_token }
1238
+ let(:id_site_grant_request) { Stormpath::Oauth::IdSiteGrantRequest.new(invalid_jwt_token) }
1265
1239
  let(:authenticate_oauth) { application.authenticate_oauth(id_site_grant_request) }
1266
1240
 
1267
1241
  it 'should raise invalid token error' do
1268
- expect {
1269
- authenticate_oauth
1270
- }.to raise_error(Stormpath::Error)
1242
+ expect { authenticate_oauth }.to raise_error(Stormpath::Error)
1271
1243
  end
1272
1244
  end
1273
1245
 
1274
1246
  context 'echange id site token for access_token with valid jwt' do
1275
- let(:jwt_token) { JWT.encode({
1276
- 'iat' => Time.now.to_i,
1277
- 'jti' => UUID.method(:random_create).call.to_s,
1278
- 'iss' => test_api_client.data_store.api_key.id,
1279
- 'sub' => application.href,
1280
- 'cb_uri' => 'http://localhost:9292/redirect',
1281
- 'path' => '',
1282
- 'state' => ''
1283
- }, test_api_client.data_store.api_key.secret, 'HS256')
1284
- }
1247
+ let(:jwt_token) do
1248
+ JWT.encode(
1249
+ {
1250
+ 'iat' => Time.now.to_i,
1251
+ 'jti' => UUID.method(:random_create).call.to_s,
1252
+ 'iss' => test_api_client.data_store.api_key.id,
1253
+ 'sub' => application.href,
1254
+ 'cb_uri' => 'http://localhost:9292/redirect',
1255
+ 'path' => '',
1256
+ 'state' => ''
1257
+ }, test_api_client.data_store.api_key.secret, 'HS256'
1258
+ )
1259
+ end
1285
1260
 
1286
1261
  it 'should create a jwtRequest that is signed wit the client secret' do
1287
1262
  allow(application.client.data_store).to receive(:create).and_return(Stormpath::Oauth::AccessTokenAuthenticationResult)
@@ -1289,7 +1264,7 @@ describe Stormpath::Resource::Application, :vcr do
1289
1264
  .with(Stormpath::Oauth::IdSiteGrant)
1290
1265
  .and_return(Stormpath::Oauth::IdSiteGrant.new({}, application.client))
1291
1266
 
1292
- grant_request = Stormpath::Oauth::IdSiteGrantRequest.new jwt_token
1267
+ grant_request = Stormpath::Oauth::IdSiteGrantRequest.new(jwt_token)
1293
1268
  response = application.authenticate_oauth(grant_request)
1294
1269
 
1295
1270
  expect(response).to be(Stormpath::Oauth::AccessTokenAuthenticationResult)
@@ -1297,7 +1272,7 @@ describe Stormpath::Resource::Application, :vcr do
1297
1272
  end
1298
1273
 
1299
1274
  context 'refresh token' do
1300
- let(:refresh_grant_request) { Stormpath::Oauth::RefreshGrantRequest.new aquire_token.refresh_token }
1275
+ let(:refresh_grant_request) { Stormpath::Oauth::RefreshGrantRequest.new(aquire_token.refresh_token) }
1301
1276
  let(:authenticate_oauth) { application.authenticate_oauth(refresh_grant_request) }
1302
1277
 
1303
1278
  it 'should return access token response with refreshed token' do
@@ -1363,10 +1338,29 @@ describe Stormpath::Resource::Application, :vcr do
1363
1338
  access_token = aquire_token.access_token
1364
1339
  aquire_token.delete
1365
1340
 
1366
- expect {
1341
+ expect do
1367
1342
  Stormpath::Oauth::VerifyAccessToken.new(application).verify(access_token)
1368
- }.to raise_error(Stormpath::Error)
1343
+ end.to raise_error(Stormpath::Error)
1369
1344
  end
1370
1345
  end
1371
1346
  end
1347
+
1348
+ describe '#register_service_provider' do
1349
+ let(:assertion_consumer_service_url) { 'https://some.sp.com/saml/sso/post' }
1350
+ let(:entity_id) { 'urn:sp:A1B2C3' }
1351
+ let(:registered_service_provider) do
1352
+ application.register_service_provider(
1353
+ assertion_consumer_service_url: assertion_consumer_service_url,
1354
+ entity_id: entity_id
1355
+ )
1356
+ end
1357
+
1358
+ after { registered_service_provider.delete }
1359
+
1360
+ it 'should successfully create and register a service provider' do
1361
+ expect(registered_service_provider).to(
1362
+ be_a(Stormpath::Resource::RegisteredSamlServiceProvider)
1363
+ )
1364
+ end
1365
+ end
1372
1366
  end