gds-api-adapters 25.0.0 → 25.1.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/lib/gds_api/publishing_api_v2.rb +23 -4
- data/lib/gds_api/version.rb +1 -1
- data/test/publishing_api_test.rb +7 -7
- data/test/publishing_api_v2_test.rb +232 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8afbe2d34bba51917e28dd3f85e89d6e734c35af
|
4
|
+
data.tar.gz: da4fdfd37ae75f002f6dc163a039856672bd40eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b31b1493c90363a24080b9d8bb0864ecf400dd52ae23d44b15bc5f59ba539f55bcdfcaf97b7923307dd27510299dd880e79af29b2cfbad6d8820c34219edd10
|
7
|
+
data.tar.gz: 61cace3dd9782add1a8814776db7643054734766f72f3545954cd87a1356a12836860f489e2589b4cfa744caaa76c6486dd3249bcbc8f1dd6ce416ec7c42673c
|
@@ -14,8 +14,16 @@ class GdsApi::PublishingApiV2 < GdsApi::Base
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def publish(content_id, update_type, options = {})
|
17
|
-
params = {
|
18
|
-
|
17
|
+
params = {
|
18
|
+
update_type: update_type
|
19
|
+
}
|
20
|
+
|
21
|
+
optional_keys = [
|
22
|
+
:locale,
|
23
|
+
:previous_version,
|
24
|
+
]
|
25
|
+
|
26
|
+
params = merge_optional_keys(params, options, optional_keys)
|
19
27
|
|
20
28
|
post_json!(publish_url(content_id), params)
|
21
29
|
end
|
@@ -25,8 +33,13 @@ class GdsApi::PublishingApiV2 < GdsApi::Base
|
|
25
33
|
end
|
26
34
|
|
27
35
|
def put_links(content_id, payload)
|
28
|
-
|
29
|
-
|
36
|
+
params = {
|
37
|
+
links: payload.fetch(:links)
|
38
|
+
}
|
39
|
+
|
40
|
+
params = merge_optional_keys(params, payload, [:previous_version])
|
41
|
+
|
42
|
+
put_json!(links_url(content_id), params)
|
30
43
|
end
|
31
44
|
|
32
45
|
private
|
@@ -43,4 +56,10 @@ private
|
|
43
56
|
def publish_url(content_id)
|
44
57
|
"#{endpoint}/v2/content/#{content_id}/publish"
|
45
58
|
end
|
59
|
+
|
60
|
+
def merge_optional_keys(params, options, optional_keys)
|
61
|
+
optional_keys.each_with_object(params) do |optional_key, hash|
|
62
|
+
hash.merge!(optional_key => options[optional_key]) if options[optional_key]
|
63
|
+
end
|
64
|
+
end
|
46
65
|
end
|
data/lib/gds_api/version.rb
CHANGED
data/test/publishing_api_test.rb
CHANGED
@@ -17,7 +17,7 @@ describe GdsApi::PublishingApi do
|
|
17
17
|
content_item = content_item_for_publishing_api(base_path).merge("update_type" => "major")
|
18
18
|
|
19
19
|
publishing_api
|
20
|
-
.given("
|
20
|
+
.given("no content exists")
|
21
21
|
.upon_receiving("a request to create a content item")
|
22
22
|
.with(
|
23
23
|
method: :put,
|
@@ -46,7 +46,7 @@ describe GdsApi::PublishingApi do
|
|
46
46
|
content_item = content_item_for_publishing_api(base_path).merge("update_type" => "major")
|
47
47
|
|
48
48
|
publishing_api
|
49
|
-
.given("
|
49
|
+
.given("no content exists")
|
50
50
|
.upon_receiving("a request to create a draft content item")
|
51
51
|
.with(
|
52
52
|
method: :put,
|
@@ -75,7 +75,7 @@ describe GdsApi::PublishingApi do
|
|
75
75
|
publish_intent = intent_for_publishing_api(base_path)
|
76
76
|
|
77
77
|
publishing_api
|
78
|
-
.given("
|
78
|
+
.given("no content exists")
|
79
79
|
.upon_receiving("a request to create a publish intent")
|
80
80
|
.with(
|
81
81
|
method: :put,
|
@@ -105,7 +105,7 @@ describe GdsApi::PublishingApi do
|
|
105
105
|
publish_intent = intent_for_publishing_api(base_path)
|
106
106
|
|
107
107
|
publishing_api
|
108
|
-
.given("a publish intent exists at /test-intent
|
108
|
+
.given("a publish intent exists at /test-intent")
|
109
109
|
.upon_receiving("a request to delete a publish intent")
|
110
110
|
.with(
|
111
111
|
method: :delete,
|
@@ -129,7 +129,7 @@ describe GdsApi::PublishingApi do
|
|
129
129
|
publish_intent = intent_for_publishing_api(base_path)
|
130
130
|
|
131
131
|
publishing_api
|
132
|
-
.given("
|
132
|
+
.given("no content exists")
|
133
133
|
.upon_receiving("a request to delete a publish intent")
|
134
134
|
.with(
|
135
135
|
method: :delete,
|
@@ -156,7 +156,7 @@ describe GdsApi::PublishingApi do
|
|
156
156
|
}
|
157
157
|
|
158
158
|
publishing_api
|
159
|
-
.given("
|
159
|
+
.given("no content exists")
|
160
160
|
.upon_receiving("a request to put a path")
|
161
161
|
.with(
|
162
162
|
method: :put,
|
@@ -185,7 +185,7 @@ describe GdsApi::PublishingApi do
|
|
185
185
|
}
|
186
186
|
|
187
187
|
publishing_api
|
188
|
-
.given("/test-item has been reserved
|
188
|
+
.given("/test-item has been reserved by the Publisher application")
|
189
189
|
.upon_receiving("a request to change publishing app")
|
190
190
|
.with(
|
191
191
|
method: :put,
|
@@ -38,7 +38,7 @@ describe GdsApi::PublishingApiV2 do
|
|
38
38
|
@content_item = content_item_for_content_id(@content_id)
|
39
39
|
|
40
40
|
publishing_api
|
41
|
-
.given("
|
41
|
+
.given("no content exists")
|
42
42
|
.upon_receiving("a request to create a content item without links")
|
43
43
|
.with(
|
44
44
|
method: :put,
|
@@ -64,7 +64,7 @@ describe GdsApi::PublishingApiV2 do
|
|
64
64
|
@content_item = content_item_for_content_id(@content_id, "base_path" => "/test-item", "publishing_app" => "whitehall")
|
65
65
|
|
66
66
|
publishing_api
|
67
|
-
.given("/test-item has been reserved
|
67
|
+
.given("/test-item has been reserved by the Publisher application")
|
68
68
|
.upon_receiving("a request from the Whitehall application to create a content item at /test-item")
|
69
69
|
.with(
|
70
70
|
method: :put,
|
@@ -104,7 +104,7 @@ describe GdsApi::PublishingApiV2 do
|
|
104
104
|
@content_item = content_item_for_content_id(@content_id, "base_path" => "not a url path")
|
105
105
|
|
106
106
|
publishing_api
|
107
|
-
.given("
|
107
|
+
.given("no content exists")
|
108
108
|
.upon_receiving("a request to create an invalid content-item")
|
109
109
|
.with(
|
110
110
|
method: :put,
|
@@ -139,6 +139,75 @@ describe GdsApi::PublishingApiV2 do
|
|
139
139
|
assert_equal "Unprocessable entity", error.error_details["error"]["message"]
|
140
140
|
end
|
141
141
|
end
|
142
|
+
|
143
|
+
describe "optimistic locking" do
|
144
|
+
describe "if the content item has not change since it was requested" do
|
145
|
+
before do
|
146
|
+
@content_item = content_item_for_content_id(@content_id, "previous_version" => 3)
|
147
|
+
|
148
|
+
publishing_api
|
149
|
+
.given("the content item #{@content_id} is at version 3")
|
150
|
+
.upon_receiving("a request to update the content item at version 3")
|
151
|
+
.with(
|
152
|
+
method: :put,
|
153
|
+
path: "/v2/content/#{@content_id}",
|
154
|
+
body: @content_item,
|
155
|
+
headers: {
|
156
|
+
"Content-Type" => "application/json",
|
157
|
+
},
|
158
|
+
)
|
159
|
+
.will_respond_with(
|
160
|
+
status: 200,
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "responds with 200 OK" do
|
165
|
+
response = @api_client.put_content(@content_id, @content_item)
|
166
|
+
assert_equal 200, response.code
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "if the content item has changed in the meantime" do
|
171
|
+
before do
|
172
|
+
@content_item = content_item_for_content_id(@content_id, "previous_version" => 2)
|
173
|
+
|
174
|
+
publishing_api
|
175
|
+
.given("the content item #{@content_id} is at version 3")
|
176
|
+
.upon_receiving("a request to update the content item at version 2")
|
177
|
+
.with(
|
178
|
+
method: :put,
|
179
|
+
path: "/v2/content/#{@content_id}",
|
180
|
+
body: @content_item,
|
181
|
+
headers: {
|
182
|
+
"Content-Type" => "application/json",
|
183
|
+
},
|
184
|
+
)
|
185
|
+
.will_respond_with(
|
186
|
+
status: 409,
|
187
|
+
body: {
|
188
|
+
"error" => {
|
189
|
+
"code" => 409,
|
190
|
+
"message" => Pact.term(generate: "Conflict", matcher:/\S+/),
|
191
|
+
"fields" => {
|
192
|
+
"previous_version" => Pact.each_like("does not match", :min => 1),
|
193
|
+
},
|
194
|
+
},
|
195
|
+
},
|
196
|
+
headers: {
|
197
|
+
"Content-Type" => "application/json; charset=utf-8"
|
198
|
+
}
|
199
|
+
)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "responds with 409 Conflict" do
|
203
|
+
error = assert_raises GdsApi::HTTPClientError do
|
204
|
+
@api_client.put_content(@content_id, @content_item)
|
205
|
+
end
|
206
|
+
assert_equal 409, error.code
|
207
|
+
assert_equal "Conflict", error.error_details["error"]["message"]
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
142
211
|
end
|
143
212
|
|
144
213
|
describe "#get_content" do
|
@@ -218,7 +287,7 @@ describe GdsApi::PublishingApiV2 do
|
|
218
287
|
describe "a non-existent item" do
|
219
288
|
before do
|
220
289
|
publishing_api
|
221
|
-
.given("
|
290
|
+
.given("no content exists")
|
222
291
|
.upon_receiving("a request for a non-existent content item")
|
223
292
|
.with(
|
224
293
|
method: :get,
|
@@ -274,7 +343,7 @@ describe GdsApi::PublishingApiV2 do
|
|
274
343
|
describe "if the content item does not exist" do
|
275
344
|
before do
|
276
345
|
publishing_api
|
277
|
-
.given("
|
346
|
+
.given("no content exists")
|
278
347
|
.upon_receiving("a publish request")
|
279
348
|
.with(
|
280
349
|
method: :post,
|
@@ -438,6 +507,77 @@ describe GdsApi::PublishingApiV2 do
|
|
438
507
|
assert_equal 200, response.code
|
439
508
|
end
|
440
509
|
end
|
510
|
+
|
511
|
+
describe "optimistic locking" do
|
512
|
+
describe "if the content item has not change since it was requested" do
|
513
|
+
before do
|
514
|
+
publishing_api
|
515
|
+
.given("the content item #{@content_id} is at version 3")
|
516
|
+
.upon_receiving("a publish request for version 3")
|
517
|
+
.with(
|
518
|
+
method: :post,
|
519
|
+
path: "/v2/content/#{@content_id}/publish",
|
520
|
+
body: {
|
521
|
+
update_type: "minor",
|
522
|
+
previous_version: 3,
|
523
|
+
},
|
524
|
+
headers: {
|
525
|
+
"Content-Type" => "application/json",
|
526
|
+
},
|
527
|
+
)
|
528
|
+
.will_respond_with(
|
529
|
+
status: 200,
|
530
|
+
)
|
531
|
+
end
|
532
|
+
|
533
|
+
it "responds with 200 OK" do
|
534
|
+
response = @api_client.publish(@content_id, "minor", previous_version: 3)
|
535
|
+
assert_equal 200, response.code
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
539
|
+
describe "if the content item has changed in the meantime" do
|
540
|
+
before do
|
541
|
+
publishing_api
|
542
|
+
.given("the content item #{@content_id} is at version 3")
|
543
|
+
.upon_receiving("a publish request for version 2")
|
544
|
+
.with(
|
545
|
+
method: :post,
|
546
|
+
path: "/v2/content/#{@content_id}/publish",
|
547
|
+
body: {
|
548
|
+
update_type: "minor",
|
549
|
+
previous_version: 2,
|
550
|
+
},
|
551
|
+
headers: {
|
552
|
+
"Content-Type" => "application/json",
|
553
|
+
},
|
554
|
+
)
|
555
|
+
.will_respond_with(
|
556
|
+
status: 409,
|
557
|
+
body: {
|
558
|
+
"error" => {
|
559
|
+
"code" => 409,
|
560
|
+
"message" => Pact.term(generate: "Conflict", matcher:/\S+/),
|
561
|
+
"fields" => {
|
562
|
+
"previous_version" => Pact.each_like("does not match", :min => 1),
|
563
|
+
},
|
564
|
+
},
|
565
|
+
},
|
566
|
+
headers: {
|
567
|
+
"Content-Type" => "application/json; charset=utf-8"
|
568
|
+
}
|
569
|
+
)
|
570
|
+
end
|
571
|
+
|
572
|
+
it "responds with 409 Conflict" do
|
573
|
+
error = assert_raises GdsApi::HTTPClientError do
|
574
|
+
@api_client.publish(@content_id, "minor", previous_version: 2)
|
575
|
+
end
|
576
|
+
assert_equal 409, error.code
|
577
|
+
assert_equal "Conflict", error.error_details["error"]["message"]
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
441
581
|
end
|
442
582
|
|
443
583
|
describe "#get_links" do
|
@@ -664,5 +804,92 @@ describe GdsApi::PublishingApiV2 do
|
|
664
804
|
), response.links)
|
665
805
|
end
|
666
806
|
end
|
807
|
+
|
808
|
+
describe "optimistic locking" do
|
809
|
+
describe "if the linkset has not change since it was requested" do
|
810
|
+
before do
|
811
|
+
publishing_api
|
812
|
+
.given("the linkset for #{@content_id} is at version 3")
|
813
|
+
.upon_receiving("a request to update the linkset at version 3")
|
814
|
+
.with(
|
815
|
+
method: :put,
|
816
|
+
path: "/v2/links/#{@content_id}",
|
817
|
+
body: {
|
818
|
+
links: {
|
819
|
+
organisations: ["591436ab-c2ae-416f-a3c5-1901d633fbfb"],
|
820
|
+
},
|
821
|
+
previous_version: 3,
|
822
|
+
},
|
823
|
+
headers: {
|
824
|
+
"Content-Type" => "application/json",
|
825
|
+
},
|
826
|
+
)
|
827
|
+
.will_respond_with(
|
828
|
+
status: 200,
|
829
|
+
)
|
830
|
+
end
|
831
|
+
|
832
|
+
it "responds with 200 OK" do
|
833
|
+
response = @api_client.put_links(@content_id,
|
834
|
+
links: {
|
835
|
+
organisations: ["591436ab-c2ae-416f-a3c5-1901d633fbfb"],
|
836
|
+
},
|
837
|
+
previous_version: 3,
|
838
|
+
)
|
839
|
+
|
840
|
+
assert_equal 200, response.code
|
841
|
+
end
|
842
|
+
end
|
843
|
+
|
844
|
+
describe "if the content item has changed in the meantime" do
|
845
|
+
before do
|
846
|
+
publishing_api
|
847
|
+
.given("the linkset for #{@content_id} is at version 3")
|
848
|
+
.upon_receiving("a request to update the linkset at version 2")
|
849
|
+
.with(
|
850
|
+
method: :put,
|
851
|
+
path: "/v2/links/#{@content_id}",
|
852
|
+
body: {
|
853
|
+
links: {
|
854
|
+
organisations: ["591436ab-c2ae-416f-a3c5-1901d633fbfb"],
|
855
|
+
},
|
856
|
+
previous_version: 2,
|
857
|
+
},
|
858
|
+
headers: {
|
859
|
+
"Content-Type" => "application/json",
|
860
|
+
},
|
861
|
+
)
|
862
|
+
.will_respond_with(
|
863
|
+
status: 409,
|
864
|
+
body: {
|
865
|
+
"error" => {
|
866
|
+
"code" => 409,
|
867
|
+
"message" => Pact.term(generate: "Conflict", matcher:/\S+/),
|
868
|
+
"fields" => {
|
869
|
+
"previous_version" => Pact.each_like("does not match", :min => 1),
|
870
|
+
},
|
871
|
+
},
|
872
|
+
},
|
873
|
+
headers: {
|
874
|
+
"Content-Type" => "application/json; charset=utf-8"
|
875
|
+
}
|
876
|
+
)
|
877
|
+
end
|
878
|
+
|
879
|
+
it "responds with 409 Conflict" do
|
880
|
+
error = assert_raises GdsApi::HTTPClientError do
|
881
|
+
@api_client.put_links(@content_id,
|
882
|
+
links: {
|
883
|
+
organisations: ["591436ab-c2ae-416f-a3c5-1901d633fbfb"],
|
884
|
+
},
|
885
|
+
previous_version: 2,
|
886
|
+
)
|
887
|
+
end
|
888
|
+
|
889
|
+
assert_equal 409, error.code
|
890
|
+
assert_equal "Conflict", error.error_details["error"]["message"]
|
891
|
+
end
|
892
|
+
end
|
893
|
+
end
|
667
894
|
end
|
668
895
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 25.
|
4
|
+
version: 25.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Stewart
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: plek
|