stormpath-sdk 1.3.0 → 1.3.1

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +0 -3
  4. data/CHANGES.md +9 -0
  5. data/README.md +8 -21
  6. data/Rakefile +1 -15
  7. data/lib/stormpath-sdk/oauth/error.rb +21 -0
  8. data/lib/stormpath-sdk/oauth/local_access_token_verification.rb +2 -2
  9. data/lib/stormpath-sdk/oauth/remote_access_token_verification.rb +2 -2
  10. data/lib/stormpath-sdk/version.rb +2 -2
  11. data/spec/auth/http_basic_authentication_spec.rb +6 -21
  12. data/spec/auth/http_bearer_authentication_spec.rb +11 -24
  13. data/spec/client_spec.rb +116 -258
  14. data/spec/oauth/access_token_authentication_result_spec.rb +14 -14
  15. data/spec/provider/provider_spec.rb +32 -40
  16. data/spec/resource/account_creation_policy_spec.rb +8 -13
  17. data/spec/resource/account_link_spec.rb +4 -17
  18. data/spec/resource/account_spec.rb +37 -81
  19. data/spec/resource/account_store_mapping_spec.rb +20 -32
  20. data/spec/resource/account_store_spec.rb +8 -31
  21. data/spec/resource/api_key_spec.rb +11 -14
  22. data/spec/resource/application_spec.rb +39 -168
  23. data/spec/resource/collection_spec.rb +17 -17
  24. data/spec/resource/custom_data_spec.rb +2 -2
  25. data/spec/resource/directory_spec.rb +164 -240
  26. data/spec/resource/email_template_spec.rb +21 -24
  27. data/spec/resource/group_membership_spec.rb +9 -12
  28. data/spec/resource/group_spec.rb +17 -31
  29. data/spec/resource/linked_account_spec.rb +4 -17
  30. data/spec/resource/organization_spec.rb +38 -110
  31. data/spec/resource/password_policy_spec.rb +13 -16
  32. data/spec/resource/password_strength_spec.rb +15 -18
  33. data/spec/resource/status_spec.rb +32 -35
  34. data/spec/spec_helper.rb +8 -139
  35. data/spec/support/api_key_helpers.rb +34 -0
  36. data/spec/support/custom_data_storage_behavior.rb +139 -156
  37. data/spec/support/env_names_warning.rb +59 -0
  38. data/spec/support/resource_helpers.rb +84 -0
  39. data/spec/support/resource_matchers.rb +6 -0
  40. data/stormpath-sdk.gemspec +1 -0
  41. metadata +20 -3
  42. data/support/api.rb +0 -55
@@ -1,22 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Oauth::AccessTokenAuthenticationResult, :vcr do
4
- let(:account_data) { build_account(email: email, password: password) }
5
-
6
- let(:email) { random_email }
7
-
8
- let(:password) { 'P@$$w0rd' }
9
-
10
- let(:account) { test_application.accounts.create(account_data) }
11
-
12
- let(:password_grant_request) { Stormpath::Oauth::PasswordGrantRequest.new(email, password) }
13
-
14
- let(:jwt_authentication_result) do
15
- test_application.authenticate_oauth(password_grant_request)
4
+ let(:application) { test_api_client.applications.create(build_application) }
5
+ let(:directory) { test_api_client.directories.create(build_directory) }
6
+ before { map_account_store(application, directory, 1, true, false) }
7
+ let!(:account) do
8
+ application.accounts.create(build_account(email: 'ruby25', password: 'P@$$w0rd'))
9
+ end
10
+ let(:password_grant_request) do
11
+ Stormpath::Oauth::PasswordGrantRequest.new("ruby25#{default_domain}", 'P@$$w0rd')
16
12
  end
13
+ let(:jwt_authentication_result) { application.authenticate_oauth(password_grant_request) }
17
14
 
