gds-api-adapters 11.5.0 → 11.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -26,16 +26,27 @@ class GdsApi::ContentApi < GdsApi::Base
26
26
  child_tags("section", parent_tag)
27
27
  end
28
28
 
29
- def tags(tag_type)
30
- get_list!("#{base_url}/tags.json?type=#{CGI.escape(tag_type)}")
29
+ def tags(tag_type, options={})
30
+ params = [
31
+ "type=#{CGI.escape(tag_type)}"
32
+ ]
33
+ params << "sort=#{options[:sort]}" if options.has_key?(:sort)
34
+
35
+ get_list!("#{base_url}/tags.json?#{params.join('&')}")
31
36
  end
32
37
 
33
38
  def root_tags(tag_type)
34
39
  get_list!("#{base_url}/tags.json?type=#{CGI.escape(tag_type)}&root_sections=true")
35
40
  end
36
41
 
37
- def child_tags(tag_type, parent_tag)
38
- get_list!("#{base_url}/tags.json?type=#{CGI.escape(tag_type)}&parent_id=#{CGI.escape(parent_tag)}")
42
+ def child_tags(tag_type, parent_tag, options={})
43
+ params = [
44
+ "type=#{CGI.escape(tag_type)}",
45
+ "parent_id=#{CGI.escape(parent_tag)}",
46
+ ]
47
+ params << "sort=#{options[:sort]}" if options.has_key?(:sort)
48
+
49
+ get_list!("#{base_url}/tags.json?#{params.join('&')}")
39
50
  end
40
51
 
41
52
  def tag(tag, tag_type=nil)
@@ -80,6 +80,15 @@ module GdsApi
80
80
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
81
81
  end
82
82
 
83
+ def content_api_has_sorted_tags(tag_type, sort_order, slugs_or_tags)
84
+ body = plural_response_base.merge(
85
+ "results" => slugs_or_tags.map { |tag| tag_result(tag, tag_type) }
86
+ )
87
+
88
+ url = "#{CONTENT_API_ENDPOINT}/tags.json?sort=#{sort_order}&type=#{tag_type}"
89
+ stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
90
+ end
91
+
83
92
  def content_api_has_child_tags(tag_type, parent_slug_or_hash, child_tag_ids)
84
93
  parent_tag = tag_hash(parent_slug_or_hash, tag_type)
85
94
  child_tags = child_tag_ids.map { |id|
@@ -92,6 +101,19 @@ module GdsApi
92
101
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
93
102
  end
94
103
 
104
+ def content_api_has_sorted_child_tags(tag_type, parent_slug_or_hash, sort_order, child_tag_ids)
105
+ parent_tag = tag_hash(parent_slug_or_hash, tag_type)
106
+ child_tags = child_tag_ids.map { |id|
107
+ tag_hash(id, tag_type).merge(parent: parent_tag)
108
+ }
109
+ body = plural_response_base.merge(
110
+ "results" => child_tags.map { |s| tag_result(s, tag_type) }
111
+ )
112
+
113
+ url = "#{CONTENT_API_ENDPOINT}/tags.json?parent_id=#{CGI.escape(parent_tag[:slug])}&sort=#{sort_order}&type=#{tag_type}"
114
+ stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
115
+ end
116
+
95
117
  def content_api_has_artefacts_with_a_tag(tag_type, slug, artefact_slugs=[])
96
118
  body = plural_response_base.merge(
97
119
  "results" => artefact_slugs.map do |artefact_slug|
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '11.5.0'
2
+ VERSION = '11.6.0'
3
3
  end
@@ -291,6 +291,14 @@ describe GdsApi::ContentApi do
291
291
  assert_equal "#{@base_api_url}/tags/authors/justin-thyme.json", first_section.id
292
292
  end
293
293
 
294
+ it "returns a sorted list of tags of a given type" do
295
+ content_api_has_sorted_tags("author", "alphabetical", ["justin-thyme"])
296
+ response = @api.tags("author", sort: "alphabetical")
297
+
298
+ first_section = response.first
299
+ assert_equal "#{@base_api_url}/tags/authors/justin-thyme.json", first_section.id
300
+ end
301
+
294
302
  it "returns a list of root tags of a given type" do
295
303
  content_api_has_root_tags("author", ["oliver-sudden", "percy-vere"])
296
304
  response = @api.root_tags("author")
@@ -317,6 +325,14 @@ describe GdsApi::ContentApi do
317
325
  assert_equal "#{@base_api_url}/tags/genres/indie%2Findie-rock.json", first_section.id
318
326
  end
319
327
 
328
+ it "returns a sorted list of child tags of a given type" do
329
+ content_api_has_sorted_child_tags("genre", "indie", "alphabetical", ["indie/indie-rock"])
330
+ response = @api.child_tags("genre", "indie", sort: "alphabetical")
331
+
332
+ first_section = response.first
333
+ assert_equal "#{@base_api_url}/tags/genres/indie%2Findie-rock.json", first_section.id
334
+ end
335
+
320
336
  it "returns artefacts given a section" do
321
337
  content_api_has_artefacts_in_a_section("crime-and-justice", ["complain-about-a-claims-company"])
322
338
  response = @api.with_tag("crime-and-justice")
@@ -167,6 +167,16 @@ describe GdsApi::Rummager do
167
167
  end
168
168
  end
169
169
 
170
+ it "#unified_search should raise an exception if the service at the unified search URI returns a 422" do
171
+ stub_request(:get, /example.com\/unified_search/).to_return(
172
+ status: [422, "Bad Request"],
173
+ body: %q("error":"Filtering by \"coffee\" is not allowed"),
174
+ )
175
+ assert_raises(GdsApi::HTTPErrorResponse) do
176
+ GdsApi::Rummager.new("http://example.com").unified_search(q: "query", filter_coffee: "tea")
177
+ end
178
+ end
179
+
170
180
  it "#unified_search should raise an exception if the service at the search URI times out" do
171
181
  stub_request(:get, /example.com\/unified_search/).to_timeout
172
182
  assert_raises(GdsApi::TimedOutException) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.5.0
4
+ version: 11.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-10 00:00:00.000000000 Z
12
+ date: 2014-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: plek
@@ -385,7 +385,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
385
385
  version: '0'
386
386
  segments:
387
387
  - 0
388
- hash: -724725384917283612
388
+ hash: 713806713155441280
389
389
  required_rubygems_version: !ruby/object:Gem::Requirement
390
390
  none: false
391
391
  requirements:
@@ -394,7 +394,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
394
394
  version: '0'
395
395
  segments:
396
396
  - 0
397
- hash: -724725384917283612
397
+ hash: 713806713155441280
398
398
  requirements: []
399
399
  rubyforge_project:
400
400
  rubygems_version: 1.8.23