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