18
- before { account }
19
- after { account.delete }
15
+ after do
16
+ application.delete
17
+ directory.delete
18
+ account.delete
19
+ end
20
20
 
21
21
  it 'instances should expose a method to get an account' do
22
22
  expect(jwt_authentication_result.account).to eq(account)
@@ -1,22 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Provider::Provider, :vcr do
4
-
5
- let(:application) do
6
- test_api_client.applications.create name: random_application_name,
7
- description: 'Test Provider Application for AccountStoreMappings'
8
- end
9
-
10
- let(:account_store_mapping) do
11
- test_api_client.account_store_mappings.create application: application, account_store: directory
12
- end
13
-
14
- let(:directory) do
15
- test_api_client.directories.create directory_hash
16
- end
4
+ let(:application) { test_api_client.applications.create(build_application) }
5
+ let(:account_store_mapping) { map_account_store(application, directory, 0, false, false) }
6
+ let(:directory) { test_api_client.directories.create(directory_hash) }
17
7
 
18
8
  let(:directory_hash) do
19
- Hash.new.tap do |hash|
9
+ {}.tap do |hash|
20
10
  hash[:name] = name
21
11
  hash[:description] = description
22
12
  hash[:provider] = provider_info if defined? provider_info
@@ -35,7 +25,7 @@ describe Stormpath::Provider::Provider, :vcr do
35
25
  shared_examples 'a provider directory' do
36
26
  it { should be_kind_of Stormpath::Provider::Provider }
37
27
 
38
- it "assign provider directory to an application" do
28
+ it 'assign provider directory to an application' do
39
29
  expect(application.account_store_mappings.count).to eq(0)
40
30
  expect(account_store_mapping.application).to eq(application)
41
31
  expect(account_store_mapping.account_store).to eq(directory)
@@ -46,17 +36,17 @@ describe Stormpath::Provider::Provider, :vcr do
46
36
  expect(provider.provider_id).to eq(provider_id)
47
37
  expect(provider.created_at).to be
48
38
  expect(provider.modified_at).to be
49
- expect(provider.href).to eq(directory.href + "/provider")
39
+ expect(provider.href).to eq(directory.href + '/provider')
50
40
 
51
41
  provider_clazz = "Stormpath::Provider::#{provider_id.capitalize}Provider".constantize
52
42
  expect(provider).to be_instance_of(provider_clazz)
53
43
 
54
- if provider_id == "google" || provider_id == "facebook"
44
+ if provider_id == 'google' || provider_id == 'facebook'
55
45
  expect(provider.client_id).to eq(client_id)
56
46
  expect(provider.client_secret).to eq(client_secret)
57
47
  end
58
48
 
59
- if provider_id == "google"
49
+ if provider_id == 'google'
60
50
  expect(provider.redirect_uri).to eq(redirect_uri)
61
51
  end
62
52
  end
@@ -66,15 +56,17 @@ describe Stormpath::Provider::Provider, :vcr do
66
56
  it 'should be able to store provider accounts' do
67
57
  account_store_mapping
68
58
 
69
- access_token = "xyz"
59
+ access_token = 'xyz'
70
60
  request = Stormpath::Provider::AccountRequest.new(provider_id, :access_token, access_token)
71
61
 
72
- stub_request(:post, application.href + "/accounts").to_return(body: Stormpath::Test.mocked_account(provider_id), status: 201)
62
+ stub_request(:post, application.href + '/accounts')
63
+ .to_return(body: Stormpath::Test.mocked_account(provider_id), status: 201)
73
64
  result = application.get_provider_account(request)
74
65
  expect(result.is_new_account?).to be
75
66
  expect(result.account).to be_kind_of(Stormpath::Resource::Account)
76
67
 
77
- stub_request(:get, result.account.href + "/providerData").to_return(body: Stormpath::Test.mocked_provider_data(provider_id))
68
+ stub_request(:get, result.account.href + '/providerData')
69
+ .to_return(body: Stormpath::Test.mocked_provider_data(provider_id))
78
70
 
