stormpath-sdk 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/.ruby-gemset +0 -0
  4. data/.travis.yml +1 -0
  5. data/CHANGES.md +20 -0
  6. data/Gemfile +0 -0
  7. data/README.md +78 -2
  8. data/Rakefile +0 -0
  9. data/lib/stormpath-sdk/api_key.rb +0 -0
  10. data/lib/stormpath-sdk/auth/authentication_result.rb +0 -0
  11. data/lib/stormpath-sdk/auth/basic_authenticator.rb +0 -0
  12. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +0 -0
  13. data/lib/stormpath-sdk/auth/http_basic_authentication.rb +47 -0
  14. data/lib/stormpath-sdk/auth/http_bearer_authentication.rb +27 -0
  15. data/lib/stormpath-sdk/auth/username_password_request.rb +0 -0
  16. data/lib/stormpath-sdk/cache/cache.rb +0 -0
  17. data/lib/stormpath-sdk/cache/cache_entry.rb +0 -0
  18. data/lib/stormpath-sdk/cache/cache_manager.rb +0 -0
  19. data/lib/stormpath-sdk/cache/cache_stats.rb +0 -0
  20. data/lib/stormpath-sdk/cache/disabled_cache_store.rb +0 -0
  21. data/lib/stormpath-sdk/cache/memcached_store.rb +37 -0
  22. data/lib/stormpath-sdk/cache/memory_store.rb +0 -0
  23. data/lib/stormpath-sdk/cache/redis_store.rb +0 -0
  24. data/lib/stormpath-sdk/client.rb +0 -0
  25. data/lib/stormpath-sdk/data_store.rb +1 -0
  26. data/lib/stormpath-sdk/error.rb +5 -5
  27. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +0 -0
  28. data/lib/stormpath-sdk/http/http_client_request_executor.rb +2 -3
  29. data/lib/stormpath-sdk/http/request.rb +12 -10
  30. data/lib/stormpath-sdk/http/response.rb +0 -0
  31. data/lib/stormpath-sdk/http/utils.rb +8 -5
  32. data/lib/stormpath-sdk/id_site/id_site_result.rb +0 -0
  33. data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +0 -0
  34. data/lib/stormpath-sdk/oauth/authenticator.rb +2 -1
  35. data/lib/stormpath-sdk/oauth/error.rb +12 -8
  36. data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +0 -0
  37. data/lib/stormpath-sdk/oauth/local_access_token_verification.rb +45 -0
  38. data/lib/stormpath-sdk/oauth/password_grant.rb +9 -7
  39. data/lib/stormpath-sdk/oauth/password_grant_request.rb +3 -2
  40. data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +0 -0
  41. data/lib/stormpath-sdk/oauth/remote_access_token_verification.rb +28 -0
  42. data/lib/stormpath-sdk/oauth/social_grant.rb +27 -0
  43. data/lib/stormpath-sdk/oauth/social_grant_request.rb +14 -0
  44. data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +3 -2
  45. data/lib/stormpath-sdk/oauth/verify_access_token.rb +11 -6
  46. data/lib/stormpath-sdk/oauth/{verify_token.rb → verify_token_result.rb} +1 -1
  47. data/lib/stormpath-sdk/provider/account_access.rb +0 -0
  48. data/lib/stormpath-sdk/provider/account_request.rb +0 -0
  49. data/lib/stormpath-sdk/provider/account_resolver.rb +0 -0
  50. data/lib/stormpath-sdk/provider/account_result.rb +0 -0
  51. data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +0 -0
  52. data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +0 -0
  53. data/lib/stormpath-sdk/provider/github/github_provider.rb +0 -0
  54. data/lib/stormpath-sdk/provider/github/github_provider_data.rb +0 -0
  55. data/lib/stormpath-sdk/provider/google/google_provider.rb +0 -0
  56. data/lib/stormpath-sdk/provider/google/google_provider_data.rb +0 -1
  57. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +0 -0
  58. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +0 -0
  59. data/lib/stormpath-sdk/provider/provider.rb +0 -0
  60. data/lib/stormpath-sdk/provider/provider_data.rb +0 -0
  61. data/lib/stormpath-sdk/provider/saml/saml_mapping_rules.rb +0 -0
  62. data/lib/stormpath-sdk/provider/saml/saml_provider.rb +0 -0
  63. data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +0 -0
  64. data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -0
  65. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +0 -0
  66. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +0 -0
  67. data/lib/stormpath-sdk/resource/access_token.rb +0 -0
  68. data/lib/stormpath-sdk/resource/account_creation_policy.rb +3 -1
  69. data/lib/stormpath-sdk/resource/account_membership.rb +0 -0
  70. data/lib/stormpath-sdk/resource/account_overrides.rb +0 -0
  71. data/lib/stormpath-sdk/resource/account_store.rb +7 -8
  72. data/lib/stormpath-sdk/resource/account_store_mapping.rb +0 -0
  73. data/lib/stormpath-sdk/resource/application.rb +5 -5
  74. data/lib/stormpath-sdk/resource/base.rb +0 -0
  75. data/lib/stormpath-sdk/resource/collection.rb +0 -0
  76. data/lib/stormpath-sdk/resource/custom_data.rb +0 -0
  77. data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +0 -0
  78. data/lib/stormpath-sdk/resource/custom_data_storage.rb +0 -0
  79. data/lib/stormpath-sdk/resource/directory.rb +1 -0
  80. data/lib/stormpath-sdk/resource/email_template.rb +0 -0
  81. data/lib/stormpath-sdk/resource/email_verification_token.rb +0 -0
  82. data/lib/stormpath-sdk/resource/error.rb +2 -3
  83. data/lib/stormpath-sdk/resource/expansion.rb +0 -0
  84. data/lib/stormpath-sdk/resource/group.rb +0 -0
  85. data/lib/stormpath-sdk/resource/group_membership.rb +0 -0
  86. data/lib/stormpath-sdk/resource/instance.rb +0 -0
  87. data/lib/stormpath-sdk/resource/oauth_policy.rb +0 -0
  88. data/lib/stormpath-sdk/resource/organization.rb +1 -1
  89. data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +0 -0
  90. data/lib/stormpath-sdk/resource/password_policy.rb +0 -0
  91. data/lib/stormpath-sdk/resource/password_reset_token.rb +0 -0
  92. data/lib/stormpath-sdk/resource/password_strength.rb +0 -0
  93. data/lib/stormpath-sdk/resource/refresh_token.rb +0 -0
  94. data/lib/stormpath-sdk/resource/tenant.rb +0 -0
  95. data/lib/stormpath-sdk/resource/utils.rb +0 -0
  96. data/lib/stormpath-sdk/resource/verification_email.rb +0 -0
  97. data/lib/stormpath-sdk/util/assert.rb +0 -0
  98. data/lib/stormpath-sdk/util/uri_builder.rb +38 -0
  99. data/lib/stormpath-sdk/version.rb +2 -2
  100. data/lib/stormpath-sdk.rb +47 -39
  101. data/spec/api_key_spec.rb +0 -0
  102. data/spec/auth/basic_authenticator_spec.rb +0 -0
  103. data/spec/auth/http_basic_authentication_spec.rb +86 -0
  104. data/spec/auth/http_bearer_authentication_spec.rb +86 -0
  105. data/spec/auth/sauthc1_signer_spec.rb +0 -0
  106. data/spec/cache/cache_entry_spec.rb +0 -0
  107. data/spec/cache/cache_spec.rb +0 -0
  108. data/spec/cache/cache_stats_spec.rb +0 -0
  109. data/spec/client_spec.rb +0 -0
  110. data/spec/data_store_spec.rb +40 -16
  111. data/spec/fixtures/response/create_saml_directory.json +0 -0
  112. data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -0
  113. data/spec/fixtures/response/get_saml_directory_provider.json +0 -0
  114. data/spec/fixtures/response/get_saml_directory_provider_metadata.json +0 -0
  115. data/spec/oauth/access_token_authentication_result_spec.rb +8 -0
  116. data/spec/provider/account_resolver_spec.rb +0 -0
  117. data/spec/provider/provider_spec.rb +0 -0
  118. data/spec/resource/account_creation_policy_spec.rb +125 -2
  119. data/spec/resource/account_store_mapping_spec.rb +0 -0
  120. data/spec/resource/account_store_spec.rb +40 -13
  121. data/spec/resource/application_spec.rb +268 -51
  122. data/spec/resource/base_spec.rb +0 -0
  123. data/spec/resource/collection_spec.rb +60 -2
  124. data/spec/resource/custom_data_spec.rb +0 -0
  125. data/spec/resource/directory_spec.rb +82 -1
  126. data/spec/resource/email_template_spec.rb +0 -0
  127. data/spec/resource/expansion_spec.rb +0 -0
  128. data/spec/resource/group_membership_spec.rb +0 -0
  129. data/spec/resource/group_spec.rb +0 -0
  130. data/spec/resource/organization_spec.rb +37 -8
  131. data/spec/resource/password_policy_spec.rb +0 -0
  132. data/spec/resource/password_strength_spec.rb +0 -0
  133. data/spec/resource/status_spec.rb +0 -0
  134. data/spec/resource/tenant_spec.rb +0 -0
  135. data/spec/spec_helper.rb +5 -6
  136. data/spec/support/custom_data_storage_behavior.rb +0 -0
  137. data/spec/support/mocked_provider_accounts.rb +129 -117
  138. data/spec/support/resource_factory.rb +0 -0
  139. data/spec/support/resource_matchers.rb +7 -0
  140. data/spec/support/test_cache_stores.rb +0 -0
  141. data/spec/support/test_request_executor.rb +0 -0
  142. data/spec/util/uri_builder_spec.rb +47 -0
  143. data/stormpath-sdk.gemspec +1 -0
  144. data/support/api.rb +0 -0
  145. metadata +29 -4
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'HttpBearerAuthentication', vcr: true do
4
+ let(:application) { test_api_client.applications.create(name: 'ruby sdk test app') }
5
+ let(:directory) { test_api_client.directories.create(name: random_directory_name) }
6
+ let(:account) do
7
+ application.accounts.create(
8
+ email: 'test@example.com',
9
+ given_name: 'Ruby SDK',
10
+ password: 'P@$$w0rd',
11
+ surname: 'SDK'
12
+ )
13
+ end
14
+ let(:password_grant_request) do
15
+ Stormpath::Oauth::PasswordGrantRequest.new('test@example.com', 'P@$$w0rd')
16
+ end
17
+ let(:aquire_token) { application.authenticate_oauth(password_grant_request) }
18
+
19
+ let(:access_token) { aquire_token.access_token }
20
+ let(:bearer_authorization_header) { "Bearer #{access_token}" }
21
+ let(:authenticate_locally) do
22
+ Stormpath::Authentication::HttpBearerAuthentication.new(application,
23
+ bearer_authorization_header,
24
+ local: true).authenticate!
25
+ end
26
+ let(:authenticate_remotely) do
27
+ Stormpath::Authentication::HttpBearerAuthentication.new(application,
28
+ bearer_authorization_header).authenticate!
29
+ end
30
+ before do
31
+ test_api_client.account_store_mappings.create(application: application,
32
+ account_store: directory,
33
+ list_index: 1,
34
+ is_default_account_store: true,
35
+ is_default_group_store: true)
36
+ account
37
+ end
38
+
39
+ after do
40
+ account.delete
41
+ directory.delete
42
+ application.delete
43
+ end
44
+
45
+ describe 'remote authentication' do
46
+ context 'with a valid bearer authorization header' do
47
+ it 'should return VerifyTokenResult' do
48
+ expect(authenticate_remotely).to be_kind_of(Stormpath::Oauth::VerifyTokenResult)
49
+ expect(authenticate_remotely.account).to eq(account)
50
+ end
51
+
52
+ it 'should contain the account' do
53
+ expect(authenticate_remotely.account).to eq(account)
54
+ end
55
+ end
56
+
57
+ context 'with no bearer authorization header' do
58
+ let(:bearer_authorization_header) { nil }
59
+
60
+ it 'should raise error' do
61
+ expect do
62
+ authenticate_remotely
63
+ end.to raise_error(Stormpath::Error)
64
+ end
65
+ end
66
+
67
+ context 'with invalid authorization header type' do
68
+ let(:bearer_authorization_header) { "Basic #{access_token}" }
69
+
70
+ it 'should raise error' do
71
+ expect do
72
+ authenticate_remotely
73
+ end.to raise_error(Stormpath::Error)
74
+ end
75
+ end
76
+ end
77
+
78
+ describe 'local authentication' do
79
+ context 'with a valid bearer authorization header' do
80
+ it 'should return account' do
81
+ expect(authenticate_locally).to be_kind_of(Stormpath::Oauth::LocalAccessTokenVerificationResult)
82
+ expect(authenticate_locally.account).to eq(account)
83
+ end
84
+ end
85
+ end
86
+ end
File without changes
File without changes
File without changes
File without changes
data/spec/client_spec.rb CHANGED
File without changes
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Stormpath::DataStore do
3
+ shared_examples 'a data store' do
4
4
  let(:factory) { Stormpath::Test::ResourceFactory.new }
