stormpath-sdk 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +3 -3
- data/CHANGES.md +8 -0
- data/lib/stormpath-sdk.rb +8 -0
- data/lib/stormpath-sdk/auth/create_factor.rb +64 -0
- data/lib/stormpath-sdk/data_store.rb +17 -1
- data/lib/stormpath-sdk/oauth/authenticator.rb +2 -1
- data/lib/stormpath-sdk/oauth/challenge_factor_grant.rb +25 -0
- data/lib/stormpath-sdk/oauth/challenge_factor_grant_request.rb +16 -0
- data/lib/stormpath-sdk/resource/account.rb +6 -0
- data/lib/stormpath-sdk/resource/account_link.rb +1 -1
- data/lib/stormpath-sdk/resource/challenge.rb +26 -0
- data/lib/stormpath-sdk/resource/collection.rb +0 -1
- data/lib/stormpath-sdk/resource/directory.rb +1 -0
- data/lib/stormpath-sdk/resource/factor.rb +26 -0
- data/lib/stormpath-sdk/resource/field.rb +20 -0
- data/lib/stormpath-sdk/resource/linked_account.rb +1 -1
- data/lib/stormpath-sdk/resource/phone.rb +21 -0
- data/lib/stormpath-sdk/resource/schema.rb +21 -0
- data/lib/stormpath-sdk/version.rb +2 -2
- data/spec/auth/create_factor_spec.rb +92 -0
- data/spec/auth/http_basic_authentication_spec.rb +3 -3
- data/spec/auth/http_bearer_authentication_spec.rb +3 -3
- data/spec/client_spec.rb +25 -25
- data/spec/oauth/access_token_authentication_result_spec.rb +3 -3
- data/spec/provider/provider_spec.rb +2 -2
- data/spec/resource/account_creation_policy_spec.rb +2 -2
- data/spec/resource/account_link_spec.rb +2 -2
- data/spec/resource/account_spec.rb +196 -12
- data/spec/resource/account_store_mapping_spec.rb +3 -3
- data/spec/resource/account_store_spec.rb +4 -4
- data/spec/resource/api_key_spec.rb +3 -3
- data/spec/resource/application_spec.rb +74 -33
- data/spec/resource/challenge_spec.rb +53 -0
- data/spec/resource/collection_spec.rb +6 -6
- data/spec/resource/custom_data_spec.rb +2 -2
- data/spec/resource/directory_spec.rb +27 -21
- data/spec/resource/email_template_spec.rb +2 -2
- data/spec/resource/factor_spec.rb +124 -0
- data/spec/resource/field_spec.rb +35 -0
- data/spec/resource/group_membership_spec.rb +3 -3
- data/spec/resource/group_spec.rb +3 -3
- data/spec/resource/linked_account_spec.rb +2 -2
- data/spec/resource/organization_spec.rb +6 -6
- data/spec/resource/password_policy_spec.rb +2 -2
- data/spec/resource/password_strength_spec.rb +2 -2
- data/spec/resource/phone_spec.rb +63 -0
- data/spec/resource/schema_spec.rb +39 -0
- data/spec/resource/status_spec.rb +4 -4
- data/spec/spec_helper.rb +6 -3
- data/spec/support/custom_data_storage_behavior.rb +2 -2
- data/spec/support/mocked_provider_accounts.rb +106 -0
- data/spec/support/resource_helpers.rb +20 -16
- metadata +16 -2
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Stormpath::Resource::EmailTemplate, :vcr do
|
4
|
-
let(:application) { test_api_client.applications.create(
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
5
5
|
|
6
6
|
after { application.delete }
|
7
7
|
|
8
8
|
describe 'instances should respond to attribute property methods' do
|
9
|
-
let(:directory) { test_api_client.directories.create(
|
9
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
10
10
|
let(:password_policy) { directory.password_policy }
|
11
11
|
let(:reset_email_template) { password_policy.reset_email_templates.first }
|
12
12
|
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Stormpath::Resource::Factor, :vcr do
|
4
|
+
describe 'instances should respond to attribute property methods' do
|
5
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
6
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
7
|
+
|
8
|
+
after do
|
9
|
+
factor.delete if factor
|
10
|
+
account.delete if account
|
11
|
+
directory.delete if directory
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'type sms' do
|
15
|
+
let(:factor) do
|
16
|
+
account.factors.create(
|
17
|
+
type: 'SMS',
|
18
|
+
phone: {
|
19
|
+
number: '+12025550173',
|
20
|
+
name: 'test phone',
|
21
|
+
description: 'this is a testing phone number'
|
22
|
+
}
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
it do
|
27
|
+
[:type, :status].each do |property_accessor|
|
28
|
+
expect(factor).to respond_to(property_accessor)
|
29
|
+
expect(factor).to respond_to("#{property_accessor}=")
|
30
|
+
expect(factor.send(property_accessor)).to be_a String
|
31
|
+
end
|
32
|
+
|
33
|
+
[:verification_status].each do |property_getter|
|
34
|
+
expect(factor).to respond_to(property_getter)
|
35
|
+
expect(factor.send(property_getter)).to be_a String
|
36
|
+
end
|
37
|
+
|
38
|
+
expect(factor.account).to be_a Stormpath::Resource::Account
|
39
|
+
expect(factor.phone).to be_a Stormpath::Resource::Phone
|
40
|
+
expect(factor.challenges).to be_a Stormpath::Resource::Collection
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'type google_authenticator' do
|
45
|
+
let(:factor) do
|
46
|
+
account.factors.create(
|
47
|
+
type: 'google-authenticator',
|
48
|
+
issuer: 'ACME'
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
it do
|
53
|
+
[:type, :status].each do |property_accessor|
|
54
|
+
expect(factor).to respond_to(property_accessor)
|
55
|
+
expect(factor).to respond_to("#{property_accessor}=")
|
56
|
+
expect(factor.send(property_accessor)).to be_a String
|
57
|
+
end
|
58
|
+
|
59
|
+
[:verification_status, :secret, :key_uri, :base64_q_r_image, :qr_code].each do |property_getter|
|
60
|
+
expect(factor).to respond_to(property_getter)
|
61
|
+
expect(factor.send(property_getter)).to be_a String
|
62
|
+
end
|
63
|
+
|
64
|
+
expect(factor.account).to be_a Stormpath::Resource::Account
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'factor associations' do
|
70
|
+
let(:app) { test_api_client.applications.create(application_attrs) }
|
71
|
+
let(:application) { test_api_client.applications.get app.href }
|
72
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
73
|
+
|
74
|
+
before { map_account_store(app, directory, 1, true, true) }
|
75
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
76
|
+
let(:phone_number) { '+12025550173' }
|
77
|
+
|
78
|
+
let(:factor) do
|
79
|
+
account.factors.create(
|
80
|
+
type: 'SMS',
|
81
|
+
phone: {
|
82
|
+
number: phone_number,
|
83
|
+
name: 'test phone',
|
84
|
+
description: 'this is a testing phone number'
|
85
|
+
}
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should belong_to account' do
|
90
|
+
expect(factor.account).to eq(account)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should have one phone' do
|
94
|
+
expect(factor.phone.number).to eq(phone_number)
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'challenges' do
|
98
|
+
before do
|
99
|
+
stub_request(:post, "#{factor.href}/challenges")
|
100
|
+
.to_return(body: Stormpath::Test.mocked_challenge)
|
101
|
+
stub_request(:get, factor.href)
|
102
|
+
.to_return(body: Stormpath::Test.mocked_factor_response)
|
103
|
+
end
|
104
|
+
let!(:challenge) { factor.challenges.create(message: 'Enter code: ${code}') }
|
105
|
+
|
106
|
+
it 'should have a collection of challenges' do
|
107
|
+
expect(factor.challenges).to be_a Stormpath::Resource::Collection
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should have the most recent challenge' do
|
111
|
+
most_recent_challenge = factor.challenges.create(message: 'Enter new code: ${code}')
|
112
|
+
reloaded_factor = account.factors.get(factor.href)
|
113
|
+
expect(reloaded_factor.most_recent_challenge.href).to eq(most_recent_challenge.href)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
after do
|
118
|
+
application.delete if application
|
119
|
+
account.delete if account
|
120
|
+
directory.delete if directory
|
121
|
+
factor.delete if factor
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Stormpath::Resource::Field, :vcr do
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
5
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
6
|
+
let(:schema) { directory.account_schema }
|
7
|
+
let(:field) { schema.fields.first }
|
8
|
+
|
9
|
+
after do
|
10
|
+
directory.delete
|
11
|
+
application.delete
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'instances should respond to attribute property methods' do
|
15
|
+
it do
|
16
|
+
expect(field).to be_a Stormpath::Resource::Field
|
17
|
+
|
18
|
+
[:name, :created_at, :modified_at].each do |property_getter|
|
19
|
+
expect(field).to respond_to(property_getter)
|
20
|
+
expect(field.send(property_getter)).to be_a String
|
21
|
+
end
|
22
|
+
|
23
|
+
expect(field).to respond_to(:required)
|
24
|
+
expect(field.required).to eq !!field.required
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'field associations' do
|
29
|
+
context '#schema' do
|
30
|
+
it 'should be able to get the account schema' do
|
31
|
+
expect(field.schema).to be_a Stormpath::Resource::Schema
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -7,9 +7,9 @@ describe Stormpath::Resource::GroupMembership, :vcr do
|
|
7
7
|
|
8
8
|
describe '#add_account' do
|
9
9
|
context 'given an account and a group' do
|
10
|
-
let(:directory) { test_api_client.directories.create(
|
11
|
-
let(:group) { directory.groups.create(
|
12
|
-
let(:account) { directory.accounts.create(
|
10
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
11
|
+
let(:group) { directory.groups.create(group_attrs) }
|
12
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
13
13
|
|
14
14
|
before { group.add_account account }
|
15
15
|
|
data/spec/resource/group_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Stormpath::Resource::Group, :vcr do
|
4
|
-
let(:directory) { test_api_client.directories.create(
|
4
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
5
5
|
after { directory.delete }
|
6
6
|
|
7
7
|
describe 'instances should respond to attribute property methods' do
|
@@ -40,8 +40,8 @@ describe Stormpath::Resource::Group, :vcr do
|
|
40
40
|
|
41
41
|
describe '#add_or_remove_account' do
|
42
42
|
context 'given an account' do
|
43
|
-
let(:group) { directory.groups.create(
|
44
|
-
let(:account) { directory.accounts.create(
|
43
|
+
let(:group) { directory.groups.create(group_attrs) }
|
44
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
45
45
|
|
46
46
|
before { group.add_account(account) }
|
47
47
|
|
@@ -7,10 +7,10 @@ describe Stormpath::Resource::LinkedAccount, :vcr do
|
|
7
7
|
let(:directory1) { test_api_client.directories.create(name: 'ruby sdk dir 1') }
|
8
8
|
let(:directory2) { test_api_client.directories.create(name: 'ruby sdk dir 2') }
|
9
9
|
let(:account1) do
|
10
|
-
directory1.accounts.create(
|
10
|
+
directory1.accounts.create(account_attrs(email: 'jekyll', username: 'jekyll'))
|
11
11
|
end
|
12
12
|
let(:account2) do
|
13
|
-
directory2.accounts.create(
|
13
|
+
directory2.accounts.create(account_attrs(email: 'hyde', username: 'hyde'))
|
14
14
|
end
|
15
15
|
|
16
16
|
before do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Stormpath::Resource::Organization, :vcr do
|
4
4
|
let(:organization) do
|
5
|
-
test_api_client.organizations.create(
|
5
|
+
test_api_client.organizations.create(organization_attrs(name: 'test_ruby_organization',
|
6
6
|
name_key: 'testorganization',
|
7
7
|
description: 'test organization'))
|
8
8
|
end
|
@@ -56,14 +56,14 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
56
56
|
|
57
57
|
it 'should raise Stormpath::Error' do
|
58
58
|
expect do
|
59
|
-
test_api_client.organizations.create(
|
59
|
+
test_api_client.organizations.create(organization_attrs(name_key: 'testorganization'))
|
60
60
|
end.to raise_error(Stormpath::Error)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
describe 'associations' do
|
66
|
-
let(:directory) { test_api_client.directories.create(
|
66
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
67
67
|
after { directory.delete }
|
68
68
|
|
69
69
|
context 'groups' do
|
@@ -77,8 +77,8 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
context 'accounts' do
|
80
|
-
let(:account) { directory.accounts.create(
|
81
|
-
let(:org_account) { directory.accounts.create(
|
80
|
+
let(:account) { directory.accounts.create(account_attrs(email: 'rubysdk')) }
|
81
|
+
let(:org_account) { directory.accounts.create(account_attrs(email: 'rubysdk2')) }
|
82
82
|
|
83
83
|
before { map_organization_store(directory, organization, true) }
|
84
84
|
|
@@ -129,7 +129,7 @@ describe Stormpath::Resource::Organization, :vcr do
|
|
129
129
|
end
|
130
130
|
|
131
131
|
describe 'organization account store mapping' do
|
132
|
-
let(:directory) { test_api_client.directories.create(
|
132
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
133
133
|
after { directory.delete }
|
134
134
|
|
135
135
|
context 'given an account_store is a directory' do
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Stormpath::Resource::PasswordPolicy, :vcr do
|
4
|
-
let(:application) { test_api_client.applications.create(
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
5
5
|
|
6
6
|
after { application.delete }
|
7
7
|
|
8
8
|
describe 'instances should respond to attribute property methods' do
|
9
|
-
let(:directory) { test_api_client.directories.create(
|
9
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
10
10
|
let(:password_policy) { directory.password_policy }
|
11
11
|
|
12
12
|
before do
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Stormpath::Resource::PasswordStrength, :vcr do
|
4
|
-
let(:application) { test_api_client.applications.create(
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
5
5
|
|
6
6
|
after { application.delete }
|
7
7
|
|
8
8
|
describe 'instances should respond to attribute property methods' do
|
9
|
-
let(:directory) { test_api_client.directories.create(
|
9
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
10
10
|
let(:password_policy) { directory.password_policy }
|
11
11
|
let(:password_strength) { password_policy.strength }
|
12
12
|
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Stormpath::Resource::Phone, :vcr do
|
4
|
+
describe 'instances should respond to attribute property methods' do
|
5
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
6
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
7
|
+
let(:phone) do
|
8
|
+
account.phones.create(
|
9
|
+
number: '+12025550173',
|
10
|
+
name: 'test phone',
|
11
|
+
description: 'this is a testing phone number'
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
phone.delete
|
17
|
+
account.delete
|
18
|
+
directory.delete
|
19
|
+
end
|
20
|
+
|
21
|
+
it do
|
22
|
+
[:number, :name, :description].each do |property_accessor|
|
23
|
+
expect(phone).to respond_to(property_accessor)
|
24
|
+
expect(phone).to respond_to("#{property_accessor}=")
|
25
|
+
expect(phone.send(property_accessor)).to be_a String
|
26
|
+
end
|
27
|
+
|
28
|
+
[:verification_status, :status, :created_at, :modified_at].each do |property_getter|
|
29
|
+
expect(phone).to respond_to(property_getter)
|
30
|
+
expect(phone.send(property_getter)).to be_a String
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(phone.account).to be_a Stormpath::Resource::Account
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'phone associations' do
|
38
|
+
let(:app) { test_api_client.applications.create(application_attrs) }
|
39
|
+
let(:application) { test_api_client.applications.get app.href }
|
40
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
41
|
+
|
42
|
+
before { map_account_store(app, directory, 1, true, true) }
|
43
|
+
let(:account) { directory.accounts.create(account_attrs) }
|
44
|
+
let(:phone) do
|
45
|
+
account.phones.create(
|
46
|
+
number: '+12025550173',
|
47
|
+
name: 'test phone',
|
48
|
+
description: 'this is a testing phone number'
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should belong_to account' do
|
53
|
+
expect(phone.account).to eq(account)
|
54
|
+
end
|
55
|
+
|
56
|
+
after do
|
57
|
+
application.delete if application
|
58
|
+
account.delete if account
|
59
|
+
directory.delete if directory
|
60
|
+
phone.delete if phone
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Stormpath::Resource::Schema, :vcr do
|
4
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
5
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
6
|
+
let(:schema) { directory.account_schema }
|
7
|
+
|
8
|
+
after do
|
9
|
+
directory.delete
|
10
|
+
application.delete
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'instances should respond to attribute property methods' do
|
14
|
+
it do
|
15
|
+
expect(schema).to be_a Stormpath::Resource::Schema
|
16
|
+
|
17
|
+
[:created_at, :modified_at].each do |property_getter|
|
18
|
+
expect(schema).to respond_to(property_getter)
|
19
|
+
expect(schema.send(property_getter)).to be_a String
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'schema associations' do
|
25
|
+
context '#fields' do
|
26
|
+
let(:field) { directory.fields.first }
|
27
|
+
|
28
|
+
it 'should be able to get a list of fields' do
|
29
|
+
expect(schema.fields).to be_a Stormpath::Resource::Collection
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context '#directory' do
|
34
|
+
it 'should be able to fetch the directory' do
|
35
|
+
expect(schema.directory).to eq directory
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -7,11 +7,11 @@ describe 'StatusOnDirectoryAndAccount', :vcr do
|
|
7
7
|
let(:authenticate_user) do
|
8
8
|
application.authenticate_account(auth_request)
|
9
9
|
end
|
10
|
-
let(:directory) { test_api_client.directories.create(
|
11
|
-
let(:application) { test_api_client.applications.create(
|
12
|
-
let(:group) { directory.groups.create(
|
10
|
+
let(:directory) { test_api_client.directories.create(directory_attrs) }
|
11
|
+
let(:application) { test_api_client.applications.create(application_attrs) }
|
12
|
+
let(:group) { directory.groups.create(group_attrs) }
|
13
13
|
let!(:account) do
|
14
|
-
directory.accounts.create(
|
14
|
+
directory.accounts.create(account_attrs(email: 'rubytest', password: 'P@$$w0rd'))
|
15
15
|
end
|
16
16
|
let(:reloaded_account) { test_api_client.accounts.get account.href }
|
17
17
|
before { map_account_store(application, directory, 0, true, true) }
|
data/spec/spec_helper.rb
CHANGED
@@ -15,15 +15,18 @@ require 'uuidtools'
|
|
15
15
|
|
16
16
|
Dir['./spec/support/*.rb'].each { |file| require file }
|
17
17
|
|
18
|
-
HIJACK_HTTP_REQUESTS_WITH_VCR = ENV['STORMPATH_SDK_TEST_ENVIRONMENT'] != 'CI'
|
19
|
-
|
20
18
|
WebMock.allow_net_connect!
|
21
19
|
|
22
20
|
VCR.configure do |c|
|
23
21
|
c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
24
22
|
c.hook_into :webmock
|
25
23
|
c.configure_rspec_metadata!
|
26
|
-
|
24
|
+
|
25
|
+
c.before_record do |i|
|
26
|
+
i.request.headers.delete('Authorization')
|
27
|
+
u = URI.parse(i.request.uri)
|
28
|
+
i.request.uri.sub!(/:\/\/.*#{Regexp.escape(u.host)}/, "://#{u.host}" )
|
29
|
+
end
|
27
30
|
end
|
28
31
|
|
29
32
|
RSpec.configure do |c|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
shared_examples_for 'account_custom_data' do
|
2
2
|
context 'account' do
|
3
|
-
let(:custom_data_storage) { directory.accounts.create(
|
3
|
+
let(:custom_data_storage) { directory.accounts.create(account_attrs) }
|
4
4
|
let(:custom_data_storage_w_nested_custom_data) do
|
5
5
|
directory.accounts.create(
|
6
6
|
username: 'ruby username',
|
@@ -24,7 +24,7 @@ end
|
|
24
24
|
|
25
25
|
shared_examples_for 'group_custom_data' do
|
26
26
|
context 'group' do
|
27
|
-
let(:custom_data_storage) { directory.groups.create(
|
27
|
+
let(:custom_data_storage) { directory.groups.create(group_attrs) }
|
28
28
|
let(:custom_data_storage_w_nested_custom_data) do
|
29
29
|
directory.groups.create(
|
30
30
|
name: 'ruby group',
|