79
71
  expect(result.account.provider_data).to be_kind_of(Stormpath::Provider::ProviderData)
80
72
  provider_data_clazz = "Stormpath::Provider::#{provider_id.capitalize}ProviderData".constantize
@@ -89,27 +81,22 @@ describe Stormpath::Provider::Provider, :vcr do
89
81
  expect(result.account.provider_data.refresh_token).to be
90
82
  end
91
83
 
92
- stub_request(:post, application.href + "/accounts").to_return(body: Stormpath::Test.mocked_account(provider_id), status: 200)
84
+ stub_request(:post, application.href + '/accounts')
85
+ .to_return(body: Stormpath::Test.mocked_account(provider_id), status: 200)
93
86
  new_result = application.get_provider_account(request)
94
87
  expect(new_result.is_new_account).not_to be
95
88
  end
96
89
  end
97
90
 
98
91
  describe 'create stormpath directory with empty provider credentials' do
99
- let(:name) { random_directory_name('Stormpath') }
92
+ let(:name) { 'Stormpath' }
100
93
  let(:description) { 'Directory for testing Stormpath directories.' }
101
- let(:provider_id) { "stormpath" }
94
+ let(:provider_id) { 'stormpath' }
102
95
 
103
96
  it_behaves_like 'a provider directory'
104
97
 
105
98
  it 'should be able to retrieve provider data from a regular account' do
106
- account = directory.accounts.create({
107
- given_name: 'John',
108
- surname: 'Smith',
109
- email: 'john.smith@example.com',
110
- username: 'johnsmith',
111
- password: '4P@$$w0rd!'
112
- })
99
+ account = directory.accounts.create(build_account)
113
100
 
114
101
  expect(account.provider_data).to be_kind_of(Stormpath::Provider::ProviderData)
115
102
  expect(account.provider_data.provider_id).to eq(provider_id)
@@ -120,10 +107,10 @@ describe Stormpath::Provider::Provider, :vcr do
120
107
  end
121
108
 
122
109
  describe 'create facebook directory with provider credentials' do
123
- let(:name) { random_directory_name('Facebook') }
110
+ let(:name) { 'Facebook' }
124
111
  let(:description) { 'Directory for testing Facebook directories.' }
125
112
 
126
- let(:provider_id) { "facebook" }
113
+ let(:provider_id) { 'facebook' }
127
114
  let(:client_id) { 'FACEBOOK_APP_ID' }
128
115
  let(:client_secret) { 'FACEBOOK_APP_SECRET' }
129
116
  let(:provider_info) do
@@ -135,15 +122,20 @@ describe Stormpath::Provider::Provider, :vcr do
135
122
  end
136
123
 
137
124
  describe 'create google directory with provider credentials' do
138
- let(:name) { random_directory_name('Google') }
125
+ let(:name) { 'Google' }
139
126
  let(:description) { 'Directory for testing Google directories.' }
140
127
 
141
- let(:provider_id) { "google" }
128
+ let(:provider_id) { 'google' }
142
129
  let(:client_id) { 'GOOGLE_CLIENT_ID' }
143
130
  let(:client_secret) { 'GOOGLE_CLIENT_SECRET' }
144
131
  let(:redirect_uri) { 'GOOGLE_REDIRECT_URI' }
145
132
  let(:provider_info) do
146
- { provider_id: provider_id, client_id: client_id, client_secret: client_secret, redirect_uri: redirect_uri }
133
+ {
134
+ provider_id: provider_id,
135
+ client_id: client_id,
136
+ client_secret: client_secret,
137
+ redirect_uri: redirect_uri
138
+ }
147
139
  end
148
140
 
149
141
  it_behaves_like 'a provider directory'
@@ -151,10 +143,10 @@ describe Stormpath::Provider::Provider, :vcr do
151
143
  end
152
144
 
