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,20 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::EmailTemplate, :vcr do
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) }
4
+ let(:application) { test_api_client.applications.create(build_application) }
5
+
6
+ after { application.delete }
7
+
8
+ describe 'instances should respond to attribute property methods' do
9
+ let(:directory) { test_api_client.directories.create(build_directory) }
7
10
  let(:password_policy) { directory.password_policy }
8
11
  let(:reset_email_template) { password_policy.reset_email_templates.first }
9
12
 
10
13
  before do
11
- test_api_client.account_store_mappings.create(
12
- application: application,
13
- account_store: directory,
14
- list_index: 1,
15
- is_default_account_store: false,
16
- is_default_group_store: false
17
- )
14
+ map_account_store(application, directory, 1, false, false)
18
15
  end
19
16
 
20
17
  after { directory.delete }
@@ -35,25 +32,25 @@ describe Stormpath::Resource::EmailTemplate, :vcr do
35
32
  end
36
33
 
37
34
  it 'can change attributes' do
38
- reset_email_template.name = "Default Password Reset Template"
39
- reset_email_template.description = "This is the password reset email template"
40
- reset_email_template.subject = "Please reset your password"
41
- reset_email_template.from_email_address = "email@stormpath.com"
42
- reset_email_template.text_body = "You forgot your password! ${sptoken}"
43
- reset_email_template.html_body = "<p> You forgot your password! </p> ${sptoken}"
44
- reset_email_template.mime_type = "text/plain"
35
+ reset_email_template.name = 'Default Password Reset Template'
36
+ reset_email_template.description = 'This is the password reset email template'
37
+ reset_email_template.subject = 'Please reset your password'
38
+ reset_email_template.from_email_address = "email#{default_domain}"
39
+ reset_email_template.text_body = 'You forgot your password! ${sptoken}'
40
+ reset_email_template.html_body = '<p> You forgot your password! </p> ${sptoken}'
41
+ reset_email_template.mime_type = 'text/plain'
45
42
 
46
43
  reset_email_template.save
47
44
 
48
45
  reloaded_reset_email_template = password_policy.reset_email_templates.first
49
46
 
50
- expect(reloaded_reset_email_template.name).to eq("Default Password Reset Template")
51
- expect(reloaded_reset_email_template.description).to eq("This is the password reset email template")
52
- expect(reloaded_reset_email_template.subject).to eq("Please reset your password")
53
- expect(reloaded_reset_email_template.from_email_address).to eq("email@stormpath.com")
54
- expect(reloaded_reset_email_template.text_body).to eq("You forgot your password! ${sptoken}")
55
- expect(reloaded_reset_email_template.html_body).to eq("<p> You forgot your password! </p> ${sptoken}")
56
- expect(reloaded_reset_email_template.mime_type).to eq("text/plain")
47
+ expect(reloaded_reset_email_template.name).to eq('Default Password Reset Template')
48
+ expect(reloaded_reset_email_template.description).to eq('This is the password reset email template')
49
+ expect(reloaded_reset_email_template.subject).to eq('Please reset your password')
50
+ expect(reloaded_reset_email_template.from_email_address).to eq("email#{default_domain}")
51
+ expect(reloaded_reset_email_template.text_body).to eq('You forgot your password! ${sptoken}')
52
+ expect(reloaded_reset_email_template.html_body).to eq('<p> You forgot your password! </p> ${sptoken}')
53
+ expect(reloaded_reset_email_template.mime_type).to eq('text/plain')
57
54
  end
58
55
  end
59
56
  end
@@ -1,28 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::GroupMembership, :vcr do
4
- it "should be the same as AccountMembership" do
4
+ it 'should be the same as AccountMembership' do
5
5
  expect(Stormpath::Resource::GroupMembership).to eq(Stormpath::Resource::AccountMembership)
6
6
  end
7
7
 
8
8
  describe '#add_account' do
