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
@@ -6,13 +6,7 @@ describe Stormpath::Resource::Base do
6
6
  class TestResource < Stormpath::Resource::Base
7
7
  prop_accessor :username, :given_name
8
8
  end
9
-
10
- let(:resource) do
11
- TestResource.new({
12
- 'username' => 'bar',
13
- 'givenName' => 'foo'
14
- }, nil)
15
- end
9
+ let(:resource) { TestResource.new({ 'username' => 'bar', 'givenName' => 'foo' }, nil) }
16
10
 
17
11
  it 'generates a getter method for each property' do
18
12
  expect(resource.username).to eq('bar')
@@ -33,13 +27,7 @@ describe Stormpath::Resource::Base do
33
27
  class TestResource < Stormpath::Resource::Base
34
28
  prop_non_printable :password
35
29
  end
36
-
37
- let(:resource) do
38
- TestResource.new({
39
- 'username' => 'bar',
40
- 'password' => 'P@$$w0rd'
41
- }, nil)
42
- end
30
+ let(:resource) { TestResource.new({ 'username' => 'bar', 'password' => 'P@$$w0rd' }, nil) }
43
31
 
44
32
  it 'marks that property as not being printable' do
45
33
  expect(resource.inspect).to include('username')
@@ -70,14 +58,10 @@ describe Stormpath::Resource::Base do
70
58
  class TestResource < Stormpath::Resource::Base; end
71
59
 
72
60
  context 'compared against an object of the same class' do
73
- let(:resource) do
74
- TestResource.new('http://foo.com/test/123')
75
- end
61
+ let(:resource) { TestResource.new('http://foo.com/test/123') }
76
62
 
77
63
  context 'href matches' do
78
- let(:other) do
79
- TestResource.new('http://foo.com/test/123')
80
- end
64
+ let(:other) { TestResource.new('http://foo.com/test/123') }
81
65
 
82
66
  it 'passes' do
83
67
  expect(resource).to eq(other)
@@ -85,9 +69,7 @@ describe Stormpath::Resource::Base do
85
69
  end
86
70
 
87
71
  context 'href does not match' do
88
- let(:other) do
89
- TestResource.new('http://foo.com/test/456')
90
- end
72
+ let(:other) { TestResource.new('http://foo.com/test/456') }
91
73
 
92
74
  it 'fails' do
93
75
  expect(resource).to_not eq(other)
@@ -97,14 +79,8 @@ describe Stormpath::Resource::Base do
97
79
 
98
80
  context 'compared against an object of another class' do
99
81
  class NotAResource; end
100
-
101
- let(:resource) do
102
- TestResource.new('http://foo.com/test/123')
103
- end
104
-
105
- let(:other) do
106
- NotAResource.new
107
- end
82
+ let(:resource) { TestResource.new('http://foo.com/test/123') }
83
+ let(:other) { NotAResource.new }
108
84
 
109
85
  it 'fails' do
110
86
  expect(resource).to_not eq(other)
@@ -1,23 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::Collection, :vcr do
4
- let(:href) do
5
- 'http://example.com'
6
- end
7
-
8
- let(:item_class) do
9
- Stormpath::Resource::Application
10
- end
11
-
12
- let(:client) do
13
- Stormpath::Client
14
- end
4
+ let(:href) { 'http://example.com' }
5
+ let(:item_class) { Stormpath::Resource::Application }
6
+ let(:client) { Stormpath::Client }
15
7
 
16
8
  describe '#collection_href' do
17
9
  context 'by default' do
18
- let(:collection) do
19
- Stormpath::Resource::Collection.new href, item_class, client
20
- end
10
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
21
11
 
22
12
  it 'defaults to href' do
23
13
  expect(collection.collection_href).to eq href
@@ -25,9 +15,7 @@ describe Stormpath::Resource::Collection, :vcr do
25
15
  end
26
16
 
27
17
  context 'when specified' do
28
- let(:collection_href) do
29
- 'http://fakie.com'
30
- end
18
+ let(:collection_href) { 'http://fakie.com' }
31
19
 
32
20
  let(:collection) do
