gds-api-adapters 30.3.0 → 30.4.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 +31 -0
- data/lib/gds_api/version.rb +1 -1
- data/test/publishing_api_v2_test.rb +194 -3
- 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: 45470b12b8841677669e769a1cda10981a25d5ad
|
4
|
+
data.tar.gz: 0c32f6ac9fca548e90072e70597d3227b9697a6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8340c617333eb1810e1e46ef72bed25ac8cc080c65325c2e375dc71790d1ad8781a3582ed4abca59508a1b940cdbe1a83e3c6966a2673ceb7c65fc81b29d504
|
7
|
+
data.tar.gz: 160d311984d37bfa2992313be1d240a898005b8063b95448ad420f3d0da40d2dfb03d73691ab75a6fa9f4f66735e2a1fe6429c123af95c2e65ad933bf995fda2
|
@@ -107,6 +107,32 @@ class GdsApi::PublishingApiV2 < GdsApi::Base
|
|
107
107
|
post_json!(publish_url(content_id), params)
|
108
108
|
end
|
109
109
|
|
110
|
+
# Unpublish a content item
|
111
|
+
#
|
112
|
+
# The publishing API will "unpublish" a live item, to remove it from the public
|
113
|
+
# site, or update an existing unpublishing.
|
114
|
+
#
|
115
|
+
# @param content_id [UUID]
|
116
|
+
# @param type [String] Either 'withdrawal', 'gone' or 'redirect'.
|
117
|
+
# @param explanation [String] (optional) Text to show on the page.
|
118
|
+
# @param alternative_path [String] (optional) Alternative path to show on the page or redirect to.
|
119
|
+
# @param discard_drafts [Boolean] (optional) Whether to discard drafts on that item. Defaults to false.
|
120
|
+
# @param previous_version [Integer] (optional) A lock version number for optimistic locking.
|
121
|
+
#
|
122
|
+
# @see TODO
|
123
|
+
def unpublish(content_id, type:, explanation: nil, alternative_path: nil, discard_drafts: false, previous_version: nil)
|
124
|
+
params = {
|
125
|
+
type: type
|
126
|
+
}
|
127
|
+
|
128
|
+
params.merge!(explanation: explanation) if explanation
|
129
|
+
params.merge!(alternative_path: alternative_path) if alternative_path
|
130
|
+
params.merge!(previous_version: previous_version) if previous_version
|
131
|
+
params.merge!(discard_drafts: discard_drafts) if discard_drafts
|
132
|
+
|
133
|
+
post_json!(unpublish_url(content_id), params)
|
134
|
+
end
|
135
|
+
|
110
136
|
# Discard a draft
|
111
137
|
#
|
112
138
|
# Deletes the draft content item.
|
@@ -213,6 +239,11 @@ private
|
|
213
239
|
"#{endpoint}/v2/content/#{content_id}/publish"
|
214
240
|
end
|
215
241
|
|
242
|
+
def unpublish_url(content_id)
|
243
|
+
validate_content_id(content_id)
|
244
|
+
"#{endpoint}/v2/content/#{content_id}/unpublish"
|
245
|
+
end
|
246
|
+
|
216
247
|
def discard_url(content_id)
|
217
248
|
validate_content_id(content_id)
|
218
249
|
"#{endpoint}/v2/content/#{content_id}/discard-draft"
|
data/lib/gds_api/version.rb
CHANGED
@@ -141,7 +141,7 @@ describe GdsApi::PublishingApiV2 do
|
|
141
141
|
end
|
142
142
|
|
143
143
|
describe "optimistic locking" do
|
144
|
-
describe "if the content item has not
|
144
|
+
describe "if the content item has not changed since it was requested" do
|
145
145
|
before do
|
146
146
|
@content_item = content_item_for_content_id(@content_id, "previous_version" => 3)
|
147
147
|
|
@@ -471,7 +471,7 @@ describe GdsApi::PublishingApiV2 do
|
|
471
471
|
end
|
472
472
|
|
473
473
|
describe "optimistic locking" do
|
474
|
-
describe "if the content item has not
|
474
|
+
describe "if the content item has not changed since it was requested" do
|
475
475
|
before do
|
476
476
|
publishing_api
|
477
477
|
.given("the content item #{@content_id} is at version 3")
|
@@ -542,6 +542,197 @@ describe GdsApi::PublishingApiV2 do
|
|
542
542
|
end
|
543
543
|
end
|
544
544
|
|
545
|
+
describe "#unpublish" do
|
546
|
+
describe "if the unpublish command succeeds" do
|
547
|
+
before do
|
548
|
+
publishing_api
|
549
|
+
.given("a published content item exists with content_id: #{@content_id}")
|
550
|
+
.upon_receiving("an unpublish request")
|
551
|
+
.with(
|
552
|
+
method: :post,
|
553
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
554
|
+
body: {
|
555
|
+
type: "gone",
|
556
|
+
},
|
557
|
+
headers: {
|
558
|
+
"Content-Type" => "application/json",
|
559
|
+
},
|
560
|
+
)
|
561
|
+
.will_respond_with(
|
562
|
+
status: 200
|
563
|
+
)
|
564
|
+
end
|
565
|
+
|
566
|
+
it "responds with 200" do
|
567
|
+
response = @api_client.unpublish(@content_id, type: "gone")
|
568
|
+
assert_equal 200, response.code
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
572
|
+
describe "if the content item does not exist" do
|
573
|
+
before do
|
574
|
+
publishing_api
|
575
|
+
.given("no content exists")
|
576
|
+
.upon_receiving("an unpublish request")
|
577
|
+
.with(
|
578
|
+
method: :post,
|
579
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
580
|
+
body: {
|
581
|
+
type: "gone",
|
582
|
+
},
|
583
|
+
headers: {
|
584
|
+
"Content-Type" => "application/json",
|
585
|
+
},
|
586
|
+
)
|
587
|
+
.will_respond_with(
|
588
|
+
status: 404
|
589
|
+
)
|
590
|
+
end
|
591
|
+
|
592
|
+
it "responds with 404" do
|
593
|
+
error = assert_raises GdsApi::HTTPClientError do
|
594
|
+
@api_client.unpublish(@content_id, type: "gone")
|
595
|
+
end
|
596
|
+
|
597
|
+
assert_equal 404, error.code
|
598
|
+
end
|
599
|
+
end
|
600
|
+
|
601
|
+
describe "if the type is incorrect" do
|
602
|
+
before do
|
603
|
+
publishing_api
|
604
|
+
.given("a published content item exists with content_id: #{@content_id}")
|
605
|
+
.upon_receiving("an invalid unpublish request")
|
606
|
+
.with(
|
607
|
+
method: :post,
|
608
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
609
|
+
body: {
|
610
|
+
type: "not-a-valid-type",
|
611
|
+
},
|
612
|
+
headers: {
|
613
|
+
"Content-Type" => "application/json",
|
614
|
+
},
|
615
|
+
)
|
616
|
+
.will_respond_with(
|
617
|
+
status: 422,
|
618
|
+
body: {
|
619
|
+
"error" => {
|
620
|
+
"code" => 422,
|
621
|
+
"message" => Pact.term(generate: "not-a-valid-type is not a valid unpublishing type", matcher:/\S+/),
|
622
|
+
"fields" => {},
|
623
|
+
},
|
624
|
+
}
|
625
|
+
)
|
626
|
+
end
|
627
|
+
|
628
|
+
it "responds with 422" do
|
629
|
+
error = assert_raises GdsApi::HTTPClientError do
|
630
|
+
@api_client.unpublish(@content_id, type: "not-a-valid-type")
|
631
|
+
end
|
632
|
+
|
633
|
+
assert_equal 422, error.code
|
634
|
+
assert_equal "not-a-valid-type is not a valid unpublishing type", error.error_details["error"]["message"]
|
635
|
+
end
|
636
|
+
end
|
637
|
+
|
638
|
+
describe "if the content item is already unpublished" do
|
639
|
+
before do
|
640
|
+
publishing_api
|
641
|
+
.given("an unpublished content item exists with content_id: #{@content_id}")
|
642
|
+
.upon_receiving("an unpublish request")
|
643
|
+
.with(
|
644
|
+
method: :post,
|
645
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
646
|
+
body: {
|
647
|
+
type: "gone",
|
648
|
+
},
|
649
|
+
headers: {
|
650
|
+
"Content-Type" => "application/json",
|
651
|
+
},
|
652
|
+
)
|
653
|
+
.will_respond_with(
|
654
|
+
status: 200
|
655
|
+
)
|
656
|
+
end
|
657
|
+
|
658
|
+
it "responds with 200 and updates the unpublishing" do
|
659
|
+
response = @api_client.unpublish(@content_id, type: "gone")
|
660
|
+
assert_equal 200, response.code
|
661
|
+
end
|
662
|
+
end
|
663
|
+
|
664
|
+
describe "optimistic locking" do
|
665
|
+
describe "if the content item has not changed since it was requested" do
|
666
|
+
before do
|
667
|
+
publishing_api
|
668
|
+
.given("the published content item #{@content_id} is at version 3")
|
669
|
+
.upon_receiving("an unpublish request for version 3")
|
670
|
+
.with(
|
671
|
+
method: :post,
|
672
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
673
|
+
body: {
|
674
|
+
type: "gone",
|
675
|
+
previous_version: 3,
|
676
|
+
},
|
677
|
+
headers: {
|
678
|
+
"Content-Type" => "application/json",
|
679
|
+
},
|
680
|
+
)
|
681
|
+
.will_respond_with(
|
682
|
+
status: 200,
|
683
|
+
)
|
684
|
+
end
|
685
|
+
|
686
|
+
it "responds with 200 OK" do
|
687
|
+
response = @api_client.unpublish(@content_id, type: "gone", previous_version: 3)
|
688
|
+
assert_equal 200, response.code
|
689
|
+
end
|
690
|
+
end
|
691
|
+
|
692
|
+
describe "if the content item has changed in the meantime" do
|
693
|
+
before do
|
694
|
+
publishing_api
|
695
|
+
.given("the published content item #{@content_id} is at version 3")
|
696
|
+
.upon_receiving("an unpublish request for version 2")
|
697
|
+
.with(
|
698
|
+
method: :post,
|
699
|
+
path: "/v2/content/#{@content_id}/unpublish",
|
700
|
+
body: {
|
701
|
+
type: "gone",
|
702
|
+
previous_version: 2,
|
703
|
+
},
|
704
|
+
headers: {
|
705
|
+
"Content-Type" => "application/json",
|
706
|
+
},
|
707
|
+
)
|
708
|
+
.will_respond_with(
|
709
|
+
status: 409,
|
710
|
+
body: {
|
711
|
+
"error" => {
|
712
|
+
"code" => 409,
|
713
|
+
"message" => Pact.term(generate: "Conflict", matcher:/\S+/),
|
714
|
+
"fields" => {
|
715
|
+
"previous_version" => Pact.each_like("does not match", :min => 1),
|
716
|
+
},
|
717
|
+
},
|
718
|
+
},
|
719
|
+
headers: {
|
720
|
+
"Content-Type" => "application/json; charset=utf-8"
|
721
|
+
}
|
722
|
+
)
|
723
|
+
end
|
724
|
+
|
725
|
+
it "responds with 409 Conflict" do
|
726
|
+
error = assert_raises GdsApi::HTTPClientError do
|
727
|
+
@api_client.unpublish(@content_id, type: "gone", previous_version: 2)
|
728
|
+
end
|
729
|
+
assert_equal 409, error.code
|
730
|
+
assert_equal "Conflict", error.error_details["error"]["message"]
|
731
|
+
end
|
732
|
+
end
|
733
|
+
end
|
734
|
+
end
|
735
|
+
|
545
736
|
describe "#get_links" do
|
546
737
|
describe "when there's a links entry with links" do
|
547
738
|
before do
|
@@ -768,7 +959,7 @@ describe GdsApi::PublishingApiV2 do
|
|
768
959
|
end
|
769
960
|
|
770
961
|
describe "optimistic locking" do
|
771
|
-
describe "if the linkset has not
|
962
|
+
describe "if the linkset has not changed since it was requested" do
|
772
963
|
before do
|
773
964
|
publishing_api
|
774
965
|
.given("the linkset for #{@content_id} is at version 3")
|
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: 30.
|
4
|
+
version: 30.4.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: 2016-05-
|
11
|
+
date: 2016-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: plek
|