stormpath-sdk 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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