contentful-scheduler-custom 1.5.2 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/contentful/scheduler/queue.rb +1 -1
- data/lib/contentful/scheduler/version.rb +1 -1
- data/spec/contentful/scheduler/queue_spec.rb +90 -50
- data/spec/contentful/scheduler/tasks/publish_spec.rb +4 -4
- data/spec/contentful/scheduler/tasks/unpublish_spec.rb +42 -0
- data/spec/spec_helper.rb +64 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0b82b5e275d4c0dae01a44780318417ab6f87e3
|
4
|
+
data.tar.gz: 42719ffbdc3ccf8d5575b48142a715f4bb8c13d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a05d4921b687ca48b7e4cb52201756c227d736fa27bcc152b5f01b7eb7ed15a6da47df2b0ffe51eeccf52d9515bd1ae14fa4fc066f751cf7067829f67f00398
|
7
|
+
data.tar.gz: ad89cfde974e0ade192c67809a281cb59f03feee3b024db99155ad07dde51e178d54211f204cfcd3ae40952f4dac3abf5682a0a76722355f2211b9023ddd5182
|
@@ -1,67 +1,27 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
class WebhookDouble
|
4
|
-
attr_reader :id, :space_id, :sys, :fields
|
5
|
-
def initialize(id, space_id, sys = {}, fields = {})
|
6
|
-
@id = id
|
7
|
-
@space_id = space_id
|
8
|
-
@sys = sys
|
9
|
-
@fields = fields
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
3
|
describe Contentful::Scheduler::Queue do
|
14
|
-
let(:config) {
|
15
|
-
{
|
16
|
-
logger: ::Contentful::Scheduler::DEFAULT_LOGGER,
|
17
|
-
endpoint: ::Contentful::Scheduler::DEFAULT_ENDPOINT,
|
18
|
-
port: ::Contentful::Scheduler::DEFAULT_PORT,
|
19
|
-
redis: {
|
20
|
-
host: 'localhost',
|
21
|
-
port: 12341,
|
22
|
-
password: 'foobar'
|
23
|
-
},
|
24
|
-
spaces: {
|
25
|
-
'foo' => {
|
26
|
-
publish_field: 'my_field',
|
27
|
-
management_token: 'foo'
|
28
|
-
}
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
4
|
+
let(:config) { base_config }
|
33
5
|
subject { described_class.instance }
|
34
6
|
|
35
7
|
before :each do
|
36
8
|
allow(Resque).to receive(:redis=)
|
37
9
|
described_class.class_variable_set(:@@instance, nil)
|
38
|
-
|
10
|
+
|
11
|
+
::Contentful::Scheduler.class_variable_set(:@@config, base_config)
|
39
12
|
end
|
40
13
|
|
41
14
|
describe 'singleton' do
|
42
15
|
it 'creates an instance if not initialized' do
|
43
|
-
|
44
|
-
expect(queue).to be_a described_class
|
16
|
+
expect(subject).to be_a described_class
|
45
17
|
end
|
46
18
|
|
47
19
|
it 'reuses same instance' do
|
48
|
-
|
49
|
-
|
50
|
-
expect(queue).to eq described_class.instance
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe 'attributes' do
|
55
|
-
it '.config' do
|
56
|
-
expect(subject.config).to eq config
|
20
|
+
expect(subject).to eq described_class.instance
|
57
21
|
end
|
58
22
|
end
|
59
23
|
|
60
24
|
describe 'instance methods' do
|
61
|
-
it '#spaces' do
|
62
|
-
expect(subject.spaces).to eq config[:spaces]
|
63
|
-
end
|
64
|
-
|
65
25
|
it '#webhook_publish_field?' do
|
66
26
|
expect(subject.webhook_publish_field?(
|
67
27
|
WebhookDouble.new('bar', 'foo', {}, {'my_field' => 'something'})
|
@@ -76,12 +36,32 @@ describe Contentful::Scheduler::Queue do
|
|
76
36
|
)).to be_falsey
|
77
37
|
end
|
78
38
|
|
39
|
+
it '#webhook_unpublish_field?' do
|
40
|
+
expect(subject.webhook_unpublish_field?(
|
41
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => 'something'})
|
42
|
+
)).to be_truthy
|
43
|
+
|
44
|
+
expect(subject.webhook_publish_field?(
|
45
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'not_unpublish_field' => 'something'})
|
46
|
+
)).to be_falsey
|
47
|
+
|
48
|
+
expect(subject.webhook_publish_field?(
|
49
|
+
WebhookDouble.new('bar', 'other_space', {}, {'not_my_field' => 'something'})
|
50
|
+
)).to be_falsey
|
51
|
+
end
|
52
|
+
|
79
53
|
it '#webhook_publish_field' do
|
80
54
|
expect(subject.webhook_publish_field(
|
81
55
|
WebhookDouble.new('bar', 'foo', {}, {'my_field' => 'something'})
|
82
56
|
)).to eq 'something'
|
83
57
|
end
|
84
58
|
|
59
|
+
it '#webhook_unpublish_field' do
|
60
|
+
expect(subject.webhook_unpublish_field(
|
61
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => 'something'})
|
62
|
+
)).to eq 'something'
|
63
|
+
end
|
64
|
+
|
85
65
|
describe '#publish_date' do
|
86
66
|
it 'works if date field not localized' do
|
87
67
|
expect(subject.publish_date(
|
@@ -100,6 +80,24 @@ describe Contentful::Scheduler::Queue do
|
|
100
80
|
end
|
101
81
|
end
|
102
82
|
|
83
|
+
describe '#unpublish_date' do
|
84
|
+
it 'works if date field not localized' do
|
85
|
+
expect(subject.unpublish_date(
|
86
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => '2011-04-04T22:00:00+00:00'})
|
87
|
+
)).to eq DateTime.new(2011, 4, 4, 22, 0, 0).to_time.utc
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'works if date field localized by grabbing first available locale' do
|
91
|
+
expect(subject.unpublish_date(
|
92
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => {'en-US': '2011-04-04T22:00:00+00:00'}})
|
93
|
+
)).to eq DateTime.new(2011, 4, 4, 22, 0, 0).to_time.utc
|
94
|
+
|
95
|
+
expect(subject.unpublish_date(
|
96
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => {'en-CA': '2011-04-04T23:00:00Z'}})
|
97
|
+
)).to eq DateTime.new(2011, 4, 4, 23, 0, 0).to_time.utc
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
103
101
|
describe '#publishable?' do
|
104
102
|
it 'false if webhook space not present in config' do
|
105
103
|
expect(subject.publishable?(
|
@@ -126,18 +124,60 @@ describe Contentful::Scheduler::Queue do
|
|
126
124
|
end
|
127
125
|
end
|
128
126
|
|
129
|
-
describe '#
|
127
|
+
describe '#unpublishable?' do
|
128
|
+
it 'false if webhook space not present in config' do
|
129
|
+
expect(subject.unpublishable?(
|
130
|
+
WebhookDouble.new('bar', 'not_foo')
|
131
|
+
)).to be_falsey
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'false if unpublish_field is not found' do
|
135
|
+
expect(subject.unpublishable?(
|
136
|
+
WebhookDouble.new('bar', 'unpublish_space')
|
137
|
+
)).to be_falsey
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'false if unpublish_field is nil' do
|
141
|
+
expect(subject.unpublishable?(
|
142
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => nil})
|
143
|
+
)).to be_falsey
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'true if unpublish_field is populated' do
|
147
|
+
expect(subject.unpublishable?(
|
148
|
+
WebhookDouble.new('bar', 'unpublish_space', {}, {'unpublish_field' => '2111-04-04T22:00:00+00:00'})
|
149
|
+
)).to be_truthy
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#in_publish_queue?' do
|
130
154
|
it 'false if not in queue' do
|
131
155
|
allow(Resque).to receive(:peek) { [] }
|
132
|
-
expect(subject.
|
156
|
+
expect(subject.in_publish_queue?(
|
133
157
|
WebhookDouble.new('bar', 'foo')
|
134
158
|
)).to be_falsey
|
135
159
|
end
|
136
160
|
|
137
161
|
it 'true if in queue' do
|
138
162
|
allow(Resque).to receive(:peek) { [{'args' => ['foo', 'bar']}] }
|
139
|
-
expect(subject.
|
163
|
+
expect(subject.in_publish_queue?(
|
164
|
+
WebhookDouble.new('bar', 'foo')
|
165
|
+
)).to be_truthy
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe '#in_unpublish_queue?' do
|
170
|
+
it 'false if not in queue' do
|
171
|
+
allow(Resque).to receive(:peek) { [] }
|
172
|
+
expect(subject.in_unpublish_queue?(
|
140
173
|
WebhookDouble.new('bar', 'foo')
|
174
|
+
)).to be_falsey
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'true if in queue' do
|
178
|
+
allow(Resque).to receive(:peek) { [{'args' => ['unpublish_space', 'bar']}] }
|
179
|
+
expect(subject.in_unpublish_queue?(
|
180
|
+
WebhookDouble.new('bar', 'unpublish_space')
|
141
181
|
)).to be_truthy
|
142
182
|
end
|
143
183
|
end
|
@@ -191,7 +231,7 @@ describe Contentful::Scheduler::Queue do
|
|
191
231
|
'bar',
|
192
232
|
'foo'
|
193
233
|
) { true }
|
194
|
-
expect(subject).to receive(:
|
234
|
+
expect(subject).to receive(:remove_publish)
|
195
235
|
|
196
236
|
subject.update_or_create(WebhookDouble.new('bar', 'foo', {}, {'my_field' => '2099-04-04T22:00:00+00:00'}))
|
197
237
|
end
|
@@ -220,4 +260,4 @@ describe Contentful::Scheduler::Queue do
|
|
220
260
|
end
|
221
261
|
end
|
222
262
|
end
|
223
|
-
end
|
263
|
+
end
|
@@ -21,13 +21,13 @@ describe Contentful::Scheduler::Tasks::Publish do
|
|
21
21
|
let(:mock_entry) { MockEntry.new }
|
22
22
|
|
23
23
|
before :each do
|
24
|
-
::Contentful::Scheduler.
|
24
|
+
::Contentful::Scheduler.config = base_config
|
25
25
|
end
|
26
26
|
|
27
27
|
describe 'class methods' do
|
28
28
|
it '::perform' do
|
29
29
|
expect(::Contentful::Management::Client).to receive(:new).with(
|
30
|
-
'
|
30
|
+
'foo',
|
31
31
|
raise_errors: true,
|
32
32
|
application_name: 'contentful-scheduler',
|
33
33
|
application_version: Contentful::Scheduler::VERSION
|
@@ -36,7 +36,7 @@ describe Contentful::Scheduler::Tasks::Publish do
|
|
36
36
|
expect(mock_entries).to receive(:find).with('foo', 'bar') { mock_entry }
|
37
37
|
expect(mock_entry).to receive(:publish)
|
38
38
|
|
39
|
-
described_class.perform('foo', 'bar', ::Contentful::Scheduler.config[:management_token])
|
39
|
+
described_class.perform('foo', 'bar', ::Contentful::Scheduler.config[:spaces]['foo'][:management_token])
|
40
40
|
end
|
41
41
|
end
|
42
|
-
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MockEntry
|
4
|
+
def publish
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class MockClient
|
9
|
+
def entries
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class MockEntries
|
14
|
+
def find
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Contentful::Scheduler::Tasks::Unpublish do
|
19
|
+
let(:mock_client) { MockClient.new }
|
20
|
+
let(:mock_entries) { MockEntries.new }
|
21
|
+
let(:mock_entry) { MockEntry.new }
|
22
|
+
|
23
|
+
before :each do
|
24
|
+
::Contentful::Scheduler.class_variable_set(:@@config, {management_token: 'foobar'})
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'class methods' do
|
28
|
+
it '::perform' do
|
29
|
+
expect(::Contentful::Management::Client).to receive(:new).with(
|
30
|
+
'foobar',
|
31
|
+
raise_errors: true,
|
32
|
+
application_name: 'contentful-scheduler',
|
33
|
+
application_version: Contentful::Scheduler::VERSION
|
34
|
+
) { mock_client }
|
35
|
+
expect(mock_client).to receive(:entries) { mock_entries }
|
36
|
+
expect(mock_entries).to receive(:find).with('foo', 'bar') { mock_entry }
|
37
|
+
expect(mock_entry).to receive(:unpublish)
|
38
|
+
|
39
|
+
described_class.perform('foo', 'bar', ::Contentful::Scheduler.config[:management_token])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -40,6 +40,17 @@ class RequestDummy
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
class WebhookDouble
|
44
|
+
attr_reader :id, :space_id, :sys, :fields, :raw_headers
|
45
|
+
def initialize(id, space_id, sys = {}, fields = {}, headers = {})
|
46
|
+
@id = id
|
47
|
+
@space_id = space_id
|
48
|
+
@sys = sys
|
49
|
+
@fields = fields
|
50
|
+
@raw_headers = headers
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
43
54
|
class Contentful::Webhook::Listener::Controllers::Wait
|
44
55
|
@@sleeping = false
|
45
56
|
|
@@ -54,7 +65,59 @@ class Contentful::Webhook::Listener::Controllers::Wait
|
|
54
65
|
end
|
55
66
|
end
|
56
67
|
|
68
|
+
def base_config
|
69
|
+
{
|
70
|
+
logger: ::Contentful::Scheduler::DEFAULT_LOGGER,
|
71
|
+
endpoint: ::Contentful::Scheduler::DEFAULT_ENDPOINT,
|
72
|
+
port: ::Contentful::Scheduler::DEFAULT_PORT,
|
73
|
+
redis: {
|
74
|
+
host: 'localhost',
|
75
|
+
port: 12341,
|
76
|
+
password: 'foobar'
|
77
|
+
},
|
78
|
+
spaces: {
|
79
|
+
'foo' => {
|
80
|
+
publish_field: 'my_field',
|
81
|
+
management_token: 'foo'
|
82
|
+
},
|
83
|
+
'unpublish_space' => {
|
84
|
+
publish_field: 'my_field',
|
85
|
+
unpublish_field: 'unpublish_field',
|
86
|
+
management_token: 'foo'
|
87
|
+
},
|
88
|
+
'no_auth' => {
|
89
|
+
publish_field: 'my_field',
|
90
|
+
management_token: 'foo'
|
91
|
+
},
|
92
|
+
'valid_token_array' => {
|
93
|
+
publish_field: 'my_field',
|
94
|
+
management_token: 'foo',
|
95
|
+
auth: {
|
96
|
+
key: 'auth',
|
97
|
+
valid_tokens: ['test_1']
|
98
|
+
}
|
99
|
+
},
|
100
|
+
'valid_token_string' => {
|
101
|
+
publish_field: 'my_field',
|
102
|
+
management_token: 'foo',
|
103
|
+
auth: {
|
104
|
+
key: 'auth',
|
105
|
+
valid_tokens: 'test_2'
|
106
|
+
}
|
107
|
+
},
|
108
|
+
'lambda_auth' => {
|
109
|
+
publish_field: 'my_field',
|
110
|
+
management_token: 'foo',
|
111
|
+
auth: {
|
112
|
+
key: 'auth',
|
113
|
+
validation: -> (value) { value.size == 4 }
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
118
|
+
end
|
119
|
+
|
57
120
|
RSpec.configure do |config|
|
58
121
|
config.filter_run :focus => true
|
59
122
|
config.run_all_when_everything_filtered = true
|
60
|
-
end
|
123
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contentful-scheduler-custom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Contentful GmbH (David Litvak Bruno0
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: contentful-webhook-listener
|
@@ -211,6 +211,7 @@ files:
|
|
211
211
|
- spec/contentful/scheduler/controller_spec.rb
|
212
212
|
- spec/contentful/scheduler/queue_spec.rb
|
213
213
|
- spec/contentful/scheduler/tasks/publish_spec.rb
|
214
|
+
- spec/contentful/scheduler/tasks/unpublish_spec.rb
|
214
215
|
- spec/contentful/scheduler_spec.rb
|
215
216
|
- spec/spec_helper.rb
|
216
217
|
homepage: https://www.contentful.com
|
@@ -241,5 +242,6 @@ test_files:
|
|
241
242
|
- spec/contentful/scheduler/controller_spec.rb
|
242
243
|
- spec/contentful/scheduler/queue_spec.rb
|
243
244
|
- spec/contentful/scheduler/tasks/publish_spec.rb
|
245
|
+
- spec/contentful/scheduler/tasks/unpublish_spec.rb
|
244
246
|
- spec/contentful/scheduler_spec.rb
|
245
247
|
- spec/spec_helper.rb
|