5
5
  let(:request_executor) { Stormpath::Test::TestRequestExecutor.new }
6
- let(:store) { Stormpath::Cache::RedisStore }
7
- let(:data_store) { Stormpath::DataStore.new request_executor, test_api_key, {store: store}, nil, nil }
6
+ let(:data_store) do
7
+ Stormpath::DataStore.new(request_executor, test_api_key, { store: store }, nil)
8
+ end
8
9
  let(:application_cache) { data_store.cache_manager.get_cache 'applications' }
9
10
  let(:tenant_cache) { data_store.cache_manager.get_cache 'tenants' }
10
11
  let(:group_cache) { data_store.cache_manager.get_cache 'groups' }
@@ -16,12 +17,13 @@ describe Stormpath::DataStore do
16
17
 
17
18
  describe '.region_for' do
18
19
  it 'pulls resource name from href' do
19
- region = data_store.send :region_for, default_base_url+"/directories/4NykYrYH0OBiOOVOg8LXQ5"
20
+ region = data_store.send :region_for, "#{default_base_url}/directories/4NykYrYH0OBiOOVOg8LXQ5"
20
21
  expect(region).to eq('directories')
21
22
  end
22
23
 
23
24
  it 'pulls resource name from href if its custom data also' do
24
- region = data_store.send :region_for, default_base_url+"/v1/accounts/7jWpcEVSgawKkAZp8XDIEw/customData"
25
+ region = data_store.send(:region_for,
26
+ "#{default_base_url}/v1/accounts/7jWpcEVSgawKkAZp8XDIEw/customData")
25
27
  expect(region).to eq('customData')