33
21
  Stormpath::Resource::Collection.new(
@@ -43,13 +31,8 @@ describe Stormpath::Resource::Collection, :vcr do
43
31
  end
44
32
 
45
33
  describe '#offset' do
46
- let(:collection) do
47
- Stormpath::Resource::Collection.new href, item_class, client
48
- end
49
-
50
- let!(:offset) do
51
- collection.offset 5
52
- end
34
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
35
+ let!(:offset) { collection.offset 5 }
53
36
 
54
37
  it 'returns the collection' do
55
38
  expect(offset.class).to eq Stormpath::Resource::Collection
@@ -61,13 +44,9 @@ describe Stormpath::Resource::Collection, :vcr do
61
44
  end
62
45
 
63
46
  describe '#limit' do
64
- let(:collection) do
65
- Stormpath::Resource::Collection.new href, item_class, client
66
- end
47
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
67
48
 
68
- let!(:limit) do
69
- collection.limit 100
70
- end
49
+ let!(:limit) { collection.limit 100 }
71
50
 
72
51
  it 'returns the collection' do
73
52
  expect(limit.class).to eq Stormpath::Resource::Collection
@@ -79,17 +58,11 @@ describe Stormpath::Resource::Collection, :vcr do
79
58
  end
80
59
 
81
60
  describe '#order' do
82
- let(:collection) do
83
- Stormpath::Resource::Collection.new href, item_class, client
84
- end
61
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
85
62
 
86
- let(:order_statement) do
87
- 'lastName asc,age desc'
88
- end
63
+ let(:order_statement) { 'lastName asc,age desc' }
89
64
 
90
- let!(:order) do
91
- collection.order order_statement
92
- end
65
+ let!(:order) { collection.order order_statement }
93
66
 
94
67
  it 'returns the collection' do
95
68
  expect(order.class).to eq Stormpath::Resource::Collection
@@ -101,18 +74,12 @@ describe Stormpath::Resource::Collection, :vcr do
101
74
  end
102
75
 
103
76
  describe '#search' do
104
- let(:collection) do
105
- Stormpath::Resource::Collection.new href, item_class, client
106
- end
77
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
107
78
 
108
79
  context 'when passed a string' do
109
- let(:query) do
110
- 'dagnabbit'
111
- end
80
+ let(:query) { 'dagnabbit' }
112
81
 
113
- let!(:search) do
114
- collection.search query
115
- end
82
+ let!(:search) { collection.search query }
116
83
 
117
84
  it 'returns the collection' do
118
85
  expect(search.class).to eq Stormpath::Resource::Collection
@@ -124,13 +91,8 @@ describe Stormpath::Resource::Collection, :vcr do
124
91
  end
125
92
 
126
93
  context 'when passed a hash of attributes' do
127
- let(:query_hash) do
128
- { name: 'Stanley Kubrick', description: 'That dude was a sick maniac' }
129
- end
130
-
131
- let!(:search) do
132
- collection.search query_hash
133
- end
94
+ let(:query_hash) { { name: 'Stanley Kubrick', description: 'That dude was a sick maniac' } }
95
+ let!(:search) { collection.search query_hash }
134
96
 
135
97
  it 'returns the collection' do
136
98
  expect(search.class).to eq Stormpath::Resource::Collection
@@ -143,9 +105,7 @@ describe Stormpath::Resource::Collection, :vcr do
143
105
  end
144
106
 
145
107
  describe '#criteria' do
146
- let(:collection) do
147
- Stormpath::Resource::Collection.new href, item_class, client
148
- end
108
+ let(:collection) { Stormpath::Resource::Collection.new href, item_class, client }
149
109
 
150
110
  context 'when no fetch criteria present' do
151
111
  it 'returns an empty hash for criteria' do
@@ -173,13 +133,11 @@ describe Stormpath::Resource::Collection, :vcr do
173
133
 
174
134
  let(:groups) do
175
135
  ('A'..'Z').map do |letter|
176
- directory.groups.create name: "#{letter}. pagination testing group "
136
+ directory.groups.create(name: "#{letter}. pagination testing group ")
177
137
  end
178
138
  end
179
139
 
180
- after do
181
- directory.delete
182
- end
140
+ after { directory.delete }
183
141
 
184
142
  it 'should respond as expected with or without limits' do
185
143
  expect(groups.count).to eq(26)
@@ -212,21 +170,14 @@ describe Stormpath::Resource::Collection, :vcr do
212
170
 
213
171
  context 'testing limits and offsets with name checking' do
214
172
  let(:directory) { test_api_client.directories.create(directory_attrs) }
173
+ let!(:groups) { ('1'..'100').map { |number| directory.groups.create(name: number) } }
215
174
 
216
- let!(:groups) do
217
- ('1'..'100').map do |number|
218
- directory.groups.create name: number
219
- end
220
- end
221
-
222
- after do
223
- directory.delete
224
- end
175
+ after { directory.delete }
225
176
 
226
177
  it 'should paginate properly' do
227
178
  expect(directory.groups.count).to eq(100)
228
179
 
229
- expect(directory.groups.map {|group| group.name }).to eq(('1'..'100').to_a.sort)
180
+ expect(directory.groups.map(&:name)).to eq(('1'..'100').to_a.sort)
230
181
 
231
182
  expect(directory.groups.limit(30).count).to eq(100)
232
183
 
@@ -244,23 +195,23 @@ describe Stormpath::Resource::Collection, :vcr do
244
195
 
245
196
  expect(directory.groups.limit(30).offset(90).current_page.size).to eq(100)
246
197
 
247
- expect(directory.groups.limit(30).map {|group| group.name }).to eq(('1'..'100').to_a.sort)
198
+ expect(directory.groups.limit(30).map(&:name)).to eq(('1'..'100').to_a.sort)
248
199
 
249
- expect(directory.groups.limit(30).current_page.items.map {|group| group.name }).to eq(('1'..'100').to_a.sort.first(30))
200
+ expect(directory.groups.limit(30).current_page.items.map(&:name)).to eq(('1'..'100').to_a.sort.first(30))
250
201
 
251
- expect(directory.groups.limit(30).offset(30).map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(30))
202
+ expect(directory.groups.limit(30).offset(30).map(&:name)).to eq(('1'..'100').to_a.sort.drop(30))
252
203
 
253
- expect(directory.groups.limit(30).offset(30).current_page.items.map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(30).first(30))
204
+ expect(directory.groups.limit(30).offset(30).current_page.items.map(&:name)).to eq(('1'..'100').to_a.sort.drop(30).first(30))
254
205
 
255
- expect(directory.groups.limit(30).offset(60).map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(60))
206
+ expect(directory.groups.limit(30).offset(60).map(&:name)).to eq(('1'..'100').to_a.sort.drop(60))
256
207
 
257
- expect(directory.groups.limit(30).offset(60).current_page.items.map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(60).first(30))
208
+ expect(directory.groups.limit(30).offset(60).current_page.items.map(&:name)).to eq(('1'..'100').to_a.sort.drop(60).first(30))
258
209
 
259
- expect(directory.groups.limit(30).offset(90).map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(90))
210
+ expect(directory.groups.limit(30).offset(90).map(&:name)).to eq(('1'..'100').to_a.sort.drop(90))
260
211
 
261
- expect(directory.groups.limit(30).offset(90).current_page.items.map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(90).first(30))
212
+ expect(directory.groups.limit(30).offset(90).current_page.items.map(&:name)).to eq(('1'..'100').to_a.sort.drop(90).first(30))
262
213
 
263
- expect(directory.groups.limit(30).offset(90).current_page.items.map {|group| group.name }).to eq(('1'..'100').to_a.sort.drop(90).first(10))
214
+ expect(directory.groups.limit(30).offset(90).current_page.items.map(&:name)).to eq(('1'..'100').to_a.sort.drop(90).first(10))
264
215
 
265
216
  group_count = 0
266
217
  directory.groups.each do |group|
@@ -280,16 +231,16 @@ describe Stormpath::Resource::Collection, :vcr do
280
231
  let(:username) { 'jlpicard/!@$%^ *()_-+=?><]}[{' }
281
232
 
282
233
  let!(:account) do
283
- directory.accounts.create username: username,
284
- email: "captain#{default_domain}",
285
- givenName: "Jean-Luc",
286
- surname: "Picard",
287
- password: "hakunaMatata179Enterprise"
234
+ directory.accounts.create(
235
+ username: username,
236
+ email: "captain#{default_domain}",
237
+ givenName: 'Jean-Luc',
238
+ surname: 'Picard',
239
+ password: 'hakunaMatata179Enterprise'
240
+ )
288
241
  end
289
242
 
290
- after do
291
- directory.delete
292
- end
243
+ after { directory.delete }
293
244
 
294
245
  it 'should search accounts by username' do
295
246
  expect(directory.accounts.search(username: username).count).to eq(1)
@@ -312,27 +263,27 @@ describe Stormpath::Resource::Collection, :vcr do
312
263
  let(:directory) { test_api_client.directories.create(directory_attrs) }
313
264
 
314
265
  let!(:account) do
315
- directory.accounts.create username: "jlpicard",
316
- email: "captain#{default_domain}",
317
- givenName: "Jean-Luc",
318
- surname: "Picard",
319
- password: "hakunaMatata179Enterprise"
266
+ directory.accounts.create(
267
+ username: 'jlpicard',
268
+ email: "captain#{default_domain}",
269
+ givenName: 'Jean-Luc',
270
+ surname: 'Picard',
271
+ password: 'hakunaMatata179Enterprise'
272
+ )
320
273
  end
321
274
 
322
- after do
323
- directory.delete
324
- end
275
+ after { directory.delete }
325
276
 
326
277
  it 'should search accounts by username with asterisk at the beginning' do
327
- expect(directory.accounts.search(username: "*card").count).to eq(1)
278
+ expect(directory.accounts.search(username: '*card').count).to eq(1)
328
279
  end
329
280
 
330
281
  it 'should search accounts by username with asterisk at the end' do
331
- expect(directory.accounts.search(username: "jl*").count).to eq(1)
282
+ expect(directory.accounts.search(username: 'jl*').count).to eq(1)
332
283
  end
333
284
 
334
285
  it 'should search accounts by username with asterisk at the beginning and the end' do
335
- expect(directory.accounts.search(username: "*pic*").count).to eq(1)
286
+ expect(directory.accounts.search(username: '*pic*').count).to eq(1)
336
287
  end
337
288
  end
338
289
 
@@ -340,27 +291,27 @@ describe Stormpath::Resource::Collection, :vcr do
340
291
  let(:directory) { test_api_client.directories.create(directory_attrs) }
341
292
 
342
293
  let!(:account) do
343
- directory.accounts.create username: "jlpicard",
344
- email: "captain#{default_domain}",
345
- givenName: "Jean-Luc",
346
- surname: "Picard",
347
- password: "hakunaMatata179Enterprise"
294
+ directory.accounts.create(
295
+ username: 'jlpicard',
296
+ email: "captain#{default_domain}",
297
+ givenName: 'Jean-Luc',
298
+ surname: 'Picard',
299
+ password: 'hakunaMatata179Enterprise'
300
+ )
348
301
  end
349
302
 
350
- after do
351
- directory.delete
352
- end
303
+ after { directory.delete }
353
304
 
354
305
  it 'should search accounts by username with asterisk at the beginning' do
355
- expect(directory.accounts.search(username: "*card", email: "*stormpath.com").count).to eq(1)
306
+ expect(directory.accounts.search(username: '*card', email: '*stormpath.com').count).to eq(1)
356
307
  end
357
308
 
358
309
  it 'should search accounts by username with asterisk at the end' do
359
- expect(directory.accounts.search(username: "jl*", email: "capt*").count).to eq(1)
310
+ expect(directory.accounts.search(username: 'jl*', email: 'capt*').count).to eq(1)
360
311
  end
361
312
 
362
313
  it 'should search accounts by username with asterisk at the beginning and the end' do
363
- expect(directory.accounts.search(username: "*pic*", email: "*stormpath*").count).to eq(1)
314
+ expect(directory.accounts.search(username: '*pic*', email: '*stormpath*').count).to eq(1)
364
315
  end
365
316
  end
366
317
 
@@ -387,9 +338,7 @@ describe Stormpath::Resource::Collection, :vcr do
387
338
  )
