stormpath-sdk 1.6.0 → 1.7.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +21 -0
- data/CHANGES.md +11 -0
- data/README.md +23 -25
- data/lib/stormpath-sdk.rb +11 -2
- data/lib/stormpath-sdk/api_key.rb +0 -1
- data/lib/stormpath-sdk/auth/basic_authenticator.rb +7 -7
- data/lib/stormpath-sdk/auth/basic_login_attempt.rb +7 -11
- data/lib/stormpath-sdk/auth/create_factor.rb +1 -1
- data/lib/stormpath-sdk/auth/register_service_provider.rb +41 -0
- data/lib/stormpath-sdk/auth/username_password_request.rb +3 -5
- data/lib/stormpath-sdk/cache/cache.rb +3 -3
- data/lib/stormpath-sdk/cache/cache_entry.rb +2 -2
- data/lib/stormpath-sdk/cache/cache_manager.rb +3 -4
- data/lib/stormpath-sdk/cache/cache_stats.rb +1 -3
- data/lib/stormpath-sdk/cache/disabled_cache_store.rb +5 -8
- data/lib/stormpath-sdk/cache/memory_store.rb +1 -1
- data/lib/stormpath-sdk/cache/redis_store.rb +4 -4
- data/lib/stormpath-sdk/client.rb +35 -33
- data/lib/stormpath-sdk/data_store.rb +278 -257
- data/lib/stormpath-sdk/error.rb +18 -7
- data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +76 -82
- data/lib/stormpath-sdk/http/http_client_request_executor.rb +10 -8
- data/lib/stormpath-sdk/http/response.rb +5 -7
- data/lib/stormpath-sdk/id_site/id_site_result.rb +5 -6
- data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +5 -9
- data/lib/stormpath-sdk/oauth/authenticator.rb +2 -2
- data/lib/stormpath-sdk/oauth/error.rb +4 -4
- data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +1 -1
- data/lib/stormpath-sdk/oauth/password_grant_request.rb +1 -1
- data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +2 -2
- data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +2 -2
- data/lib/stormpath-sdk/provider/account_access.rb +0 -2
- data/lib/stormpath-sdk/provider/account_result.rb +1 -2
- data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +7 -3
- data/lib/stormpath-sdk/provider/github/github_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/github/github_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/google/google_provider.rb +7 -3
- data/lib/stormpath-sdk/provider/google/google_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/provider.rb +8 -4
- data/lib/stormpath-sdk/provider/provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/saml/saml_provider.rb +10 -4
- data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +6 -3
- data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/twitter/twitter_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/twitter/twitter_provider_data.rb +6 -2
- data/lib/stormpath-sdk/resource/account.rb +46 -40
- data/lib/stormpath-sdk/resource/account_link.rb +9 -5
- data/lib/stormpath-sdk/resource/account_linking_policy.rb +8 -4
- data/lib/stormpath-sdk/resource/account_membership.rb +1 -1
- data/lib/stormpath-sdk/resource/account_overrides.rb +20 -16
- data/lib/stormpath-sdk/resource/account_store.rb +15 -11
- data/lib/stormpath-sdk/resource/account_store_mapping.rb +14 -13
- data/lib/stormpath-sdk/resource/application.rb +147 -136
- data/lib/stormpath-sdk/resource/application_web_config.rb +11 -7
- data/lib/stormpath-sdk/resource/associations.rb +36 -43
- data/lib/stormpath-sdk/resource/attribute_statement_mapping_rules.rb +8 -0
- data/lib/stormpath-sdk/resource/base.rb +201 -200
- data/lib/stormpath-sdk/resource/challenge.rb +12 -8
- data/lib/stormpath-sdk/resource/collection.rb +77 -76
- data/lib/stormpath-sdk/resource/custom_data.rb +60 -61
- data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +28 -25
- data/lib/stormpath-sdk/resource/custom_data_storage.rb +18 -16
- data/lib/stormpath-sdk/resource/directory.rb +37 -60
- data/lib/stormpath-sdk/resource/email_verification_token.rb +7 -3
- data/lib/stormpath-sdk/resource/error.rb +8 -4
- data/lib/stormpath-sdk/resource/expansion.rb +22 -20
- data/lib/stormpath-sdk/resource/factor.rb +12 -8
- data/lib/stormpath-sdk/resource/field.rb +8 -4
- data/lib/stormpath-sdk/resource/group.rb +21 -16
- data/lib/stormpath-sdk/resource/group_membership.rb +7 -5
- data/lib/stormpath-sdk/resource/instance.rb +10 -6
- data/lib/stormpath-sdk/resource/linked_account.rb +7 -3
- data/lib/stormpath-sdk/resource/oauth_policy.rb +7 -3
- data/lib/stormpath-sdk/resource/organization.rb +14 -10
- data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +8 -4
- data/lib/stormpath-sdk/resource/password_reset_token.rb +9 -5
- data/lib/stormpath-sdk/resource/phone.rb +8 -4
- data/lib/stormpath-sdk/resource/registered_saml_service_provider.rb +8 -0
- data/lib/stormpath-sdk/resource/saml_identity_provider.rb +14 -0
- data/lib/stormpath-sdk/resource/saml_identity_provider_metadata.rb +9 -0
- data/lib/stormpath-sdk/resource/saml_policy.rb +10 -0
- data/lib/stormpath-sdk/resource/saml_service_provider.rb +7 -0
- data/lib/stormpath-sdk/{provider/saml/saml_mapping_rules.rb → resource/saml_service_provider_metadata.rb} +6 -5
- data/lib/stormpath-sdk/resource/saml_service_provider_registration.rb +11 -0
- data/lib/stormpath-sdk/resource/schema.rb +8 -4
- data/lib/stormpath-sdk/resource/tenant.rb +11 -8
- data/lib/stormpath-sdk/resource/user_info_mapping_rules.rb +7 -3
- data/lib/stormpath-sdk/resource/utils.rb +7 -10
- data/lib/stormpath-sdk/resource/verification_email.rb +7 -3
- data/lib/stormpath-sdk/resource/x_509_certificate.rb +7 -0
- data/lib/stormpath-sdk/util/assert.rb +1 -3
- data/lib/stormpath-sdk/version.rb +2 -2
- data/spec/auth/basic_authenticator_spec.rb +28 -24
- data/spec/auth/register_service_provider_spec.rb +68 -0
- data/spec/auth/sauthc1_signer_spec.rb +8 -4
- data/spec/cache/cache_entry_spec.rb +28 -29
- data/spec/cache/cache_spec.rb +9 -9
- data/spec/cache/cache_stats_spec.rb +1 -1
- data/spec/client_spec.rb +63 -63
- data/spec/data_store_spec.rb +23 -14
- data/spec/oauth/access_token_authentication_result_spec.rb +8 -2
- data/spec/provider/account_resolver_spec.rb +6 -4
- data/spec/provider/provider_spec.rb +6 -6
- data/spec/resource/account_creation_policy_spec.rb +1 -1
- data/spec/resource/account_link_spec.rb +7 -15
- data/spec/resource/account_spec.rb +17 -17
- data/spec/resource/account_store_mapping_spec.rb +16 -22
- data/spec/resource/account_store_spec.rb +3 -3
- data/spec/resource/application_spec.rb +324 -330
- data/spec/resource/base_spec.rb +7 -31
- data/spec/resource/collection_spec.rb +63 -114
- data/spec/resource/custom_data_spec.rb +1 -1
- data/spec/resource/directory_spec.rb +91 -87
- data/spec/resource/expansion_spec.rb +10 -10
- data/spec/resource/factor_spec.rb +1 -1
- data/spec/resource/group_spec.rb +1 -1
- data/spec/resource/linked_account_spec.rb +7 -7
- data/spec/resource/organization_spec.rb +12 -11
- data/spec/resource/phone_spec.rb +1 -1
- data/spec/resource/registered_saml_service_provider_spec.rb +35 -0
- data/spec/resource/saml_identity_provider_metadata_spec.rb +27 -0
- data/spec/resource/saml_identity_provider_spec.rb +94 -0
- data/spec/resource/saml_policy_spec.rb +27 -0
- data/spec/resource/saml_service_provider_registration_spec.rb +58 -0
- data/spec/resource/saml_service_provider_spec.rb +19 -0
- data/spec/resource/status_spec.rb +4 -3
- data/spec/resource/tenant_spec.rb +4 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/custom_data_save_period.rb +4 -0
- data/spec/support/custom_data_storage_behavior.rb +7 -8
- data/spec/support/mocked_provider_accounts.rb +101 -101
- data/spec/support/mocked_saml_responses.rb +130 -0
- data/spec/support/resource_factory.rb +4 -4
- data/spec/support/resource_helpers.rb +10 -4
- data/spec/support/resource_matchers.rb +4 -4
- data/spec/support/test_request_executor.rb +2 -2
- metadata +21 -8
- data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -19
- data/spec/fixtures/response/create_saml_directory.json +0 -26
- data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -12
- data/spec/fixtures/response/get_saml_directory_provider.json +0 -16
- data/spec/fixtures/response/get_saml_directory_provider_metadata.json +0 -12
|
@@ -4,20 +4,20 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
4
4
|
describe '#initialize' do
|
|
5
5
|
context 'given a single property name' do
|
|
6
6
|
let(:expansion) do
|
|
7
|
-
Stormpath::Resource::Expansion.new
|
|
7
|
+
Stormpath::Resource::Expansion.new('foo')
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
it 'can be transmuted to a simple hash' do
|
|
11
|
-
expect(expansion.to_query).to eq(
|
|
11
|
+
expect(expansion.to_query).to eq(expand: 'foo')
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
context 'given a list of property names' do
|
|
15
15
|
let(:expansion) do
|
|
16
|
-
Stormpath::Resource::Expansion.new
|
|
16
|
+
Stormpath::Resource::Expansion.new('foo', 'bar')
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'can be transmuted to a simple hash' do
|
|
20
|
-
expect(expansion.to_query).to eq(
|
|
20
|
+
expect(expansion.to_query).to eq(expand: 'foo,bar')
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
describe
|
|
35
|
+
describe '#add_property' do
|
|
36
36
|
context 'given a simple property name' do
|
|
37
37
|
let(:expansion) { Stormpath::Resource::Expansion.new }
|
|
38
38
|
|
|
@@ -41,7 +41,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
it 'can be transmuted to a simple hash' do
|
|
44
|
-
expect(expansion.to_query).to eq(
|
|
44
|
+
expect(expansion.to_query).to eq(expand: 'foo')
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -54,7 +54,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
it 'can be transmuted to a simple hash' do
|
|
57
|
-
expect(expansion.to_query).to eq(
|
|
57
|
+
expect(expansion.to_query).to eq(expand: 'foo,bar')
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
|
|
@@ -68,7 +68,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
it 'will not duplicate the property' do
|
|
71
|
-
expect(expansion.to_query).to eq(
|
|
71
|
+
expect(expansion.to_query).to eq(expand: 'foo,bar')
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -80,7 +80,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
it 'can be transmuted to a simple hash' do
|
|
83
|
-
expect(expansion.to_query).to eq(
|
|
83
|
+
expect(expansion.to_query).to eq(expand: 'foo(offset:5,limit:100)')
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -93,7 +93,7 @@ describe Stormpath::Resource::Expansion, :vcr do
|
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
it 'allows the last call to win out over the first' do
|
|
96
|
-
expect(expansion.to_query).to eq(
|
|
96
|
+
expect(expansion.to_query).to eq(expand: 'foo(offset:25)')
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
end
|
|
@@ -68,7 +68,7 @@ describe Stormpath::Resource::Factor, :vcr do
|
|
|
68
68
|
|
|
69
69
|
describe 'factor associations' do
|
|
70
70
|
let(:app) { test_api_client.applications.create(application_attrs) }
|
|
71
|
-
let(:application) { test_api_client.applications.get
|
|
71
|
+
let(:application) { test_api_client.applications.get(app.href) }
|
|
72
72
|
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
|
73
73
|
|
|
74
74
|
before { map_account_store(app, directory, 1, true, true) }
|
data/spec/resource/group_spec.rb
CHANGED
|
@@ -5,7 +5,7 @@ describe Stormpath::Resource::Group, :vcr do
|
|
|
5
5
|
after { directory.delete }
|
|
6
6
|
|
|
7
7
|
describe 'instances should respond to attribute property methods' do
|
|
8
|
-
let(:group) { directory.groups.create
|
|
8
|
+
let(:group) { directory.groups.create(group_attrs) }
|
|
9
9
|
|
|
10
10
|
after { group.delete }
|
|
11
11
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Stormpath::Resource::LinkedAccount, :vcr do
|
|
4
|
-
let(:application)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let(:
|
|
8
|
-
let(:
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:directory1) { test_api_client.directories.create(directory_attrs) }
|
|
6
|
+
let(:directory2) { test_api_client.directories.create(directory_attrs) }
|
|
7
|
+
let(:username_1) { "jekyll-#{random_number}" }
|
|
8
|
+
let(:username_2) { "hyde-#{random_number}" }
|
|
9
9
|
let(:account1) do
|
|
10
|
-
directory1.accounts.create(account_attrs(email:
|
|
10
|
+
directory1.accounts.create(account_attrs(email: username_1, username: username_1))
|
|
11
11
|
end
|
|
12
12
|
let(:account2) do
|
|
13
|
-
directory2.accounts.create(account_attrs(email:
|
|
13
|
+
directory2.accounts.create(account_attrs(email: username_2, username: username_2))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
before do
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Stormpath::Resource::Organization, :vcr do
|
|
4
|
+
let(:organization_name_key) { "rubysdk-org-#{random_number}" }
|
|
4
5
|
let(:organization) do
|
|
5
|
-
test_api_client.organizations.create(organization_attrs(
|
|
6
|
-
name_key: 'testorganization',
|
|
7
|
-
description: 'test organization'))
|
|
6
|
+
test_api_client.organizations.create(organization_attrs(name_key: organization_name_key))
|
|
8
7
|
end
|
|
9
|
-
|
|
10
8
|
after { organization.delete if organization }
|
|
11
9
|
|
|
12
10
|
describe 'instances should respond to attribute property methods' do
|
|
@@ -57,7 +55,7 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
|
57
55
|
|
|
58
56
|
it 'should raise Stormpath::Error' do
|
|
59
57
|
expect do
|
|
60
|
-
test_api_client.organizations.create(organization_attrs(name_key:
|
|
58
|
+
test_api_client.organizations.create(organization_attrs(name_key: organization_name_key))
|
|
61
59
|
end.to raise_error(Stormpath::Error)
|
|
62
60
|
end
|
|
63
61
|
end
|
|
@@ -68,7 +66,7 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
|
68
66
|
after { directory.delete }
|
|
69
67
|
|
|
70
68
|
context 'groups' do
|
|
71
|
-
let(:group) { directory.groups.create(
|
|
69
|
+
let(:group) { directory.groups.create(organization_attrs) }
|
|
72
70
|
before { map_organization_store(group, organization) }
|
|
73
71
|
|
|
74
72
|
it 'returns a collection of groups' do
|
|
@@ -78,8 +76,10 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
|
78
76
|
end
|
|
79
77
|
|
|
80
78
|
context 'accounts' do
|
|
81
|
-
let(:
|
|
82
|
-
let(:
|
|
79
|
+
let(:account_email_1) { "rubysdk-#{random_number}" }
|
|
80
|
+
let(:account_email_2) { "rubysdk-#{random_number}" }
|
|
81
|
+
let(:account) { directory.accounts.create(account_attrs(email: account_email_1)) }
|
|
82
|
+
let(:org_account) { directory.accounts.create(account_attrs(email: account_email_2)) }
|
|
83
83
|
|
|
84
84
|
before { map_organization_store(directory, organization, true) }
|
|
85
85
|
|
|
@@ -118,14 +118,15 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
describe 'update' do
|
|
121
|
+
let(:changed_org_name_key) { "rubysdk-org-#{random_number}" }
|
|
121
122
|
before do
|
|
122
|
-
organization.name_key =
|
|
123
|
+
organization.name_key = changed_org_name_key
|
|
123
124
|
organization.save
|
|
124
125
|
end
|
|
125
126
|
|
|
126
127
|
it 'can change the data of the existing organization' do
|
|
127
128
|
org = test_api_client.organizations.get(organization.href)
|
|
128
|
-
expect(org.name_key).to eq(
|
|
129
|
+
expect(org.name_key).to eq(changed_org_name_key)
|
|
129
130
|
end
|
|
130
131
|
end
|
|
131
132
|
|
|
@@ -146,7 +147,7 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
|
146
147
|
end
|
|
147
148
|
|
|
148
149
|
context 'given an account_store is a group' do
|
|
149
|
-
let(:group) { directory.groups.create(
|
|
150
|
+
let(:group) { directory.groups.create(group_attrs) }
|
|
150
151
|
let(:organization_account_store_mapping) { map_organization_store(group, organization) }
|
|
151
152
|
let(:reloaded_mapping) do
|
|
152
153
|
test_api_client.account_store_mappings.get(organization_account_store_mapping.href)
|
data/spec/resource/phone_spec.rb
CHANGED
|
@@ -36,7 +36,7 @@ describe Stormpath::Resource::Phone, :vcr do
|
|
|
36
36
|
|
|
37
37
|
describe 'phone associations' do
|
|
38
38
|
let(:app) { test_api_client.applications.create(application_attrs) }
|
|
39
|
-
let(:application) { test_api_client.applications.get
|
|
39
|
+
let(:application) { test_api_client.applications.get(app.href) }
|
|
40
40
|
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
|
41
41
|
|
|
42
42
|
before { map_account_store(app, directory, 1, true, true) }
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Stormpath::Resource::RegisteredSamlServiceProvider, vcr: true do
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:identity_provider) { application.saml_policy.identity_provider }
|
|
6
|
+
let(:assertion_consumer_service_url) { 'https://some.sp.com/saml/sso/post' }
|
|
7
|
+
let(:entity_id) { 'urn:sp:A1B2C3' }
|
|
8
|
+
let(:registered_service_provider) do
|
|
9
|
+
application.register_service_provider(
|
|
10
|
+
assertion_consumer_service_url: assertion_consumer_service_url, entity_id: entity_id
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
after do
|
|
15
|
+
registered_service_provider.delete
|
|
16
|
+
application.delete
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'instances should respond to attribute property methods' do
|
|
20
|
+
expect(registered_service_provider).to be_a Stormpath::Resource::RegisteredSamlServiceProvider
|
|
21
|
+
|
|
22
|
+
[:created_at, :modified_at].each do |prop_reader|
|
|
23
|
+
expect(registered_service_provider).to respond_to(prop_reader)
|
|
24
|
+
expect(registered_service_provider.send(prop_reader)).to be_a String
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
[:name, :description, :assertion_consumer_service_url,
|
|
28
|
+
:entity_id, :name_id_format].each do |prop_accessor|
|
|
29
|
+
expect(registered_service_provider).to respond_to(prop_accessor)
|
|
30
|
+
expect(registered_service_provider).to respond_to("#{prop_accessor}=")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
expect(registered_service_provider.encoded_x509_certificate).to be_nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Stormpath::Resource::SamlIdentityProviderMetadata, vcr: true do
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:metadata) { application.saml_policy.identity_provider.metadata }
|
|
6
|
+
|
|
7
|
+
after { application.delete }
|
|
8
|
+
|
|
9
|
+
it 'instances should respond to attribute property methods' do
|
|
10
|
+
expect(metadata).to be_a Stormpath::Resource::SamlIdentityProviderMetadata
|
|
11
|
+
|
|
12
|
+
[:entity_id].each do |property_getter|
|
|
13
|
+
expect(metadata).to respond_to(property_getter)
|
|
14
|
+
expect(metadata.send(property_getter)).to be_a String
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'saml identity provider metadata associations' do
|
|
19
|
+
it 'should respond to identity provider' do
|
|
20
|
+
expect(metadata.identity_provider).to be_a Stormpath::Resource::SamlIdentityProvider
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should respond to x509_signing_cert' do
|
|
24
|
+
expect(metadata.x509_signing_cert).to be_a Stormpath::Resource::X509Certificate
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Stormpath::Resource::SamlIdentityProvider, vcr: true do
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:identity_provider) { application.saml_policy.identity_provider }
|
|
6
|
+
|
|
7
|
+
after { application.delete }
|
|
8
|
+
|
|
9
|
+
it 'instances should respond to attribute property methods' do
|
|
10
|
+
expect(identity_provider).to be_a Stormpath::Resource::SamlIdentityProvider
|
|
11
|
+
|
|
12
|
+
[:sso_login_endpoint].each do |property_getter|
|
|
13
|
+
expect(identity_provider).to respond_to(property_getter)
|
|
14
|
+
expect(identity_provider.send(property_getter)).to be_a Hash
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
[:signature_algorithm, :sha_fingerprint, :created_at, :modified_at].each do |property_getter|
|
|
18
|
+
expect(identity_provider).to respond_to(property_getter)
|
|
19
|
+
expect(identity_provider.send(property_getter)).to be_a String
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
[:status].each do |property_accessor|
|
|
23
|
+
expect(application).to respond_to(property_accessor)
|
|
24
|
+
expect(application).to respond_to("#{property_accessor}=")
|
|
25
|
+
expect(application.send(property_accessor)).to be_a String
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe 'saml identity provider associations' do
|
|
30
|
+
it 'should respond to registered_saml_service_providers' do
|
|
31
|
+
expect(identity_provider.registered_saml_service_providers).to(
|
|
32
|
+
be_a(Stormpath::Resource::Collection)
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should respond to saml_service_provider_registrations' do
|
|
37
|
+
expect(identity_provider.saml_service_provider_registrations).to(
|
|
38
|
+
be_a(Stormpath::Resource::Collection)
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should respond to metadata' do
|
|
43
|
+
expect(identity_provider.metadata).to be_a Stormpath::Resource::SamlIdentityProviderMetadata
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe 'attribute_statement_mapping_rules' do
|
|
47
|
+
let(:rule) do
|
|
48
|
+
{ 'name' => 'email',
|
|
49
|
+
'nameFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:entity',
|
|
50
|
+
'accountAttributes' => ['email'] }
|
|
51
|
+
end
|
|
52
|
+
before do
|
|
53
|
+
identity_provider.attribute_statement_mapping_rules.items = [rule]
|
|
54
|
+
identity_provider.attribute_statement_mapping_rules.save
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should respond with attribute_statement_mapping_rules' do
|
|
58
|
+
expect(identity_provider.attribute_statement_mapping_rules).to(
|
|
59
|
+
be_a(Stormpath::Resource::AttributeStatementMappingRules)
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'should contain the saved rule' do
|
|
64
|
+
expect(identity_provider.attribute_statement_mapping_rules.items).to include(rule)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should respond to x509_signing_cert' do
|
|
69
|
+
expect(identity_provider.x509_signing_cert).to be_a Stormpath::Resource::X509Certificate
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe 'map existing registered service provider' do
|
|
74
|
+
let(:assertion_consumer_service_url) { 'https://some.sp.com/saml/sso/post' }
|
|
75
|
+
let(:entity_id) { 'urn:sp:A1B2C3' }
|
|
76
|
+
let!(:service_provider) do
|
|
77
|
+
test_api_client.registered_saml_service_providers.create(
|
|
78
|
+
assertion_consumer_service_url: assertion_consumer_service_url,
|
|
79
|
+
entity_id: entity_id
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
before do
|
|
84
|
+
identity_provider.saml_service_provider_registrations.create(
|
|
85
|
+
service_provider: { href: service_provider.href }
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
after { service_provider.delete }
|
|
89
|
+
|
|
90
|
+
it 'should successfully map with the identity provider' do
|
|
91
|
+
expect(identity_provider.registered_saml_service_providers).to include(service_provider)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Stormpath::Resource::SamlPolicy, :vcr do
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:saml_policy) { application.saml_policy }
|
|
6
|
+
|
|
7
|
+
after { application.delete }
|
|
8
|
+
|
|
9
|
+
it 'instances should respond to attribute property methods' do
|
|
10
|
+
expect(saml_policy).to be_a Stormpath::Resource::SamlPolicy
|
|
11
|
+
|
|
12
|
+
[:created_at, :modified_at].each do |property_getter|
|
|
13
|
+
expect(saml_policy).to respond_to(property_getter)
|
|
14
|
+
expect(saml_policy.send(property_getter)).to be_a String
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'saml policy associations' do
|
|
19
|
+
it 'should respond to service_provider' do
|
|
20
|
+
expect(saml_policy.service_provider).to be_a Stormpath::Resource::SamlServiceProvider
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should respond to identity_provider' do
|
|
24
|
+
expect(saml_policy.identity_provider).to be_a Stormpath::Resource::SamlIdentityProvider
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Stormpath::Resource::SamlServiceProviderRegistration, vcr: true do
|
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
|
5
|
+
let(:identity_provider) { application.saml_policy.identity_provider }
|
|
6
|
+
let(:assertion_consumer_service_url) { 'https://some.sp.com/saml/sso/post' }
|
|
7
|
+
let(:entity_id) { random_number }
|
|
8
|
+
let(:options) do
|
|
9
|
+
{
|
|
10
|
+
assertion_consumer_service_url: assertion_consumer_service_url,
|
|
11
|
+
entity_id: entity_id
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
let(:service_provider) do
|
|
15
|
+
Stormpath::Authentication::RegisterServiceProvider.new(identity_provider, options).call
|
|
16
|
+
end
|
|
17
|
+
let(:service_provider_registration) { identity_provider.saml_service_provider_registrations.first }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
service_provider
|
|
21
|
+
service_provider_registration.default_relay_state = 'example_jwt'
|
|
22
|
+
service_provider_registration.save
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
after do
|
|
26
|
+
service_provider.delete
|
|
27
|
+
application.delete
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'instances should respond to attribute property methods' do
|
|
31
|
+
expect(service_provider_registration).to be_a Stormpath::Resource::SamlServiceProviderRegistration
|
|
32
|
+
|
|
33
|
+
[:created_at, :modified_at].each do |prop_reader|
|
|
34
|
+
expect(service_provider_registration).to respond_to(prop_reader)
|
|
35
|
+
expect(service_provider_registration.send(prop_reader)).to be_a String
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
[:status, :default_relay_state].each do |property_accessor|
|
|
39
|
+
expect(service_provider_registration).to respond_to(property_accessor)
|
|
40
|
+
expect(service_provider_registration).to respond_to("#{property_accessor}=")
|
|
41
|
+
expect(service_provider_registration.send(property_accessor)).to be_a String
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe 'associations' do
|
|
46
|
+
it 'should respond to identity_provider' do
|
|
47
|
+
expect(service_provider_registration.identity_provider).to(
|
|
48
|
+
be_a(Stormpath::Resource::SamlIdentityProvider)
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should respond to service_provider' do
|
|
53
|
+
expect(service_provider_registration.service_provider).to(
|
|
54
|
+
be_a(Stormpath::Resource::RegisteredSamlServiceProvider)
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|