26
28
  end
27
29
  end
@@ -30,13 +32,19 @@ describe Stormpath::DataStore do
30
32
  let(:custom_data_delete_field_url_regex) { data_store.send :custom_data_delete_field_url_regex }
31
33
  context 'CUSTOM_DATA_DELETE_FIELD_REGEX' do
32
34
  it 'should match custom data field href' do
33
- expect(default_base_url+"/accounts/2f8U7r5JweVf1ZTtcJ08L8/customData/rank").to match(custom_data_delete_field_url_regex)
34
- expect(default_base_url+"/groups/4x6vwucf1w9wjHvt7paGoY/customData/rank").to match(custom_data_delete_field_url_regex)
35
+ expect("#{default_base_url}/accounts/2f8U7r5JweVf1ZTtcJ08L8/customData/rank")
36
+ .to match(custom_data_delete_field_url_regex)
37
+
38
+ expect("#{default_base_url}/groups/4x6vwucf1w9wjHvt7paGoY/customData/rank")
39
+ .to match(custom_data_delete_field_url_regex)
35
40
  end
36
41
 
37
42
  it 'should not match custom data resource href' do
38
- expect(default_base_url+"/accounts/2f8U7r5JweVf1ZTtcJ08L8/customData").not_to match(custom_data_delete_field_url_regex)
39
- expect(default_base_url+"/groups/4x6vwucf1w9wjHvt7paGoY/customData").not_to match(custom_data_delete_field_url_regex)
43
+ expect("#{default_base_url}/accounts/2f8U7r5JweVf1ZTtcJ08L8/customData")
44
+ .not_to match(custom_data_delete_field_url_regex)
45
+
46
+ expect("#{default_base_url}/groups/4x6vwucf1w9wjHvt7paGoY/customData")
47
+ .not_to match(custom_data_delete_field_url_regex)
40
48
  end