388
339
  end
389
340
 
390
- after do
391
- directory.delete
392
- end
341
+ after { directory.delete }
393
342
 
394
343
  context 'camelCase' do
395
344
  before do
@@ -14,7 +14,7 @@ describe Stormpath::Resource::CustomData, :vcr do
14
14
 
15
15
  context 'without caching regions' do
16
16
  let(:disabled_cache_client) do
17
- @disabled_cache_client ||= Stormpath::Client.new({api_key: test_api_key, cache: { store: Stormpath::Cache::DisabledCacheStore }})
17
+ @disabled_cache_client ||= Stormpath::Client.new(api_key: test_api_key, cache: { store: Stormpath::Cache::DisabledCacheStore })
18
18
  end
19
19
 
20
20
  let(:directory) { disabled_cache_client.directories.create(directory_attrs) }
@@ -220,7 +220,7 @@ describe Stormpath::Resource::Directory, :vcr do
220
220
  end
221
221
 
222
222
  it 'can authenticate with the account credentials' do
223
- auth_request = Stormpath::Authentication::UsernamePasswordRequest.new 'jlucpicard', 'qwerty'
223
+ auth_request = Stormpath::Authentication::UsernamePasswordRequest.new('jlucpicard', 'qwerty')
224
224
  auth_result = application.authenticate_account auth_request