153
145
  describe 'create linkedin directory with provider credentials' do
154
- let(:name) { random_directory_name('Linkedin') }
146
+ let(:name) { 'Linkedin' }
155
147
  let(:description) { 'Directory for testing Linkedin directories.' }
156
148
 
157
- let(:provider_id) { "linkedin" }
149
+ let(:provider_id) { 'linkedin' }
158
150
  let(:client_id) { 'LINKEDIN_APP_ID' }
159
151
  let(:client_secret) { 'LINKEDIN_APP_SECRET' }
160
152
  let(:provider_info) do
@@ -166,10 +158,10 @@ describe Stormpath::Provider::Provider, :vcr do
166
158
  end
167
159
 
168
160
  describe 'create github directory with provider credentials' do
169
- let(:name) { random_directory_name('Github') }
161
+ let(:name) { 'Github' }
170
162
  let(:description) { 'Directory for testing Github directories.' }
171
163
 
172
- let(:provider_id) { "github" }
164
+ let(:provider_id) { 'github' }
173
165
  let(:client_id) { 'GITHUB_APP_ID' }
174
166
  let(:client_secret) { 'GITHUB_APP_SECRET' }
175
167
  let(:provider_info) do
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::AccountCreationPolicy, :vcr do
4
4
  describe 'instances should respond to attribute property methods' do
5
- let(:application) { test_application }
6
- let(:directory) { test_api_client.directories.create(name: random_directory_name) }
5
+ let(:application) { test_api_client.applications.create(build_application) }
6
+ let(:directory) { test_api_client.directories.create(build_directory) }
7
7
  let(:account_creation_policy) { directory.account_creation_policy }
8
8
  let(:create_valid_account) do
9
9
  directory.accounts.create(
@@ -24,17 +24,12 @@ describe Stormpath::Resource::AccountCreationPolicy, :vcr do
24
24
  )
25
25
  end
26
26
 
27
- before do
28
- test_api_client.account_store_mappings.create(
29
- application: application,
30
- account_store: directory,
31
- list_index: 1,
32
- is_default_account_store: false,
33
- is_default_group_store: false
34
- )
35
- end
27
+ before { map_account_store(application, directory, 1, false, false) }
36
28
 
37
- after { directory.delete }
29
+ after do
30
+ application.delete
31
+ directory.delete
32
+ end
38
33
 
39
34
  it do
40
35
  expect(account_creation_policy).to be_a Stormpath::Resource::AccountCreationPolicy
@@ -155,7 +150,7 @@ describe Stormpath::Resource::AccountCreationPolicy, :vcr do
155
150
  account_creation_policy.save
156
151
 
157
152
  expect do
