gds-api-adapters 11.5.0 → 11.6.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.
@@ -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