225
225
 
226
226
  expect(auth_result).to be_a Stormpath::Authentication::AuthenticationResult
@@ -253,7 +253,7 @@ describe Stormpath::Resource::Directory, :vcr do
253
253
  end
254
254
 
255
255
  it 'can authenticate with the account credentials' do
256
- auth_request = Stormpath::Authentication::UsernamePasswordRequest.new 'jlucpicard', 'testing12'
256
+ auth_request = Stormpath::Authentication::UsernamePasswordRequest.new('jlucpicard', 'testing12')
257
257
  auth_result = application.authenticate_account auth_request
258
258
 
259
259
  expect(auth_result).to be_a Stormpath::Authentication::AuthenticationResult
@@ -286,7 +286,7 @@ describe Stormpath::Resource::Directory, :vcr do
286
286
  end
287
287
 
288
288
  it 'can authenticate with the account credentials' do
289
- auth_request = Stormpath::Authentication::UsernamePasswordRequest.new 'jlucpicard', 'NotSecure'
289
+ auth_request = Stormpath::Authentication::UsernamePasswordRequest.new('jlucpicard', 'NotSecure')
290
290
  auth_result = application.authenticate_account auth_request
291
291
 
292
292
  expect(auth_result).to be_a Stormpath::Authentication::AuthenticationResult
