contentful-management 1.8.1 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +15 -0
- data/README.md +209 -41
- data/contentful-management.gemspec +1 -1
- data/lib/contentful/management/asset.rb +1 -1
- data/lib/contentful/management/client.rb +155 -31
- data/lib/contentful/management/client_organization_methods_factory.rb +23 -0
- data/lib/contentful/management/client_personal_access_tokens_methods_factory.rb +27 -0
- data/lib/contentful/management/client_snapshot_methods_factory.rb +16 -6
- data/lib/contentful/management/client_space_membership_methods_factory.rb +15 -0
- data/lib/contentful/management/client_ui_extension_methods_factory.rb +15 -0
- data/lib/contentful/management/client_user_methods_factory.rb +27 -0
- data/lib/contentful/management/client_webhook_call_methods_factory.rb +30 -0
- data/lib/contentful/management/client_webhook_health_methods_factory.rb +27 -0
- data/lib/contentful/management/content_type.rb +10 -0
- data/lib/contentful/management/content_type_snapshot_methods_factory.rb +35 -0
- data/lib/contentful/management/editor_interface.rb +1 -1
- data/lib/contentful/management/organization.rb +20 -0
- data/lib/contentful/management/personal_access_token.rb +45 -0
- data/lib/contentful/management/request.rb +0 -1
- data/lib/contentful/management/resource.rb +4 -2
- data/lib/contentful/management/resource_builder.rb +15 -0
- data/lib/contentful/management/snapshot.rb +31 -20
- data/lib/contentful/management/space.rb +32 -10
- data/lib/contentful/management/space_membership.rb +43 -0
- data/lib/contentful/management/space_space_membership_methods_factory.rb +15 -0
- data/lib/contentful/management/space_ui_extension_methods_factory.rb +15 -0
- data/lib/contentful/management/ui_extension.rb +106 -0
- data/lib/contentful/management/user.rb +28 -0
- data/lib/contentful/management/version.rb +1 -1
- data/lib/contentful/management/webhook.rb +20 -0
- data/lib/contentful/management/webhook_call.rb +77 -0
- data/lib/contentful/management/webhook_health.rb +79 -0
- data/lib/contentful/management/webhook_webhook_call_methods_factory.rb +30 -0
- data/lib/contentful/management/webhook_webhook_health_methods_factory.rb +28 -0
- data/spec/fixtures/vcr_cassettes/get_request.yml +34 -17
- data/spec/fixtures/vcr_cassettes/organization/all.yml +100 -0
- data/spec/fixtures/vcr_cassettes/personal_access_token/all.yml +101 -0
- data/spec/fixtures/vcr_cassettes/personal_access_token/create.yml +94 -0
- data/spec/fixtures/vcr_cassettes/personal_access_token/find.yml +91 -0
- data/spec/fixtures/vcr_cassettes/personal_access_token/find_not_found.yml +88 -0
- data/spec/fixtures/vcr_cassettes/personal_access_token/revoke.yml +179 -0
- data/spec/fixtures/vcr_cassettes/snapshot/ct_all.yml +207 -0
- data/spec/fixtures/vcr_cassettes/snapshot/ct_find.yml +198 -0
- data/spec/fixtures/vcr_cassettes/snapshot/ct_find_not_found.yml +94 -0
- data/spec/fixtures/vcr_cassettes/space/all_disabled_cache.yml +428 -0
- data/spec/fixtures/vcr_cassettes/space/disabled_cache.yml +120 -0
- data/spec/fixtures/vcr_cassettes/space_memberships/all.yml +190 -0
- data/spec/fixtures/vcr_cassettes/space_memberships/create.yml +143 -0
- data/spec/fixtures/vcr_cassettes/space_memberships/delete.yml +322 -0
- data/spec/fixtures/vcr_cassettes/space_memberships/find.yml +141 -0
- data/spec/fixtures/vcr_cassettes/ui_extension/all.yml +1020 -0
- data/spec/fixtures/vcr_cassettes/ui_extension/create.yml +133 -0
- data/spec/fixtures/vcr_cassettes/ui_extension/delete.yml +291 -0
- data/spec/fixtures/vcr_cassettes/ui_extension/find.yml +126 -0
- data/spec/fixtures/vcr_cassettes/user/find.yml +96 -0
- data/spec/fixtures/vcr_cassettes/webhook_call/all.yml +151 -0
- data/spec/fixtures/vcr_cassettes/webhook_call/find.yml +88 -0
- data/spec/fixtures/vcr_cassettes/webhook_call/find_not_found.yml +93 -0
- data/spec/fixtures/vcr_cassettes/webhook_health/find.yml +111 -0
- data/spec/lib/contentful/management/client_spec.rb +25 -26
- data/spec/lib/contentful/management/entry_spec.rb +48 -48
- data/spec/lib/contentful/management/organization_spec.rb +33 -0
- data/spec/lib/contentful/management/personal_access_token_spec.rb +85 -0
- data/spec/lib/contentful/management/snapshot_spec.rb +134 -47
- data/spec/lib/contentful/management/space_membership_spec.rb +147 -0
- data/spec/lib/contentful/management/space_spec.rb +35 -1
- data/spec/lib/contentful/management/ui_extension_spec.rb +276 -0
- data/spec/lib/contentful/management/user_spec.rb +52 -0
- data/spec/lib/contentful/management/webhook_calls_spec.rb +69 -0
- data/spec/lib/contentful/management/webhook_health_spec.rb +51 -0
- metadata +88 -8
- data/lib/contentful/management/http_client.rb +0 -89
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'contentful/management/space'
|
3
|
+
require 'contentful/management/client'
|
4
|
+
|
5
|
+
module Contentful
|
6
|
+
module Management
|
7
|
+
describe SpaceMembership do
|
8
|
+
let(:token) { ENV.fetch('CF_TEST_CMA_TOKEN', '<ACCESS_TOKEN>') }
|
9
|
+
let(:space_id) { 'facgnwwgj5fe' }
|
10
|
+
let(:membership_id) { '6RdRdobdQzh8zKe1Hogiz4' }
|
11
|
+
let(:client) { Client.new(token, raise_errors: true) }
|
12
|
+
|
13
|
+
subject { client.space_memberships }
|
14
|
+
|
15
|
+
describe 'class methods' do
|
16
|
+
describe '::create_attributes' do
|
17
|
+
it 'requires admin, roles and email keys to be present' do
|
18
|
+
expect { described_class.create_attributes(nil, {}) }.to raise_error KeyError
|
19
|
+
expect { described_class.create_attributes(nil, admin: true) }.to raise_error KeyError
|
20
|
+
expect { described_class.create_attributes(nil, admin: true, roles: []) }.to raise_error KeyError
|
21
|
+
expect { described_class.create_attributes(nil, roles: []) }.to raise_error KeyError
|
22
|
+
expect { described_class.create_attributes(nil, roles: [], email: 'foo@bar.com') }.to raise_error KeyError
|
23
|
+
expect { described_class.create_attributes(nil, email: 'foo@bar.com') }.to raise_error KeyError
|
24
|
+
expect { described_class.create_attributes(nil, admin: true, roles: [], email: 'foo@bar.com') }.not_to raise_error
|
25
|
+
end
|
26
|
+
it 'accepts also strings as keys' do
|
27
|
+
# Symbols were tested on the previous spec - testing strings here
|
28
|
+
expect { described_class.create_attributes(nil, 'admin' => true, 'roles' => [], 'email' => 'foo@bar.com') }.not_to raise_error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '::clean_roles' do
|
33
|
+
let(:json_role) { {
|
34
|
+
"sys": {
|
35
|
+
"id": "foo",
|
36
|
+
"type": "Link",
|
37
|
+
"linkType": "Role"
|
38
|
+
}
|
39
|
+
} }
|
40
|
+
|
41
|
+
let(:link_role) { Link.new(json_role, nil, client) }
|
42
|
+
|
43
|
+
it 'returns the json representation of the roles wether they are a Link or a Hash' do
|
44
|
+
expect(described_class.clean_roles([json_role, link_role])).to eq [json_role, json_role]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'instance methods' do
|
50
|
+
let(:membership) { described_class.new({
|
51
|
+
"admin" => true,
|
52
|
+
"roles" => [{
|
53
|
+
"sys" => {
|
54
|
+
"id" => "foo",
|
55
|
+
"type" => "Link",
|
56
|
+
"linkType" => "Role"
|
57
|
+
}
|
58
|
+
}]
|
59
|
+
}) }
|
60
|
+
|
61
|
+
describe '#roles' do
|
62
|
+
it 'returns an array Link objects' do
|
63
|
+
expect(membership.roles.first).to be_a Link
|
64
|
+
expect(membership.roles.first.id).to eq 'foo'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '.all' do
|
70
|
+
it 'returns a Contentful::Array' do
|
71
|
+
vcr('space_memberships/all') { expect(subject.all(space_id)).to be_kind_of Contentful::Management::Array }
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'builds a Contentful::Management::SpaceMembership' do
|
75
|
+
vcr('space_memberships/all') {
|
76
|
+
memberships = subject.all(space_id)
|
77
|
+
|
78
|
+
admin_membership, normal_membership = memberships.items
|
79
|
+
|
80
|
+
expect(admin_membership).to be_a Contentful::Management::SpaceMembership
|
81
|
+
expect(admin_membership.admin).to eq true
|
82
|
+
expect(admin_membership.roles).to eq []
|
83
|
+
|
84
|
+
expect(normal_membership).to be_a Contentful::Management::SpaceMembership
|
85
|
+
expect(normal_membership.admin).to eq false
|
86
|
+
expect(normal_membership.roles.first).to be_a Link
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'class method also works' do
|
91
|
+
vcr('space_memberships/all') { expect(Contentful::Management::SpaceMembership.all(client, space_id)).to be_kind_of Contentful::Management::Array }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '.find' do
|
96
|
+
it 'returns a Contentful::Management::SpaceMembership' do
|
97
|
+
vcr('space_memberships/find') {
|
98
|
+
membership = subject.find(space_id, membership_id)
|
99
|
+
|
100
|
+
expect(membership).to be_a Contentful::Management::SpaceMembership
|
101
|
+
expect(membership.admin).to eq false
|
102
|
+
expect(membership.roles.first).to be_a Link
|
103
|
+
}
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '.create' do
|
108
|
+
it 'creates a Contentful::Management::SpaceMembership' do
|
109
|
+
vcr('space_memberships/create') {
|
110
|
+
membership = subject.create(
|
111
|
+
space_id,
|
112
|
+
admin: false,
|
113
|
+
roles: [
|
114
|
+
{
|
115
|
+
"sys" => {
|
116
|
+
"type" => "Link",
|
117
|
+
"linkType" => "Role",
|
118
|
+
"id" => "1Nq88dKTNXNaxkbrRpEEw6"
|
119
|
+
}
|
120
|
+
}
|
121
|
+
],
|
122
|
+
email: 'david.litvak+test_rcma@contentful.com'
|
123
|
+
)
|
124
|
+
|
125
|
+
expect(membership).to be_a Contentful::Management::SpaceMembership
|
126
|
+
expect(membership.admin).to eq false
|
127
|
+
expect(membership.roles.first).to be_a Link
|
128
|
+
}
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '#destroy' do
|
133
|
+
it 'deletes the membership' do
|
134
|
+
vcr('space_memberships/delete') {
|
135
|
+
membership = subject.find(space_id, '7pcydolqtgMaSLwmXMvGqW')
|
136
|
+
|
137
|
+
expect(membership.id).to be_truthy
|
138
|
+
|
139
|
+
membership.destroy
|
140
|
+
|
141
|
+
expect { subject.find(space_id, '7pcydolqtgMaSLwmXMvGqW') }.to raise_error Contentful::Management::NotFound
|
142
|
+
}
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -5,7 +5,7 @@ require 'contentful/management/client'
|
|
5
5
|
module Contentful
|
6
6
|
module Management
|
7
7
|
describe Space do
|
8
|
-
let(:token) { '<ACCESS_TOKEN>' }
|
8
|
+
let(:token) { ENV.fetch('CF_TEST_CMA_TOKEN', '<ACCESS_TOKEN>') }
|
9
9
|
let(:space_id) { 'yr5m0jky5hsh' }
|
10
10
|
|
11
11
|
let!(:client) { Client.new(token) }
|
@@ -22,6 +22,22 @@ module Contentful
|
|
22
22
|
it 'builds a Contentful::Management::Space object' do
|
23
23
|
vcr('space/all') { expect(subject.all.first).to be_kind_of Contentful::Management::Space }
|
24
24
|
end
|
25
|
+
describe 'content type caching' do
|
26
|
+
it 'fetches all content types when finding a space' do
|
27
|
+
vcr('space/all') do
|
28
|
+
space = subject.all
|
29
|
+
expect(client.dynamic_entry_cache).not_to be_empty
|
30
|
+
end
|
31
|
+
end
|
32
|
+
it 'doesnt fetch content types when explicitly disabled' do
|
33
|
+
vcr('space/all_disabled_cache') do
|
34
|
+
client = Client.new(token, disable_content_type_caching: true)
|
35
|
+
subject = client.spaces
|
36
|
+
space = subject.all
|
37
|
+
expect(client.dynamic_entry_cache).to be_empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
25
41
|
end
|
26
42
|
|
27
43
|
describe '.find' do
|
@@ -50,6 +66,24 @@ module Contentful
|
|
50
66
|
expect(space.default_locale).to eql 'en-US'
|
51
67
|
end
|
52
68
|
end
|
69
|
+
describe 'content type caching' do
|
70
|
+
it 'fetches all content types when finding a space' do
|
71
|
+
vcr('space/find') do
|
72
|
+
space = subject.find(space_id)
|
73
|
+
expect(client.dynamic_entry_cache).not_to be_empty
|
74
|
+
expect(client.dynamic_entry_cache.key?('5DSpuKrl04eMAGQoQckeIq'.to_sym)).to be_truthy
|
75
|
+
end
|
76
|
+
end
|
77
|
+
it 'does not fetch content types when explicitly disabled' do
|
78
|
+
vcr('space/disabled_cache') do
|
79
|
+
client = Client.new(token, disable_content_type_caching: true)
|
80
|
+
subject = client.spaces
|
81
|
+
|
82
|
+
space = subject.find('facgnwwgj5fe')
|
83
|
+
expect(client.dynamic_entry_cache).to be_empty
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
53
87
|
end
|
54
88
|
|
55
89
|
describe '#destroy' do
|
@@ -0,0 +1,276 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'contentful/management/space'
|
3
|
+
require 'contentful/management/client'
|
4
|
+
|
5
|
+
module Contentful
|
6
|
+
module Management
|
7
|
+
describe UIExtension do
|
8
|
+
let(:token) { ENV.fetch('CF_TEST_CMA_TOKEN', '<ACCESS_TOKEN>') }
|
9
|
+
let(:space_id) { 'arqlnkt58eul' }
|
10
|
+
let(:playground_space_id) { 'facgnwwgj5fe' }
|
11
|
+
let(:extension_id) { '2ZJduY1pKEma6G8Y2ImqYU' }
|
12
|
+
let(:client) { Client.new(token, raise_errors: true) }
|
13
|
+
|
14
|
+
subject { client.ui_extensions }
|
15
|
+
|
16
|
+
describe 'class methods' do
|
17
|
+
describe '::valid_extension' do
|
18
|
+
it 'false when name is missing' do
|
19
|
+
extension = {}
|
20
|
+
|
21
|
+
expect(described_class.valid_extension(extension)).to be_falsey
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'false when fieldTypes is missing' do
|
25
|
+
extension = {
|
26
|
+
'name' => 'foobar'
|
27
|
+
}
|
28
|
+
|
29
|
+
expect(described_class.valid_extension(extension)).to be_falsey
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'false when fieldTypes is present but not an array' do
|
33
|
+
extension = {
|
34
|
+
'name' => 'foobar',
|
35
|
+
'fieldTypes' => 'baz'
|
36
|
+
}
|
37
|
+
|
38
|
+
expect(described_class.valid_extension(extension)).to be_falsey
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'false when both src and srcdoc missing' do
|
42
|
+
extension = {
|
43
|
+
'name' => 'foobar',
|
44
|
+
'fieldTypes' => ['Symbol']
|
45
|
+
}
|
46
|
+
|
47
|
+
expect(described_class.valid_extension(extension)).to be_falsey
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'true when all of the above are passed' do
|
51
|
+
extension = {
|
52
|
+
'name' => 'foobar',
|
53
|
+
'fieldTypes' => ['Symbol'],
|
54
|
+
'src' => 'foo'
|
55
|
+
}
|
56
|
+
|
57
|
+
expect(described_class.valid_extension(extension)).to be_truthy
|
58
|
+
|
59
|
+
extension = {
|
60
|
+
'name' => 'foobar',
|
61
|
+
'fieldTypes' => ['Symbol'],
|
62
|
+
'srcdoc' => 'foo'
|
63
|
+
}
|
64
|
+
|
65
|
+
expect(described_class.valid_extension(extension)).to be_truthy
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'false if sidebar is present but not boolean' do
|
69
|
+
extension = {
|
70
|
+
'name' => 'foobar',
|
71
|
+
'fieldTypes' => ['Symbol'],
|
72
|
+
'srcdoc' => 'foo',
|
73
|
+
'sidebar' => true
|
74
|
+
}
|
75
|
+
|
76
|
+
expect(described_class.valid_extension(extension)).to be_truthy
|
77
|
+
|
78
|
+
extension = {
|
79
|
+
'name' => 'foobar',
|
80
|
+
'fieldTypes' => ['Symbol'],
|
81
|
+
'srcdoc' => 'foo',
|
82
|
+
'sidebar' => false
|
83
|
+
}
|
84
|
+
|
85
|
+
expect(described_class.valid_extension(extension)).to be_truthy
|
86
|
+
|
87
|
+
extension = {
|
88
|
+
'name' => 'foobar',
|
89
|
+
'fieldTypes' => ['Symbol'],
|
90
|
+
'srcdoc' => 'foo',
|
91
|
+
'sidebar' => 'foobar'
|
92
|
+
}
|
93
|
+
|
94
|
+
expect(described_class.valid_extension(extension)).to be_falsey
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe '::create_attributes' do
|
99
|
+
it 'raises an error if extension sent is not valid' do
|
100
|
+
invalid_extension = {
|
101
|
+
extension: {
|
102
|
+
'name' => 'foobar'
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
expect do
|
107
|
+
described_class.create_attributes(nil, invalid_extension)
|
108
|
+
end.to raise_error 'Invalid UI Extension attributes'
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'does nothing otherwise' do
|
112
|
+
extension = {
|
113
|
+
'extension' => {
|
114
|
+
'name' => 'foobar',
|
115
|
+
'fieldTypes' => ['Symbol'],
|
116
|
+
'srcdoc' => 'foo',
|
117
|
+
'sidebar' => false
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
expect(described_class.create_attributes(nil, extension)).to eq extension
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe 'instance methods' do
|
127
|
+
let(:extension) {
|
128
|
+
described_class.new(
|
129
|
+
'extension' => {
|
130
|
+
'name' => 'foobar',
|
131
|
+
'fieldTypes' => ['Symbol'],
|
132
|
+
'srcdoc' => 'foo',
|
133
|
+
'sidebar' => false
|
134
|
+
}
|
135
|
+
)
|
136
|
+
}
|
137
|
+
|
138
|
+
let(:src_extension) {
|
139
|
+
described_class.new(
|
140
|
+
'extension' => {
|
141
|
+
'name' => 'foobar',
|
142
|
+
'fieldTypes' => ['Symbol'],
|
143
|
+
'src' => 'http://foo.com',
|
144
|
+
'sidebar' => false
|
145
|
+
}
|
146
|
+
)
|
147
|
+
}
|
148
|
+
|
149
|
+
it '#name' do
|
150
|
+
expect(extension.name).to eq 'foobar'
|
151
|
+
extension.name = 'baz'
|
152
|
+
|
153
|
+
expect(extension.name).to eq 'baz'
|
154
|
+
expect(extension.extension['name']).to eq 'baz'
|
155
|
+
end
|
156
|
+
|
157
|
+
it '#field_types' do
|
158
|
+
expect(extension.field_types).to eq ['Symbol']
|
159
|
+
|
160
|
+
extension.field_types = ['Symbol', 'Text']
|
161
|
+
|
162
|
+
expect(extension.field_types).to eq ['Symbol', 'Text']
|
163
|
+
expect(extension.extension['fieldTypes']).to eq ['Symbol', 'Text']
|
164
|
+
end
|
165
|
+
|
166
|
+
describe '#source' do
|
167
|
+
it 'will get first available source' do
|
168
|
+
expect(extension.source).to eq 'foo'
|
169
|
+
expect(src_extension.source).to eq 'http://foo.com'
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'if source is a url will set it to src' do
|
173
|
+
expect(extension.extension['srcdoc']).to eq 'foo'
|
174
|
+
|
175
|
+
extension.source = 'http://example.com'
|
176
|
+
|
177
|
+
expect(extension.extension['srcdoc']).to be_nil
|
178
|
+
expect(extension.source).to eq 'http://example.com'
|
179
|
+
expect(extension.extension['src']).to eq 'http://example.com'
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'if source is a string will set it to srcdoc' do
|
183
|
+
expect(src_extension.extension['src']).to eq 'http://foo.com'
|
184
|
+
|
185
|
+
src_extension.source = 'foobar'
|
186
|
+
|
187
|
+
expect(src_extension.extension['src']).to be_nil
|
188
|
+
expect(src_extension.source).to eq 'foobar'
|
189
|
+
expect(src_extension.extension['srcdoc']).to eq 'foobar'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
it '#sidebar' do
|
194
|
+
expect(extension.sidebar).to eq false
|
195
|
+
|
196
|
+
extension.sidebar = true
|
197
|
+
|
198
|
+
expect(extension.sidebar).to eq true
|
199
|
+
expect(extension.extension['sidebar']).to eq true
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
describe '.all' do
|
204
|
+
it 'returns a Contentful::Array' do
|
205
|
+
vcr('ui_extension/all') { expect(subject.all(space_id)).to be_kind_of Contentful::Management::Array }
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'builds a Contentful::Management::UIExtension' do
|
209
|
+
vcr('ui_extension/all') {
|
210
|
+
extension = subject.all(space_id).first
|
211
|
+
|
212
|
+
expect(extension).to be_kind_of Contentful::Management::UIExtension
|
213
|
+
expect(extension.name).to eq 'My awesome extension by srcDoc'
|
214
|
+
expect(extension.field_types).to eq [{"type"=>"Symbol"}, {"type"=>"Text"}]
|
215
|
+
expect(extension.source).to eq "<!doctype html><html lang='en'><head><meta charset='UTF-8'/><title>Sample Editor Extension</title><link rel='stylesheet' href='https://contentful.github.io/ui-extensions-sdk/cf-extension.css'><script src='https://contentful.github.io/ui-extensions-sdk/cf-extension-api.js'></script></head><body><div id='content'></div><script>window.contentfulExtension.init(function (extension) {window.alert(extension);var value = extension.field.getValue();extension.field.setValue('Hello world!');extension.field.onValueChanged(function(value) {if (value !== currentValue) {extension.field.setValue('Hello world!');}});});</script></body></html>"
|
216
|
+
expect(extension.sidebar).to eq false
|
217
|
+
expect(extension.id).to be_truthy
|
218
|
+
}
|
219
|
+
end
|
220
|
+
|
221
|
+
it 'class method also works' do
|
222
|
+
vcr('ui_extension/all') { expect(Contentful::Management::UIExtension.all(client, space_id)).to be_kind_of Contentful::Management::Array }
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe '.find' do
|
227
|
+
it 'returns a Contentful::Management::UIExtension' do
|
228
|
+
vcr('ui_extension/find') {
|
229
|
+
extension = subject.find(space_id, extension_id)
|
230
|
+
|
231
|
+
expect(extension).to be_kind_of Contentful::Management::UIExtension
|
232
|
+
expect(extension.name).to eq 'My awesome extension by srcDoc'
|
233
|
+
expect(extension.field_types).to eq [{"type"=>"Symbol"}, {"type"=>"Text"}]
|
234
|
+
expect(extension.source).to eq "<!doctype html><html lang='en'><head><meta charset='UTF-8'/><title>Sample Editor Extension</title><link rel='stylesheet' href='https://contentful.github.io/ui-extensions-sdk/cf-extension.css'><script src='https://contentful.github.io/ui-extensions-sdk/cf-extension-api.js'></script></head><body><div id='content'></div><script>window.contentfulExtension.init(function (extension) {window.alert(extension);var value = extension.field.getValue();extension.field.setValue('Hello world!');extension.field.onValueChanged(function(value) {if (value !== currentValue) {extension.field.setValue('Hello world!');}});});</script></body></html>"
|
235
|
+
expect(extension.sidebar).to eq false
|
236
|
+
expect(extension.id).to be_truthy
|
237
|
+
}
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
describe '.create' do
|
242
|
+
it 'creates a Contentful::Management::UIExtension' do
|
243
|
+
vcr('ui_extension/create') {
|
244
|
+
extension = subject.create(playground_space_id, extension: {
|
245
|
+
'name' => 'test extension',
|
246
|
+
'fieldTypes' => [{"type"=>"Symbol"}, {"type"=>"Text"}],
|
247
|
+
'srcdoc' => "<!doctype html><html lang='en'><head><meta charset='UTF-8'/><title>Sample Editor Extension</title><link rel='stylesheet' href='https://contentful.github.io/ui-extensions-sdk/cf-extension.css'><script src='https://contentful.github.io/ui-extensions-sdk/cf-extension-api.js'></script></head><body><div id='content'></div><script>window.contentfulExtension.init(function (extension) {window.alert(extension);var value = extension.field.getValue();extension.field.setValue('Hello world!');extension.field.onValueChanged(function(value) {if (value !== currentValue) {extension.field.setValue('Hello world!');}});});</script></body></html>",
|
248
|
+
'sidebar' => false
|
249
|
+
})
|
250
|
+
|
251
|
+
expect(extension).to be_kind_of Contentful::Management::UIExtension
|
252
|
+
expect(extension.name).to eq 'test extension'
|
253
|
+
expect(extension.field_types).to eq [{"type"=>"Symbol"}, {"type"=>"Text"}]
|
254
|
+
expect(extension.source).to eq "<!doctype html><html lang='en'><head><meta charset='UTF-8'/><title>Sample Editor Extension</title><link rel='stylesheet' href='https://contentful.github.io/ui-extensions-sdk/cf-extension.css'><script src='https://contentful.github.io/ui-extensions-sdk/cf-extension-api.js'></script></head><body><div id='content'></div><script>window.contentfulExtension.init(function (extension) {window.alert(extension);var value = extension.field.getValue();extension.field.setValue('Hello world!');extension.field.onValueChanged(function(value) {if (value !== currentValue) {extension.field.setValue('Hello world!');}});});</script></body></html>"
|
255
|
+
expect(extension.sidebar).to eq false
|
256
|
+
expect(extension.id).to be_truthy
|
257
|
+
}
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
describe '#destroy' do
|
262
|
+
it 'deletes the extension' do
|
263
|
+
vcr('ui_extension/delete') {
|
264
|
+
extension = subject.find(playground_space_id, '2rf6QdckyoECCsQeE6gIOg')
|
265
|
+
|
266
|
+
expect(extension.id).to be_truthy
|
267
|
+
|
268
|
+
extension.destroy
|
269
|
+
|
270
|
+
expect { subject.find(playground_space_id, '2rf6QdckyoECCsQeE6gIOg') }.to raise_error Contentful::Management::NotFound
|
271
|
+
}
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|