41
49
  end
42
50
  end
@@ -79,7 +87,7 @@ describe Stormpath::DataStore do
79
87
  end
80
88
 
81
89
  it 'misses the cache on the get' do
82
- expect(application_cache.stats.hits).to eq(1) # this hit is when we grab @cached
90
+ expect(application_cache.stats.hits).to eq(1) # this hit is when we grab @cached
83
91
  expect(application_cache.stats.misses).to eq(1)
84
92
  end
85
93
 
@@ -146,24 +154,40 @@ describe Stormpath::DataStore do
146
154
  expect(group_cache.size).to eq(4)
147
155
  end
148
156
  end
149
-
150
157
  end
151
158
 
152
159
  context '#apply_default_user_agent' do
153
160
  let(:request) do
154
- Stormpath::Http::Request.new 'get', 'http://example.com/resources/abc123', nil, Hash.new, nil, test_api_key
161
+ Stormpath::Http::Request.new('get',
162
+ 'http://example.com/resources/abc123',
163
+ nil,
164
+ {},
165
+ nil,
166
+ test_api_key)
155
167
  end
156
168
 
157
169
  before do
158
- allow(Gem::Platform.local).to receive(:os) { "darwin" }
159
- allow(Gem::Platform.local).to receive(:version) { "14" }
170
+ allow(Gem::Platform.local).to receive(:os) { 'darwin' }
171
+ allow(Gem::Platform.local).to receive(:version) { '14' }
160
172
 