@@ -311,9 +311,14 @@ describe Stormpath::Resource::Directory, :vcr do
311
311
  end
312
312
 
313
313
  describe '#create_directory_with_custom_data' do
314
+ let(:directory_name) { "rubysdkdir-#{random_number}" }
314
315
  let(:directory) do
315
- test_api_client.directories.create(directory_attrs(name: 'rubysdkdir',
316
- description: 'rubysdkdir desc'))
316
+ test_api_client.directories.create(
317
+ directory_attrs(
318
+ name: directory_name,
319
+ description: directory_name
320
+ )
321
+ )
317
322
  end
318
323
 
319
324
  after { directory.delete }
@@ -322,24 +327,26 @@ describe Stormpath::Resource::Directory, :vcr do
322
327
  directory.custom_data['category'] = 'classified'
323
328
 
324
329
  directory.save
325
- expect(directory.name).to eq('rubysdkdir')
326
- expect(directory.description).to eq('rubysdkdir desc')
330
+ expect(directory.name).to eq(directory_name)
331
+ expect(directory.description).to eq(directory_name)
327
332
  expect(directory.custom_data['category']).to eq('classified')
328
333
  end
329
334
  end
330
335
 
331
336
  describe 'create directory with provider data' do
337
+ let(:directory_name) { "rubysdkdirprovider-#{random_number}" }
338
+
332
339
  context 'valida data' do
333
340
  let(:directory) do
334
341
  test_api_client.directories.create(
335
- name: 'rubysdkdir',
336
- description: 'description_for_some_test_directory',
342
+ name: directory_name,
343
+ description: directory_name,
337
344
  provider: {
338
- provider_id: "saml",
339
- sso_login_url:"https://yourIdp.com/saml2/sso/login",
340
- sso_logout_url:"https://yourIdp.com/saml2/sso/logout",
341
- encoded_x509_signing_cert:"-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
342
- request_signature_algorithm:"RSA-SHA256"
345
+ provider_id: 'saml',
346
+ sso_login_url: 'https://yourIdp.com/saml2/sso/login',
347
+ sso_logout_url: 'https://yourIdp.com/saml2/sso/logout',
348
+ encoded_x509_signing_cert: "-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
349
+ request_signature_algorithm: 'RSA-SHA256'
343
350
  }
344
351
  )
