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.
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