161
173
  data_store.send(:apply_default_user_agent, request)
162
174
  end
163
175
 
164
176
  it 'adds User-Agent to header' do
165
- expect(request.http_headers["User-Agent"]).to include("darwin")
166
- expect(request.http_headers["User-Agent"]).to include("14")
177
+ expect(request.http_headers['User-Agent']).to include('darwin')
178
+ expect(request.http_headers['User-Agent']).to include('14')
167
179
  end
168
180
  end
169
181
  end
182
+
183
+ describe Stormpath::DataStore do
184
+ context 'redis store' do
185
+ let(:store) { Stormpath::Cache::RedisStore }
186
+ it_should_behave_like 'a data store'
187
+ end
188
+
189
+ context 'memcached store' do
190
+ let(:store) { Stormpath::Cache::MemcachedStore }
191
+ it_should_behave_like 'a data store'
192
+ end
193
+ end
File without changes
@@ -22,6 +22,10 @@ describe Stormpath::Oauth::AccessTokenAuthenticationResult, :vcr do
22
22
  expect(jwt_authentication_result.account).to eq(account)
23
23
  end
24
24
 
25
+ it 'jwt access token should contain the stt header' do
26
+ expect(jwt_authentication_result.access_token).to have_stt_in_header('access')
27
+ end
28
+
25
29
  it 'should be able to delete the access token' do
26
30
  jwt_authentication_result
27
31
 
@@ -36,6 +40,10 @@ describe Stormpath::Oauth::AccessTokenAuthenticationResult, :vcr do
36
40
  expect(account.access_tokens.count).to eq(0)
37
41
  end
38
42
 
43
+ it 'jwt refresh token should contain the stt header' do
44
+ expect(jwt_authentication_result.refresh_token).to have_stt_in_header('refresh')
45
+ end
46
+
39
47
  it 'should be able to delete the refresh token' do
40
48
  jwt_authentication_result
41
49
 
File without changes
File without changes
@@ -1,10 +1,28 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::AccountCreationPolicy, :vcr do
4
- describe "instances should respond to attribute property methods" do
4
+ describe 'instances should respond to attribute property methods' do
5
5
  let(:application) { test_application }
6
6
  let(:directory) { test_api_client.directories.create(name: random_directory_name) }
7
7
  let(:account_creation_policy) { directory.account_creation_policy }
8
+ let(:create_valid_account) do
9
+ directory.accounts.create(
10
+ username: 'cilim',
11
+ email: 'cilim@infinum.co',
12
+ given_name: 'Marko',
13
+ surname: 'Cilimkovic',
14
+ password: 'wonderfulWeatherIsntIt2'
15
+ )
16
+ end
17
+ let(:create_invalid_account) do
18
+ directory.accounts.create(
19
+ username: 'cilim',
20
+ email: 'cilim@infinum.hr',
21
+ given_name: 'Marko',
22
+ surname: 'Cilimkovic',
23
+ password: 'wonderfulWeatherIsntIt2'
24
+ )
25
+ end
8
26
 
9
27
  before do