9
- context "given an account and a group" do
10
-
11
- let(:directory) { test_api_client.directories.create name: random_directory_name }
12
-
13
- let(:group) { directory.groups.create name: 'someGroup' }
14
-
15
- let(:account) { directory.accounts.create({ email: 'rubysdk@example.com', given_name: 'Ruby SDK', password: 'P@$$w0rd', surname: 'SDK' }) }
9
+ context 'given an account and a group' do
10
+ let(:directory) { test_api_client.directories.create(build_directory) }
11
+ let(:group) { directory.groups.create(build_group) }
12
+ let(:account) { directory.accounts.create(build_account) }
16
13
 
17
14
  before { group.add_account account }
18
15
 
19
16
  after do
20
- group.delete if group
21
- directory.delete if directory
22
- account.delete if account
17
+ group.delete
18
+ account.delete
19
+ directory.delete
23
20
  end
24
21
 
25
- it ", group membership and account membership should correspond to each other" do
22
+ it 'group membership and account membership should correspond to each other' do
26
23
  expect(group.account_memberships.count).to eq(1)
27
24
  expect(account.group_memberships.count).to eq(1)
28
25
  expect(group.accounts).to include(account)
@@ -1,26 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::Group, :vcr do
4
+ let(:directory) { test_api_client.directories.create(build_directory) }
5
+ after { directory.delete }
4
6
 
5
- describe "instances should respond to attribute property methods" do
6
- let(:directory) { test_directory }
7
+ describe 'instances should respond to attribute property methods' do
8
+ let(:group) { directory.groups.create name: 'RubyTestGroup', description: 'testDescription' }
7
9
 
8
- let(:group) { directory.groups.create name: 'someTestGroup', description: 'someTestDescription' }
9
-
10
- after do
11
- group.delete if group
12
- end
10
+ after { group.delete }
13
11
 
14
12
  it do
15
13
  [:name, :description, :status].each do |property_accessor|
16
14
  expect(group).to respond_to(property_accessor)
17
15
  expect(group).to respond_to("#{property_accessor}=")
18
- expect(group.send property_accessor).to be_a String
16
+ expect(group.send(property_accessor)).to be_a String
19
17
  end
20
18
 
21
19
  [:created_at, :modified_at].each do |property_getter|
22
20
  expect(group).to respond_to(property_getter)
23
- expect(group.send property_getter).to be_a String
21
+ expect(group.send(property_getter)).to be_a String
24
22
  end
25
23
 
26
24
  expect(group.tenant).to be_a Stormpath::Resource::Tenant
@@ -32,36 +30,27 @@ describe Stormpath::Resource::Group, :vcr do
32
30
  end
33
31
 
34
32
  describe '#create_group_with_custom_data' do
35
- let(:directory) { test_directory }
36
-
37
33
  it 'creates a directory with custom data' do
38
- directory.custom_data["category"] = "classified"
34
+ directory.custom_data['category'] = 'classified'
39
35
 
40
36
  directory.save
41
- expect(directory.custom_data["category"]).to eq("classified")
37
+ expect(directory.custom_data['category']).to eq('classified')
42
38
  end
43
39
  end
44
40
 
45
41
  describe '#add_or_remove_account' do
46
- context "given an account" do
47
-
48
- let(:directory) { test_api_client.directories.create name: random_directory_name }
49
-
50
- let(:group) { directory.groups.create name: 'someGroup' }
42
+ context 'given an account' do
43
+ let(:group) { directory.groups.create(build_group) }
44
+ let(:account) { directory.accounts.create(build_account) }
51
45
 
52
- let(:account) { directory.accounts.create({ email: 'rubysdk@example.com', given_name: 'Ruby SDK', password: 'P@$$w0rd',surname: 'SDK' }) }
53
-
54
- before do
55
- group.add_account account
56
- end
46
+ before { group.add_account(account) }
57
47
 
58
48
  after do
59
- group.delete if group
60
- directory.delete if directory
61
- account.delete if account
49
+ group.delete
50
+ account.delete
62
51
  end
63
52
 
