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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +21 -0
  3. data/CHANGES.md +11 -0
  4. data/README.md +23 -25
  5. data/lib/stormpath-sdk.rb +11 -2
  6. data/lib/stormpath-sdk/api_key.rb +0 -1
  7. data/lib/stormpath-sdk/auth/basic_authenticator.rb +7 -7
  8. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +7 -11
  9. data/lib/stormpath-sdk/auth/create_factor.rb +1 -1
  10. data/lib/stormpath-sdk/auth/register_service_provider.rb +41 -0
  11. data/lib/stormpath-sdk/auth/username_password_request.rb +3 -5
  12. data/lib/stormpath-sdk/cache/cache.rb +3 -3
  13. data/lib/stormpath-sdk/cache/cache_entry.rb +2 -2
  14. data/lib/stormpath-sdk/cache/cache_manager.rb +3 -4
  15. data/lib/stormpath-sdk/cache/cache_stats.rb +1 -3
  16. data/lib/stormpath-sdk/cache/disabled_cache_store.rb +5 -8
  17. data/lib/stormpath-sdk/cache/memory_store.rb +1 -1
  18. data/lib/stormpath-sdk/cache/redis_store.rb +4 -4
  19. data/lib/stormpath-sdk/client.rb +35 -33
  20. data/lib/stormpath-sdk/data_store.rb +278 -257
  21. data/lib/stormpath-sdk/error.rb +18 -7
  22. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +76 -82
  23. data/lib/stormpath-sdk/http/http_client_request_executor.rb +10 -8
  24. data/lib/stormpath-sdk/http/response.rb +5 -7
  25. data/lib/stormpath-sdk/id_site/id_site_result.rb +5 -6
  26. data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +5 -9
  27. data/lib/stormpath-sdk/oauth/authenticator.rb +2 -2
  28. data/lib/stormpath-sdk/oauth/error.rb +4 -4
  29. data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +1 -1
  30. data/lib/stormpath-sdk/oauth/password_grant_request.rb +1 -1
  31. data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +2 -2
  32. data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +2 -2
  33. data/lib/stormpath-sdk/provider/account_access.rb +0 -2
  34. data/lib/stormpath-sdk/provider/account_result.rb +1 -2
  35. data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +6 -2
  36. data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +7 -3
  37. data/lib/stormpath-sdk/provider/github/github_provider.rb +6 -2
  38. data/lib/stormpath-sdk/provider/github/github_provider_data.rb +6 -2
  39. data/lib/stormpath-sdk/provider/google/google_provider.rb +7 -3
  40. data/lib/stormpath-sdk/provider/google/google_provider_data.rb +6 -2
  41. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +6 -2
  42. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +6 -2
  43. data/lib/stormpath-sdk/provider/provider.rb +8 -4
  44. data/lib/stormpath-sdk/provider/provider_data.rb +6 -2
  45. data/lib/stormpath-sdk/provider/saml/saml_provider.rb +10 -4
  46. data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +6 -3
  47. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +6 -2
  48. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +6 -2
  49. data/lib/stormpath-sdk/provider/twitter/twitter_provider.rb +6 -2
  50. data/lib/stormpath-sdk/provider/twitter/twitter_provider_data.rb +6 -2
  51. data/lib/stormpath-sdk/resource/account.rb +46 -40
  52. data/lib/stormpath-sdk/resource/account_link.rb +9 -5
  53. data/lib/stormpath-sdk/resource/account_linking_policy.rb +8 -4
  54. data/lib/stormpath-sdk/resource/account_membership.rb +1 -1
  55. data/lib/stormpath-sdk/resource/account_overrides.rb +20 -16
  56. data/lib/stormpath-sdk/resource/account_store.rb +15 -11
  57. data/lib/stormpath-sdk/resource/account_store_mapping.rb +14 -13
  58. data/lib/stormpath-sdk/resource/application.rb +147 -136
  59. data/lib/stormpath-sdk/resource/application_web_config.rb +11 -7
  60. data/lib/stormpath-sdk/resource/associations.rb +36 -43
  61. data/lib/stormpath-sdk/resource/attribute_statement_mapping_rules.rb +8 -0
  62. data/lib/stormpath-sdk/resource/base.rb +201 -200
  63. data/lib/stormpath-sdk/resource/challenge.rb +12 -8
  64. data/lib/stormpath-sdk/resource/collection.rb +77 -76
  65. data/lib/stormpath-sdk/resource/custom_data.rb +60 -61
  66. data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +28 -25
  67. data/lib/stormpath-sdk/resource/custom_data_storage.rb +18 -16
  68. data/lib/stormpath-sdk/resource/directory.rb +37 -60
  69. data/lib/stormpath-sdk/resource/email_verification_token.rb +7 -3
  70. data/lib/stormpath-sdk/resource/error.rb +8 -4
  71. data/lib/stormpath-sdk/resource/expansion.rb +22 -20
  72. data/lib/stormpath-sdk/resource/factor.rb +12 -8
  73. data/lib/stormpath-sdk/resource/field.rb +8 -4
  74. data/lib/stormpath-sdk/resource/group.rb +21 -16
  75. data/lib/stormpath-sdk/resource/group_membership.rb +7 -5
  76. data/lib/stormpath-sdk/resource/instance.rb +10 -6
  77. data/lib/stormpath-sdk/resource/linked_account.rb +7 -3
  78. data/lib/stormpath-sdk/resource/oauth_policy.rb +7 -3
  79. data/lib/stormpath-sdk/resource/organization.rb +14 -10
  80. data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +8 -4
  81. data/lib/stormpath-sdk/resource/password_reset_token.rb +9 -5
  82. data/lib/stormpath-sdk/resource/phone.rb +8 -4
  83. data/lib/stormpath-sdk/resource/registered_saml_service_provider.rb +8 -0
  84. data/lib/stormpath-sdk/resource/saml_identity_provider.rb +14 -0
  85. data/lib/stormpath-sdk/resource/saml_identity_provider_metadata.rb +9 -0
  86. data/lib/stormpath-sdk/resource/saml_policy.rb +10 -0
  87. data/lib/stormpath-sdk/resource/saml_service_provider.rb +7 -0
  88. data/lib/stormpath-sdk/{provider/saml/saml_mapping_rules.rb → resource/saml_service_provider_metadata.rb} +6 -5
  89. data/lib/stormpath-sdk/resource/saml_service_provider_registration.rb +11 -0
  90. data/lib/stormpath-sdk/resource/schema.rb +8 -4
  91. data/lib/stormpath-sdk/resource/tenant.rb +11 -8
  92. data/lib/stormpath-sdk/resource/user_info_mapping_rules.rb +7 -3
  93. data/lib/stormpath-sdk/resource/utils.rb +7 -10
  94. data/lib/stormpath-sdk/resource/verification_email.rb +7 -3
  95. data/lib/stormpath-sdk/resource/x_509_certificate.rb +7 -0
  96. data/lib/stormpath-sdk/util/assert.rb +1 -3
  97. data/lib/stormpath-sdk/version.rb +2 -2
  98. data/spec/auth/basic_authenticator_spec.rb +28 -24
  99. data/spec/auth/register_service_provider_spec.rb +68 -0
  100. data/spec/auth/sauthc1_signer_spec.rb +8 -4
  101. data/spec/cache/cache_entry_spec.rb +28 -29
  102. data/spec/cache/cache_spec.rb +9 -9
  103. data/spec/cache/cache_stats_spec.rb +1 -1
  104. data/spec/client_spec.rb +63 -63
  105. data/spec/data_store_spec.rb +23 -14
  106. data/spec/oauth/access_token_authentication_result_spec.rb +8 -2
  107. data/spec/provider/account_resolver_spec.rb +6 -4
  108. data/spec/provider/provider_spec.rb +6 -6
  109. data/spec/resource/account_creation_policy_spec.rb +1 -1
  110. data/spec/resource/account_link_spec.rb +7 -15
  111. data/spec/resource/account_spec.rb +17 -17
  112. data/spec/resource/account_store_mapping_spec.rb +16 -22
  113. data/spec/resource/account_store_spec.rb +3 -3
  114. data/spec/resource/application_spec.rb +324 -330
  115. data/spec/resource/base_spec.rb +7 -31
  116. data/spec/resource/collection_spec.rb +63 -114
  117. data/spec/resource/custom_data_spec.rb +1 -1
  118. data/spec/resource/directory_spec.rb +91 -87
  119. data/spec/resource/expansion_spec.rb +10 -10
  120. data/spec/resource/factor_spec.rb +1 -1
  121. data/spec/resource/group_spec.rb +1 -1
  122. data/spec/resource/linked_account_spec.rb +7 -7
  123. data/spec/resource/organization_spec.rb +12 -11
  124. data/spec/resource/phone_spec.rb +1 -1
  125. data/spec/resource/registered_saml_service_provider_spec.rb +35 -0
  126. data/spec/resource/saml_identity_provider_metadata_spec.rb +27 -0
  127. data/spec/resource/saml_identity_provider_spec.rb +94 -0
  128. data/spec/resource/saml_policy_spec.rb +27 -0
  129. data/spec/resource/saml_service_provider_registration_spec.rb +58 -0
  130. data/spec/resource/saml_service_provider_spec.rb +19 -0
  131. data/spec/resource/status_spec.rb +4 -3
  132. data/spec/resource/tenant_spec.rb +4 -6
  133. data/spec/spec_helper.rb +1 -1
  134. data/spec/support/custom_data_save_period.rb +4 -0
  135. data/spec/support/custom_data_storage_behavior.rb +7 -8
  136. data/spec/support/mocked_provider_accounts.rb +101 -101
  137. data/spec/support/mocked_saml_responses.rb +130 -0
  138. data/spec/support/resource_factory.rb +4 -4
  139. data/spec/support/resource_helpers.rb +10 -4
  140. data/spec/support/resource_matchers.rb +4 -4
  141. data/spec/support/test_request_executor.rb +2 -2
  142. metadata +21 -8
  143. data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -19
  144. data/spec/fixtures/response/create_saml_directory.json +0 -26
  145. data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -12
  146. data/spec/fixtures/response/get_saml_directory_provider.json +0 -16
  147. 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 'foo'
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({ expand: 'foo' })
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 'foo', 'bar'
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({ expand: 'foo,bar' })
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 "#add_property" do
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({ expand: 'foo' })
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({ expand: 'foo,bar' })
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({ expand: 'foo,bar' })
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({ expand: 'foo(offset:5,limit:100)' })
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({ expand: 'foo(offset:25)' })
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 app.href }
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) }
@@ -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 name: 'RubyTestGroup', description: 'testDescription' }
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) do
5
- test_api_client.applications.create(name: 'ruby sdk app', description: 'ruby sdk desc')
6
- end
7
- let(:directory1) { test_api_client.directories.create(name: 'ruby sdk dir 1') }
8
- let(:directory2) { test_api_client.directories.create(name: 'ruby sdk dir 2') }
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: 'jekyll', username: 'jekyll'))
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: 'hyde', username: 'hyde'))
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(name: 'test_ruby_organization',
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: 'testorganization'))
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(name: 'test_group') }
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(:account) { directory.accounts.create(account_attrs(email: 'rubysdk')) }
82
- let(:org_account) { directory.accounts.create(account_attrs(email: 'rubysdk2')) }
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 = 'changed-test-organization'
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('changed-test-organization')
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(name: 'test_group') }
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)
@@ -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 app.href }
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