10
28
  test_api_client.account_store_mappings.create(
@@ -23,7 +41,9 @@ describe Stormpath::Resource::AccountCreationPolicy, :vcr do
23
41
 
24
42
  [:welcome_email_status,
25
43
  :verification_email_status,
26
- :verification_success_email_status].each do |property_accessor|
44
+ :verification_success_email_status,
45
+ :email_domain_whitelist,
46
+ :email_domain_blacklist].each do |property_accessor|
27
47
  expect(account_creation_policy).to respond_to(property_accessor)
28
48
  expect(account_creation_policy).to respond_to("#{property_accessor}=")
29
49
  end
@@ -57,5 +77,108 @@ describe Stormpath::Resource::AccountCreationPolicy, :vcr do
57
77
  account_creation_policy.save
58
78
  expect(directory.account_creation_policy.verification_success_email_status).to eq('ENABLED')
59
79
  end
80
+
81
+ it 'can change whitelisted email domains' do
82
+ whitelisted = ['*infinum.co', '*infinum.hr']
83
+ account_creation_policy.email_domain_whitelist = whitelisted
84
+ account_creation_policy.save
85
+ expect(directory.account_creation_policy.email_domain_whitelist).to eq whitelisted
86
+
87
+ account_creation_policy.email_domain_whitelist = ['*infinum.hr']
88
+ account_creation_policy.save
89
+ expect(directory.account_creation_policy.email_domain_whitelist).to include '*infinum.hr'
90
+ expect(directory.account_creation_policy.email_domain_whitelist).not_to include '*infinum.co'
91
+ end
92
+
93
+ it 'can change blacklisted email domains' do
94
+ blacklisted = ['*spam.com', '*e1ppe.ro']
95
+ account_creation_policy.email_domain_blacklist = blacklisted
96
+ account_creation_policy.save
97
+ expect(directory.account_creation_policy.email_domain_blacklist).to eq blacklisted
98
+
99
+ account_creation_policy.email_domain_blacklist = ['*spam.com']
100
+ account_creation_policy.save
101
+ expect(directory.account_creation_policy.email_domain_blacklist).to include '*spam.com'
102
+ expect(directory.account_creation_policy.email_domain_blacklist).not_to include '*e1ppe.ro'
103
+ end
104
+
105
+ context 'when domain not string' do
106
+ it 'should raise error' do
107
+ blacklisted = ['*spam.com', 12345]
108
+ account_creation_policy.email_domain_blacklist = blacklisted
109
+ expect do
110
+ account_creation_policy.save
111
+ end.to raise_error(Stormpath::Error, /is an invalid type./)
112
+ end
113
+ end
114
+
115
+ context 'when domain invalid' do
116
+ it 'should raise error' do
117
+ blacklisted = ['*spam.com', '*youre@jiberish']
118
+ account_creation_policy.email_domain_blacklist = blacklisted
119
+ expect do
120
+ account_creation_policy.save
121
+ end.to raise_error(Stormpath::Error, /It is not a valid domain./)
122
+ end
123
+ end
124
+
125
+ describe 'create account' do
126
+ context 'when whitelisted domains exist' do
127
+ before do
128
+ whitelisted = ['*infinum.co']
129
+ account_creation_policy.email_domain_whitelist = whitelisted
130
+ account_creation_policy.save
131
+ end
132
+
133
+ context 'when account whitelisted' do
134
+ it 'should successfully create the account' do
135
+ account = create_valid_account
136
+ expect(account).to be_a Stormpath::Resource::Account
137
+ expect(account.username).to eq('cilim')
138
+ end
139
+ end
140
+
141
+ context 'when account not whitelisted' do
142
+ it 'should raise error' do
143
+ expect do
144
+ create_invalid_account
145
+ end.to raise_error(Stormpath::Error, "Cannot create the Account because your email's domain is not allowed.")
146
+ end
147
+ end
148
+ end
149
+
150
+ context 'when blacklisted domains exist' do
151
+ context 'when account email blacklisted' do
152
+ it 'should not create the account' do
153
+ blacklisted = ['*spam.com']
154
+ account_creation_policy.email_domain_blacklist = blacklisted
155
+ account_creation_policy.save
156
+
157
+ expect do
158
+ @account = directory.accounts.create(
159
+ username: 'cilim',
160
+ email: 'cilim@spam.com',
161
+ given_name: 'Marko',
162
+ surname: 'Cilimkovic',
163
+ password: 'wonderfulWeatherIsntIt2'
164
+ )
165
+ end.to raise_error(Stormpath::Error, "Cannot create the Account because your email's domain is not allowed.")
166
+ end
167
+ end
168
+ end
169
+
170
+ context 'when account email in blacklisted and whitelisted domains' do
171
+ it 'should not create the account' do
172
+ bothlisted = ['*infinum.hr']
173
+ account_creation_policy.email_domain_blacklist = bothlisted
174
+ account_creation_policy.email_domain_whitelist = bothlisted
175
+ account_creation_policy.save
176
+
177
+ expect do
178
+ create_invalid_account
179
+ end.to raise_error(Stormpath::Error, "Cannot create the Account because your email's domain is not allowed.")
180
+ end
181
+ end
182
+ end
60
183
  end