64
- it "adds the account to the group" do
53
+ it 'adds the account to the group' do
65
54
  expect(group.accounts).to include(account)
66
55
  end
67
56
 
@@ -71,12 +60,9 @@ describe Stormpath::Resource::Group, :vcr do
71
60
 
72
61
  it 'adds and removes the group from the account' do
73
62
  expect(group.accounts).to include(account)
74
-
75
- group.remove_account account
76
-
63
+ group.remove_account(account)
77
64
  expect(group.accounts).not_to include(account)
78
65
  end
79
-
80
66
  end
81
67
  end
82
68
  end
@@ -7,28 +7,15 @@ describe Stormpath::Resource::LinkedAccount, :vcr do
7
7
  let(:directory1) { test_api_client.directories.create(name: 'ruby sdk dir 1') }
8
8
  let(:directory2) { test_api_client.directories.create(name: 'ruby sdk dir 2') }
9
9
  let(:account1) do
10
- directory1.accounts.create(build_account(email: 'jekyll@example.com', username: 'account1'))
10
+ directory1.accounts.create(build_account(email: 'jekyll', username: 'jekyll'))
11
11
  end
12
12
  let(:account2) do
13
- directory2.accounts.create(build_account(email: 'hyde@example.com', username: 'account2'))
13
+ directory2.accounts.create(build_account(email: 'hyde', username: 'hyde'))
14
14
  end
15
15
 
16
16
  before do
17
- test_api_client.account_store_mappings.create(
18
- application: application,
19
- account_store: directory1,
20
- list_index: 1,
21
- is_default_account_store: true,
22
- is_default_group_store: false
23
- )
24
-
25
- test_api_client.account_store_mappings.create(
26
- application: application,
27
- account_store: directory2,
28
- list_index: 2,
29
- is_default_account_store: false,
30
- is_default_group_store: false
31
- )
17
+ map_account_store(application, directory1, 1, true, false)
18
+ map_account_store(application, directory2, 2, false, false)
32
19
 