345
352
  end
@@ -349,17 +356,17 @@ describe Stormpath::Resource::Directory, :vcr do
349
356
  end
350
357
 
351
358
  it 'creates the directory with provider data' do
352
- stub_request(:post, "https://api.stormpath.com/v1/directories").
353
- to_return(status:200, body: fixture('create_saml_directory.json'), headers:{})
359
+ stub_request(:post, 'https://api.stormpath.com/v1/directories')
360
+ .to_return(status: 200, body: Stormpath::Test.mocked_create_saml_directory)
354
361
 
355
- stub_request(:get, directory.href + "/provider").
356
- to_return(status: 200, body: fixture('get_saml_directory_provider.json'), headers:{})
362
+ stub_request(:get, directory.href + '/provider')
363
+ .to_return(status: 200, body: Stormpath::Test.mocked_saml_directory_provider_response)
357
364
 
358
365
  directory
359
- expect(directory.provider.provider_id).to eq("saml")
360
- expect(directory.provider.sso_login_url).to eq("https://yourIdp.com/saml2/sso/login")
361
- expect(directory.provider.sso_logout_url).to eq("https://yourIdp.com/saml2/sso/logout")
362
- expect(directory.provider.request_signature_algorithm).to eq("RSA-SHA256")
366
+ expect(directory.provider.provider_id).to eq('saml')
367
+ expect(directory.provider.sso_login_url).to eq('https://yourIdp.com/saml2/sso/login')
368
+ expect(directory.provider.sso_logout_url).to eq('https://yourIdp.com/saml2/sso/logout')
369
+ expect(directory.provider.request_signature_algorithm).to eq('RSA-SHA256')
363
370
  end
364
371
  end
365
372
 
@@ -367,14 +374,14 @@ describe Stormpath::Resource::Directory, :vcr do
367
374
  it 'raises Stormpath::Error' do
368
375
  expect do
369
376
  test_api_client.directories.create(
370
- name: 'rubysdkdir',
371
- description: 'description_for_some_test_directory',
377
+ name: directory_name,
378
+ description: directory_name,
372
379
  provider: {
373
- provider_id: "saml",
374
- sso_login_url:"",
375
- sso_logout_url:"",
376
- encoded_x509_signing_cert:"",
377
- request_signature_algorithm:"RSA-SHA256"
380
+ provider_id: 'saml',
381
+ sso_login_url: '',
382
+ sso_logout_url: '',
383
+ encoded_x509_signing_cert: '',
384
+ request_signature_algorithm: 'RSA-SHA256'
378
385
  }
379
386
  )
380
387
  end.to raise_error Stormpath::Error
@@ -383,16 +390,17 @@ describe Stormpath::Resource::Directory, :vcr do
383
390
  end
384
391
 
385
392
  describe 'saml #provider' do
393
+ let(:directory_name) { "rubysdkdirsaml-#{random_number}" }
386
394
  let(:directory) do
387
395
  test_api_client.directories.create(
388
- name: 'rubysdkdir',
389
- description: 'description_for_some_test_directory',
396
+ name: directory_name,
397
+ description: directory_name,
390
398
  provider: {
391
- provider_id: "saml",
392
- sso_login_url:"https://yourIdp.com/saml2/sso/login",
393
- sso_logout_url:"https://yourIdp.com/saml2/sso/logout",
394
- encoded_x509_signing_cert:"-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
395
- request_signature_algorithm:"RSA-SHA256"
399
+ provider_id: 'saml',
400
+ sso_login_url: 'https://yourIdp.com/saml2/sso/login',
401
+ sso_logout_url: 'https://yourIdp.com/saml2/sso/logout',
402
+ encoded_x509_signing_cert: "-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
403
+ request_signature_algorithm: 'RSA-SHA256'
396
404
  }
397
405
  )
398
406
  end
@@ -402,33 +410,34 @@ describe Stormpath::Resource::Directory, :vcr do
402
410
  end
403
411
 
404
412
  it 'returnes provider data' do
405
- stub_request(:post, "https://api.stormpath.com/v1/directories").
406
- to_return(status:200, body: fixture('create_saml_directory.json'), headers:{})
413
+ stub_request(:post, 'https://api.stormpath.com/v1/directories')
414
+ .to_return(status: 200, body: Stormpath::Test.mocked_create_saml_directory)
407
415
 