61
184
  end
File without changes
@@ -1,49 +1,76 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::AccountStore, :vcr do
4
-
5
- def create_account_store_mapping(application, account_store, is_default_group_store=false)
6
- test_api_client.account_store_mappings.create({
4
+ def create_account_store_mapping(application, account_store, is_default_group_store = false)
5
+ test_api_client.account_store_mappings.create(
7
6
  application: application,
8
7
  account_store: account_store,
9
8
  list_index: 0,
10
9
  is_default_account_store: true,
11
10
  is_default_group_store: is_default_group_store
12
- })
11
+ )
12
+ end
13
+
14
+ let(:application) do
15
+ test_api_client.applications.create name: random_application_name,
16
+ description: 'testApplication for AccountStoreMappings'
13
17
  end
14
18
 
15
- let(:application) { test_api_client.applications.create name: random_application_name, description: 'testApplication for AccountStoreMappings' }
19
+ let(:directory) do
20
+ test_api_client.directories.create name: random_directory_name,
21
+ description: 'testDirectory for AccountStoreMappings'
22
+ end
16
23
 
17
- let(:directory) { test_api_client.directories.create name: random_directory_name, description: 'testDirectory for AccountStoreMappings' }
24
+ let(:group) do
25
+ directory.groups.create name: 'testGroup', description: 'testGroup for AccountStoreMappings'
26
+ end
18
27
 
19
- let(:group) { directory.groups.create name: 'testGroup', description: 'testGroup for AccountStoreMappings' }
28
+ let(:organization) do
29
+ test_api_client.organizations.create name: 'testOrganization', name_key: 'test-organization'
30
+ end
20
31
 
21
32
  after do
22
33
  application.delete if application
23
34
  group.delete if group
24
35
  directory.delete if directory
36
+ organization.delete if organization
25
37
  end
26
38
 
27
39
  describe 'given an account_store_mapping and a directory' do
28
- let!(:account_store_mapping) {create_account_store_mapping(application,directory,true)}
29
- let(:reloaded_mapping){ application.account_store_mappings.get account_store_mapping.href }
40
+ let!(:account_store_mapping) { create_account_store_mapping(application, directory, true) }
41
+ let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
30
42
 
31
43
  it 'should return a directory' do
32
44
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Directory)
33
45
  expect(reloaded_mapping.account_store).to eq(directory)
34
46
  end
35
-
36
47
  end
37
48
 
38
- describe 'given an account_store_mapping and a group' do
39
- let!(:account_store_mapping) {create_account_store_mapping(application,group)}
40
- let(:reloaded_mapping){ application.account_store_mappings.get account_store_mapping.href }
49
+ describe 'given an account_store_mapping and a group' do
50
+ let!(:account_store_mapping) { create_account_store_mapping(application, group) }
51
+ let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
41
52
 
42
53
  it 'should return a group' do
43
54
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Group)
44
55
  expect(reloaded_mapping.account_store).to eq(group)
45
56
  end
57
+ end
58
+
59
+ describe 'given an account_store_mapping and an organization' do
60
+ let!(:account_store_mapping) { create_account_store_mapping(application, organization) }
61
+ let(:reloaded_mapping) { application.account_store_mappings.get account_store_mapping.href }
46
62
 
63
+ it 'should return an organization' do
64
+ expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Organization)
65
+ expect(reloaded_mapping.account_store).to eq(organization)
66
+ end
47
67
  end
48
68
 
69
+ describe 'given an undefined account_store_mapping' do
70
+ it 'should raise an error' do
71
+ expect do
72
+ create_account_store_mapping(application, 'undefined')
73
+ end.to raise_error
74
+ end
75
+ end
49
76
  end