33
20
  test_api_client.account_links.create(
34
21
  left_account: {
@@ -1,36 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::Organization, :vcr do
4
-
5
4
  let(:organization) do
6
- test_api_client.organizations.create name: 'test_ruby_organization',
7
- name_key: "testorganization", description: 'test organization'
5
+ test_api_client.organizations.create(build_organization(name: 'test_ruby_organization',
6
+ name_key: 'testorganization',
7
+ description: 'test organization'))
8
8
  end
9
9
 
10
- after do
11
- organization.delete if organization
12
- end
10
+ after { organization.delete if organization }
13
11
 
14
- def create_organization_account_store_mapping(organization, account_store, options = {})
15
- test_api_client.organization_account_store_mappings.create(
16
- account_store: { href: account_store.href },
17
- organization: { href: organization.href },
18
- is_default_account_store: options[:default_account_store] || false,
19
- is_default_group_store: options[:default_group_store] || false
20
- )
21
- end
22
-
23
- describe "instances should respond to attribute property methods" do
12
+ describe 'instances should respond to attribute property methods' do
24
13
  it do
25
14
  [:name, :description, :name_key, :status].each do |property_accessor|
26
15
  expect(organization).to respond_to(property_accessor)
27
16
  expect(organization).to respond_to("#{property_accessor}=")
28
- expect(organization.send property_accessor).to be_a String
17
+ expect(organization.send(property_accessor)).to be_a String
29
18
  end
30
19
 
31
20
  [:created_at, :modified_at].each do |property_getter|
32
21
  expect(organization).to respond_to(property_getter)
33
- expect(organization.send property_getter).to be_a String
22
+ expect(organization.send(property_getter)).to be_a String
34
23
  end
35
24
 
36
25
  expect(organization.tenant).to be_a Stormpath::Resource::Tenant
@@ -41,7 +30,7 @@ describe Stormpath::Resource::Organization, :vcr do
41
30
  end
42
31
 
43
32
  describe 'get resource' do
44
- let(:fetched_organization) { test_api_client.organizations.get organization.href }
33
+ let(:fetched_organization) { test_api_client.organizations.get(organization.href) }
45
34
 
46
35
  it 'returns the organization resource with correct attribute properties' do
47
36
  expect(fetched_organization).to be_kind_of(Stormpath::Resource::Organization)
@@ -50,8 +39,10 @@ describe Stormpath::Resource::Organization, :vcr do
50
39
  expect(fetched_organization.name_key).to eq(organization.name_key)
51
40
  expect(fetched_organization.status).to eq(organization.status)
52
41
  expect(fetched_organization.account_store_mappings).to eq(organization.account_store_mappings)
53
- expect(fetched_organization.default_account_store_mapping).to eq(organization.default_account_store_mapping)
54
- expect(fetched_organization.default_group_store_mapping).to eq(organization.default_group_store_mapping)
42
+ expect(fetched_organization.default_account_store_mapping)
43
+ .to eq(organization.default_account_store_mapping)
44
+ expect(fetched_organization.default_group_store_mapping)
45
+ .to eq(organization.default_group_store_mapping)
55
46
  end
56
47
 
57
48
  it 'returns custom_data' do
@@ -61,30 +52,23 @@ describe Stormpath::Resource::Organization, :vcr do
61
52
 
62
53
  describe 'create' do
63
54
  context 'invalid data' do
55
+ before { organization }
56
+
64
57
  it 'should raise Stormpath::Error' do
65
58
  expect do
66
- test_api_client.organizations.create name: 'test_organization',
67
- name_key: "test_org"
59
+ test_api_client.organizations.create(build_organization(name_key: 'testorganization'))
68
60
  end.to raise_error(Stormpath::Error)
69
61
  end
70
62
  end
71
63
  end
72
64
 
73
65
  describe 'associations' do
74
- context 'groups' do
75
-
76
- let(:directory) { test_api_client.directories.create name: random_directory_name }
77
-
78
- let(:group) { directory.groups.create name: "test_group" }
79
-
80
- before do
81
- create_organization_account_store_mapping(organization, group)
82
- end
66
+ let(:directory) { test_api_client.directories.create(build_directory) }
67
+ after { directory.delete }
83
68
 
84
- after do
85
- organization.delete if organization
86
- directory.delete if directory
87
- end
69
+ context 'groups' do
70
+ let(:group) { directory.groups.create(name: 'test_group') }
71
+ before { map_organization_store(group, organization) }
88
72
 
89
73
  it 'returns a collection of groups' do
90
74
  expect(organization.groups).to be_kind_of(Stormpath::Resource::Collection)
@@ -93,35 +77,10 @@ describe Stormpath::Resource::Organization, :vcr do
93
77
  end
94
78
 
95
79
  context 'accounts' do
96
- let(:directory) { test_api_client.directories.create name: random_directory_name }
97
-
98
- let(:account) do
99
- directory.accounts.create(
100
- email: 'rubysdk@example.com',
101
- given_name: 'Ruby SDK',
102
- password: 'P@$$w0rd',
103
- surname: 'SDK'
104
- )
105
- end
106
- let(:org_account) do
107
- organization.accounts.create(
108
- email: 'rubysdk2@example.com',
109
- given_name: 'Ruby SDK',
110
- password: 'P@$$w0rd',
111
- surname: 'SDK'
112
- )
113
- end
80
+ let(:account) { directory.accounts.create(build_account(email: 'rubysdk')) }
81
+ let(:org_account) { directory.accounts.create(build_account(email: 'rubysdk2')) }
114
82
 
115
- before do
116
- create_organization_account_store_mapping(organization,
117
- directory,
118
- default_account_store: true)
119
- end
120
-
121
- after do
122
- organization.delete if organization
123
- directory.delete if directory
124
- end
83
+ before { map_organization_store(directory, organization, true) }
125
84
 
126
85
  it 'returns a collection of accounts' do
127
86
  expect(organization.accounts).to be_kind_of(Stormpath::Resource::Collection)
@@ -140,16 +99,7 @@ describe Stormpath::Resource::Organization, :vcr do
140
99
  end
141
100
 
142
101
  context 'tenant' do
143
- let(:directory) { test_api_client.directories.create name: random_directory_name }
144
-
145
- before do
146
- create_organization_account_store_mapping(organization, directory)
147
- end
148
-
149
- after do
150
- organization.delete if organization
151
- directory.delete if directory
152
- end
102
+ before { map_organization_store(directory, organization) }
153
103
 
154
104
  it 'returns tenant' do
155
105
  expect(organization.tenant).to eq(directory.tenant)
@@ -159,45 +109,33 @@ describe Stormpath::Resource::Organization, :vcr do
159
109
 
160
110
  describe 'delete' do
161
111
  let(:href) { organization.href }
162
-
163
- before do
164
- organization.delete
165
- end
112
+ before { organization.delete }
166
113
 
167
114
  it 'removes the organization' do
168
- expect do
169
- test_api_client.organizations.get href
170
- end.to raise_error(Stormpath::Error)
115
+ expect { test_api_client.organizations.get(href) }.to raise_error(Stormpath::Error)
171
116
  end
172
117
  end
173
118
 
174
119
  describe 'update' do
175
120
  before do
176
- organization.name_key = "changed-test-organization"
121
+ organization.name_key = 'changed-test-organization'
177
122
  organization.save
178
123
  end
179
124
 
180
125
  it 'can change the data of the existing organization' do
181
- org = test_api_client.organizations.get organization.href
182
- expect(org.name_key).to eq("changed-test-organization")
126
+ org = test_api_client.organizations.get(organization.href)
127
+ expect(org.name_key).to eq('changed-test-organization')
183
128
  end
184
129
  end
185
130
 
186
131
  describe 'organization account store mapping' do
187
- context 'given an account_store is a directory' do
188
- let(:directory) { test_api_client.directories.create name: random_directory_name }
189
-
190
- let(:organization_account_store_mapping) do
191
- create_organization_account_store_mapping(organization, directory)
192
- end
132
+ let(:directory) { test_api_client.directories.create(build_directory) }
133
+ after { directory.delete }
193
134
 
135
+ context 'given an account_store is a directory' do
136
+ let(:organization_account_store_mapping) { map_organization_store(directory, organization) }
194
137
  let(:reloaded_mapping) do
195
- test_api_client.account_store_mappings.get organization_account_store_mapping.href
196
- end
197
-
198
- after do
199
- organization.delete if organization
200
- directory.delete if directory
138
+ test_api_client.account_store_mappings.get(organization_account_store_mapping.href)
201
139
  end
202
140
 
203
141
  it 'should return a directory' do
@@ -207,23 +145,13 @@ describe Stormpath::Resource::Organization, :vcr do
207
145
  end
208
146
 
209
147
  context 'given an account_store is a group' do
210
- let(:directory) { test_api_client.directories.create name: random_directory_name }
211
-
212
- let(:group) { directory.groups.create name: "test_group" }
213
-
214
- let(:organization_account_store_mapping) do
215
- create_organization_account_store_mapping(organization, group)
216
- end
217
-
148
+ let(:group) { directory.groups.create(name: 'test_group') }
149
+ let(:organization_account_store_mapping) { map_organization_store(group, organization) }
218
150
  let(:reloaded_mapping) do
219
- test_api_client.account_store_mappings.get organization_account_store_mapping.href
151
+ test_api_client.account_store_mappings.get(organization_account_store_mapping.href)
220
152
  end
221
153
 
222
- after do
223
- organization.delete if organization
224
- group.delete if group
225
- directory.delete if directory
226
- end
154
+ after { group.delete }
227
155
 
228
156
  it 'should return group' do
229
157
  expect(reloaded_mapping.account_store.class).to eq(Stormpath::Resource::Group)