408
- stub_request(:get, directory.href + "/provider").
409
- to_return(status: 200, body: fixture('get_saml_directory_provider.json'), headers:{})
416
+ stub_request(:get, directory.href + '/provider')
417
+ .to_return(status: 200, body: Stormpath::Test.mocked_saml_directory_provider_response)
410
418
 
411
419
  directory
412
420
  expect(directory.provider.href).not_to be_empty
413
- expect(directory.provider.provider_id).to eq("saml")
414
- expect(directory.provider.sso_login_url).to eq("https://yourIdp.com/saml2/sso/login")
415
- expect(directory.provider.sso_logout_url).to eq("https://yourIdp.com/saml2/sso/logout")
421
+ expect(directory.provider.provider_id).to eq('saml')
422
+ expect(directory.provider.sso_login_url).to eq('https://yourIdp.com/saml2/sso/login')
423
+ expect(directory.provider.sso_logout_url).to eq('https://yourIdp.com/saml2/sso/logout')
416
424
  expect(directory.provider.encoded_x509_signing_cert).not_to be_empty
417
- expect(directory.provider.request_signature_algorithm).to eq("RSA-SHA256")
425
+ expect(directory.provider.request_signature_algorithm).to eq('RSA-SHA256')
418
426
  end
419
427
  end
420
428
 
421
- describe 'saml #provider_metadata' do
429
+ describe 'saml #service_provider_metadata' do
430
+ let(:directory_name) { "rubysdkdirsaml-#{random_number}" }
422
431
  let(:directory) do
423
432
  test_api_client.directories.create(
424
- name: 'rubysdkdir',
433
+ name: directory_name,
425
434
  description: 'description_for_some_test_directory',
426
435
  provider: {
427
- provider_id: "saml",
428
- sso_login_url:"https://yourIdp.com/saml2/sso/login",
429
- sso_logout_url:"https://yourIdp.com/saml2/sso/logout",
430
- encoded_x509_signing_cert:"-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
431
- request_signature_algorithm:"RSA-SHA256"
436
+ provider_id: 'saml',
437
+ sso_login_url: 'https://yourIdp.com/saml2/sso/login',
438
+ sso_logout_url: 'https://yourIdp.com/saml2/sso/logout',
439
+ encoded_x509_signing_cert: "-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
440
+ request_signature_algorithm: 'RSA-SHA256'
432
441
  }
433
442
  )
434
443
  end
@@ -437,34 +446,35 @@ describe Stormpath::Resource::Directory, :vcr do
437
446
  directory.delete if directory
438
447
  end
439
448
 
440
- it 'returnes provider metadata' do
441
- stub_request(:post, "https://api.stormpath.com/v1/directories").
442
- to_return(status:200, body: fixture('create_saml_directory.json'), headers:{})
449
+ it 'returnes service provider metadata' do
450
+ stub_request(:post, 'https://api.stormpath.com/v1/directories')
451
+ .to_return(status: 200, body: Stormpath::Test.mocked_create_saml_directory)
443
452
 
444
- stub_request(:get, directory.href + "/provider").
445
- to_return(status: 200, body: fixture('get_saml_directory_provider.json'), headers:{})
453
+ stub_request(:get, directory.href + '/provider')
454
+ .to_return(status: 200, body: Stormpath::Test.mocked_saml_directory_provider_response)
455
+ stub_request(:get, directory.service_provider_metadata.href)
456
+ .to_return(body: Stormpath::Test.mocked_saml_directory_provider_metadata_response, status: 200)
446
457
 
447
- stub_request(:get, directory.provider.service_provider_metadata["href"]).
448
- to_return(status: 200, body: fixture('get_saml_directory_provider_metadata.json'), headers: {})
449
-
450
- expect(directory.provider_metadata.href).not_to be_empty
451
- expect(directory.provider_metadata.entity_id).not_to be_empty
452
- expect(directory.provider_metadata.assertion_consumer_service_post_endpoint).not_to be_empty
453
- expect(directory.provider_metadata.x509_signing_cert).not_to be_empty
458
+ expect(directory.service_provider_metadata.href).not_to be_empty
459
+ expect(directory.service_provider_metadata.entity_id).not_to be_empty
460
+ expect(directory.service_provider_metadata.assertion_consumer_service_post_endpoint).not_to be_empty
461
+ expect(directory.service_provider_metadata.x509_signing_cert).not_to be_empty
454
462
  end
