Module: GdsApi::TestHelpers::ContentStore

Includes:
ContentItemHelpers
Defined in:
lib/gds_api/test_helpers/content_store.rb

Instance Method Summary collapse

Methods included from ContentItemHelpers

#gone_content_item_for_base_path, #titleize_base_path

Instance Method Details

#content_item_for_base_path(base_path) ⇒ Object



81
82
83
# File 'lib/gds_api/test_helpers/content_store.rb', line 81

def content_item_for_base_path(base_path)
  super.merge("base_path" => base_path)
end

#content_store_endpoint(draft: false) ⇒ Object



10
11
12
# File 'lib/gds_api/test_helpers/content_store.rb', line 10

def content_store_endpoint(draft: false)
  draft ? Plek.find("draft-content-store") : Plek.find("content-store")
end

#stub_content_store_does_not_have_item(base_path, options = {}) ⇒ Object



37
38
39
40
41
# File 'lib/gds_api/test_helpers/content_store.rb', line 37

def stub_content_store_does_not_have_item(base_path, options = {})
  endpoint = content_store_endpoint(draft: options[:draft])
  stub_request(:get, "#{endpoint}/content#{base_path}").to_return(status: 404, headers: {})
  stub_request(:get, "#{endpoint}/incoming-links#{base_path}").to_return(status: 404, headers: {})
end

#stub_content_store_has_gone_item(base_path, body = gone_content_item_for_base_path(base_path), options = {}) ⇒ Object

Content store has gone item

Stubs a content item in the content store to respond with 410 HTTP Status Code and response body with ‘format’ set to ‘gone’.

Examples:


stub_content_store.stub_content_store_has_gone_item('/sample-slug')

# Will return HTTP Status Code 410 and the following response body:
{
  "title" => nil,
  "description" => nil,
  "format" => "gone",
  "schema_name" => "gone",
  "public_updated_at" => nil,
  "base_path" => "/sample-slug",
  "withdrawn_notice" => {},
  "details" => {}
}

Parameters:

  • base_path (String)
  • body (Hash) (defaults to: gone_content_item_for_base_path(base_path))
  • options (Hash) (defaults to: {})

Options Hash (options):

  • draft (String)

    Will point to the draft content store if set to true



67
68
69
70
71
72
73
74
75
# File 'lib/gds_api/test_helpers/content_store.rb', line 67

def stub_content_store_has_gone_item(base_path, body = gone_content_item_for_base_path(base_path), options = {})
  body = body.to_json unless body.is_a?(String)
  endpoint = content_store_endpoint(draft: options[:draft])
  stub_request(:get, "#{endpoint}/content#{base_path}").to_return(
    status: 410,
    body:,
    headers: {},
  )
end


85
86
87
88
89
90
# File 'lib/gds_api/test_helpers/content_store.rb', line 85

def stub_content_store_has_incoming_links(base_path, links)
  url = "#{content_store_endpoint}/incoming-links#{base_path}"
  body = links.to_json

  stub_request(:get, url).to_return(body:)
end

#stub_content_store_has_item(base_path, body = content_item_for_base_path(base_path), options = {}) ⇒ Object

Stubs a content item in the content store. The following options can be passed in:

:max_age  will set the max-age of the Cache-Control header in the response. Defaults to 900
:private  if true, the Cache-Control header will include the "private" directive. By default it
          will include "public"
:draft    will point to the draft content store if set to true


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/gds_api/test_helpers/content_store.rb', line 21

def stub_content_store_has_item(base_path, body = content_item_for_base_path(base_path), options = {})
  max_age = options.fetch(:max_age, 900)
  visibility = options[:private] ? "private" : "public"
  body = body.to_json unless body.is_a?(String)

  endpoint = content_store_endpoint(draft: options[:draft])
  stub_request(:get, "#{endpoint}/content#{base_path}").to_return(
    status: 200,
    body:,
    headers: {
      cache_control: "#{visibility}, max-age=#{max_age}",
      date: Time.now.httpdate,
    },
  )
end

#stub_content_store_isnt_availableObject



77
78
79
# File 'lib/gds_api/test_helpers/content_store.rb', line 77

def stub_content_store_isnt_available
  stub_request(:any, /#{content_store_endpoint}\/.*/).to_return(status: 503)
end