158
- @account = directory.accounts.create(
153
+ directory.accounts.create(
159
154
  username: 'cilim',
160
155
  email: 'cilim@spam.com',
161
156
  given_name: 'Marko',
@@ -12,28 +12,15 @@ describe Stormpath::Resource::AccountLink, :vcr do
12
12
  end
13
13
 
14
14
  before do
15
- test_api_client.account_store_mappings.create(
16
- application: application,
17
- account_store: directory1,
18
- list_index: 1,
19
- is_default_account_store: true,
20
- is_default_group_store: false
21
- )
22
-
23
- test_api_client.account_store_mappings.create(
24
- application: application,
25
- account_store: directory2,
26
- list_index: 2,
27
- is_default_account_store: false,
28
- is_default_group_store: false
29
- )
15
+ map_account_store(application, directory1, 1, true, false)
16
+ map_account_store(application, directory2, 2, false, false)
30
17
  end
31
18
 
32
19
  let!(:account1) do
33
- directory1.accounts.create(build_account(email: 'jekyll@example.com', username: 'account1'))
20
+ directory1.accounts.create(build_account(email: 'jekyll', username: 'jekyll'))
34
21
  end
35
22
  let!(:account2) do
36
- directory2.accounts.create(build_account(email: 'hyde@example.com', username: 'account2'))
23
+ directory2.accounts.create(build_account(email: 'hyde', username: 'hyde'))
37
24
  end
38
25
 
39
26
  let!(:account_link) do
@@ -1,42 +1,36 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::Account, :vcr do
4
-
5
- describe "instances should respond to attribute property methods" do
6
- let(:directory) { test_api_client.directories.create name: random_directory_name }
7
- let(:given_name) { 'Ruby SDK' }
8
- let(:middle_name) { 'Gruby' }
9
- let(:surname) { 'SDK' }
4
+ describe 'instances should respond to attribute property methods' do
5
+ let(:directory) { test_api_client.directories.create(build_directory) }
10
6
  let(:account) do
11
- directory.accounts.create email: 'test@example.com',
12
- given_name: given_name,
13
- password: 'P@$$w0rd',
14
- middle_name: middle_name,
15
- surname: surname,
16
- username: 'rubysdk'
7
+ directory.accounts.create(build_account(email: 'ruby',
8
+ given_name: 'ruby',
9
+ surname: 'ruby',
10
+ middle_name: 'ruby'))
17
11
  end
18
12
 
19
13
  after do
20
- account.delete if account
21
- directory.delete if directory
14
+ account.delete
15
+ directory.delete
22
16
  end
23
17
 
24
18
  it do
25
19
  [:given_name, :username, :middle_name, :surname, :email, :status].each do |property_accessor|
26
20
  expect(account).to respond_to(property_accessor)
27
21
  expect(account).to respond_to("#{property_accessor}=")
28
- expect(account.send property_accessor).to be_a String
22
+ expect(account.send(property_accessor)).to be_a String
29
23
  end
30
24
 
31
25
  [:created_at, :modified_at, :password_modified_at].each do |property_getter|
32
26
  expect(account).to respond_to(property_getter)
33
- expect(account.send property_getter).to be_a String
27
+ expect(account.send(property_getter)).to be_a String
34
28
  end
35
29
 
36
30
  expect(account).to respond_to(:full_name)
37
31
  expect(account.full_name).to be_a String
38
- expect(account.full_name).to eq("#{given_name} #{middle_name} #{surname}")
39
- expect(account).to respond_to("password=")
32
+ expect(account.full_name).to eq('ruby ruby ruby')
33
+ expect(account).to respond_to('password=')
40
34
 
41
35
  expect(account.tenant).to be_a Stormpath::Resource::Tenant
42
36
  expect(account.directory).to be_a Stormpath::Resource::Directory
@@ -49,22 +43,10 @@ describe Stormpath::Resource::Account, :vcr do
49
43
  end
50
44
 
51
45
  describe 'account_associations' do
52
- let(:app) { test_api_client.applications.create name: random_application_name, description: 'Dummy desc.' }
53
- let(:application) { test_api_client.applications.get app.href }
54
- let(:directory) { test_api_client.directories.create name: random_directory_name }
55
-
56
- before do
57
- test_api_client.account_store_mappings.create({ application: app, account_store: directory,
58
- list_index: 1, is_default_account_store: true, is_default_group_store: true })
59
- end
60
-
61
- let(:account) do
62
- directory.accounts.create email: 'test@example.com',
63
- givenName: 'Ruby SDK',
64
- password: 'P@$$w0rd',
65
- surname: 'SDK',
66
- username: 'rubysdk'
67
- end
46
+ let(:application) { test_api_client.applications.create(build_application) }
47
+ let(:directory) { test_api_client.directories.create(build_directory) }
48
+ let(:account) { directory.accounts.create(build_account) }
49
+ before { map_account_store(application, directory, 1, true, true) }
68
50
 
69
51
  it 'should belong_to directory' do
70
52
  expect(account.directory).to eq(directory)
@@ -80,32 +62,15 @@ describe Stormpath::Resource::Account, :vcr do
80
62
  end
81
63
 
82
64
  describe 'linked accounts' do
83
- let(:directory2) { test_api_client.directories.create name: 'ruby sdk dir 2' }
65
+ let(:directory2) { test_api_client.directories.create(build_directory) }
84
66
  before do
85
- test_api_client.account_store_mappings.create(
86
- application: app,
87
- account_store: directory2,
88
- list_index: 2,
89
- is_default_account_store: false,
90
- is_default_group_store: false
91
- )
67
+ map_account_store(application, directory2, 2, false, false)
92
68
  account
93
69
  end
94
70
 
95
- after do
96
- directory2.delete
97
- end
98
-
99
- let!(:account2) do
100
- directory2.accounts.create(
101
- email: 'test2@example.com',
102
- givenName: 'Ruby SDK',
103
- password: 'P@$$w0rd',
104
- surname: 'SDK',
105
- username: 'rubysdk2'
106
- )
107
- end
71
+ after { directory2.delete }
108
72
 
73
+ let!(:account2) { directory2.accounts.create(build_account) }
109
74
  let!(:link_accounts) do
110
75
  test_api_client.account_links.create(
111
76
  left_account: {
@@ -130,20 +95,17 @@ describe Stormpath::Resource::Account, :vcr do
130
95
  end
131
96
  end
132
97
 
133
- describe "#add_or_remove_group" do
134
- context "given a group" do
135
- let(:directory) { test_api_client.directories.create name: random_directory_name }
136
-
137
- let(:group) { directory.groups.create name: 'testGroup' }
138
-
139
- let(:account) { directory.accounts.create({ email: 'rubysdk@example.com', given_name: 'Ruby SDK', password: 'P@$$w0rd', surname: 'SDK' }) }
140
-
141
- before { account.add_group group }
98
+ describe '#add_or_remove_group' do
99
+ context 'given a group' do
100
+ let(:directory) { test_api_client.directories.create(build_directory) }
101
+ let(:group) { directory.groups.create(build_group) }
102
+ let(:account) { directory.accounts.create(build_account) }
103
+ before { account.add_group(group) }
142
104
 
143
105
  after do
144
- account.delete if account
145
- group.delete if group
146
- directory.delete if directory
106
+ account.delete
107
+ group.delete
108
+ directory.delete
147
109
  end
148
110
 
149
111
  it 'adds the group to the account' do
@@ -161,31 +123,26 @@ describe Stormpath::Resource::Account, :vcr do
161
123
 
162
124
  expect(account.groups).not_to include(group)
163
125
  end
164
-
165
126
  end
166
127
  end
167
128
 
168
129
  describe '#save' do
169
130
  context 'when property values have changed' do
170
- let(:account) do
171
- test_directory.accounts.create build_account
172
- end
173
- let(:account_uri) do
174
- account.href
175
- end
176
- let(:new_surname) do
177
- "NewSurname"
178
- end
179
- let(:reloaded_account) { test_api_client.accounts.get account_uri }
131
+ let(:directory) { test_api_client.directories.create(build_directory) }
132
+ let(:account) { directory.accounts.create(build_account) }
133
+ let(:account_uri) { account.href }
134
+ let(:new_surname) { 'NewSurname' }
135
+ let(:reloaded_account) { test_api_client.accounts.get(account_uri) }
180
136
 
181
137
  before do
182
- account = test_api_client.accounts.get account_uri
138
+ account = test_api_client.accounts.get(account_uri)
183
139
  account.surname = new_surname
184
140
  account.save
185
141
  end
186
142
 
187
143
  after do
188
- account.delete if account
144
+ account.delete
145
+ directory.delete
189
146
  end
190
147
 
191
148
  it 'saves changes to the account' do
@@ -193,5 +150,4 @@ describe Stormpath::Resource::Account, :vcr do
193
150
  end
194
151
  end
195
152
  end
196
-
197
153
  end