455
463
  end
456
464
 
457
465
  describe 'saml mapping rules' do
466
+ let(:directory_name) { "rubysdkdirsaml-#{random_number}" }
467
+ let(:rule) { { 'name' => 'email', 'accountAttributes' => ['email'] } }
458
468
  let(:directory) do
459
469
  test_api_client.directories.create(
460
- name: 'rubysdkdir',
470
+ name: directory_name,
461
471
  description: 'description_for_some_test_directory',
462
472
  provider: {
463
- provider_id: "saml",
464
- sso_login_url:"https://yourIdp.com/saml2/sso/login",
465
- sso_logout_url:"https://yourIdp.com/saml2/sso/logout",
466
- encoded_x509_signing_cert:"-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
467
- request_signature_algorithm:"RSA-SHA256"
473
+ provider_id: 'saml',
474
+ sso_login_url: 'https://yourIdp.com/saml2/sso/login',
475
+ sso_logout_url: 'https://yourIdp.com/saml2/sso/logout',
476
+ encoded_x509_signing_cert: Stormpath::Test.mocked_encoded_x509_signing_cert,
477
+ request_signature_algorithm: 'RSA-SHA256'
468
478
  }
469
479
  )
470
480
  end
@@ -474,26 +484,19 @@ describe Stormpath::Resource::Directory, :vcr do
474
484
  end
475
485
 
476
486
  it 'updates the directory mappings' do
477
- mappings = Stormpath::Provider::SamlMappingRules.new(items: [
478
- {
479
- name: "uid",
480
- account_attributes: ["username"]
481
- }
482
- ])
487
+ stub_request(:post, 'https://api.stormpath.com/v1/directories')
488
+ .to_return(status: 200, body: Stormpath::Test.mocked_create_saml_directory)
483
489
 
484
- stub_request(:post, "https://api.stormpath.com/v1/directories").
485
- to_return(status:200, body: fixture('create_saml_directory.json'), headers:{})
490
+ stub_request(:get, directory.href + '/provider')
491
+ .to_return(status: 200, body: Stormpath::Test.mocked_saml_directory_provider_response)
486
492
 
487
- stub_request(:get, directory.href + "/provider").
488
- to_return(status: 200, body: fixture('get_saml_directory_provider.json'), headers:{})
493
+ stub_request(:post, directory.provider.attribute_statement_mapping_rules.href)
494
+ .to_return(status: 200, body: Stormpath::Test.mocked_create_saml_directory_rules)
489
495
 
490
- stub_request(:post, directory.provider.attribute_statement_mapping_rules["href"]).
491
- to_return(status:200, body: fixture('create_saml_directory_mapping_rules.json'), headers:{})
492
-
493
- response = directory.create_attribute_mappings(mappings)
494
- expect(response.items).to eq( [ { "name" => "uid4", "name_format" => "nil", "account_attributes" => ["username"] } ] )
496
+ directory.attribute_statement_mapping_rules.items = [rule]
497
+ response = directory.attribute_statement_mapping_rules.save
498
+ expect(response.items).to eq([{ 'name' => 'uid4', 'name_format' => 'nil', 'account_attributes' => ['username'] }])
495
499
  end
496
-
497
500
  end
498
501
 
499
502
  describe '#create_account_with_custom_data' do
@@ -522,13 +525,14 @@ describe Stormpath::Resource::Directory, :vcr do
522
525
  after { directory.delete }
523
526
 
524
527
  context 'given a valid group' do
525
- let(:created_group) { directory.groups.create(group_attrs(name: 'rubysdkgroup')) }
528
+ let(:group_name) { "rubysdkgroup#{random_number}" }
529
+ let(:created_group) { directory.groups.create(group_attrs(name: group_name)) }
526
530
 
527
531
  after { created_group.delete }
528
532
 
529
533
  it 'creates a group' do
530
534
  expect(created_group).to be
531
- expect(created_group.name).to eq('rubysdkgroup')
535
+ expect(created_group.name).to eq(group_name)
532
536
  end
533
537
  end
534
538
  end