Module: GdsApi::TestHelpers::PublishingApiV2

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

Constant Summary collapse

PUBLISHING_API_V2_ENDPOINT =
Plek.current.find('publishing-api') + '/v2'
PUBLISHING_API_ENDPOINT =
Plek.current.find('publishing-api')

Instance Method Summary collapse

Methods included from ContentItemHelpers

#content_item_for_base_path, #gone_content_item_for_base_path, #titleize_base_path

Instance Method Details

#assert_publishing_api(verb, url, attributes_or_matcher = nil, times = 1) ⇒ Object

Assert that a request was made to the publishing API

Parameters:

  • verb (String)
  • url (String)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


248
249
250
251
252
253
254
255
256
257
258
259
260
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 248

def assert_publishing_api(verb, url, attributes_or_matcher = nil, times = 1)
  if attributes_or_matcher.is_a?(Hash)
    matcher = request_json_matches(attributes_or_matcher)
  else
    matcher = attributes_or_matcher
  end

  if matcher
    assert_requested(verb, url, times: times, &matcher)
  else
    assert_requested(verb, url, times: times)
  end
end

#assert_publishing_api_discard_draft(content_id, attributes_or_matcher = nil, times = 1) ⇒ Object

Assert that a draft was discarded (POST /v2/content/:content_id/discard-draft)

Parameters:

  • content_id (UUID)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


237
238
239
240
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 237

def assert_publishing_api_discard_draft(content_id, attributes_or_matcher = nil, times = 1)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/discard-draft"
  assert_publishing_api(:post, url, attributes_or_matcher, times)
end

Assert that links were updated (PATCH /v2/links/:content_id)

Parameters:

  • content_id (UUID)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


227
228
229
230
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 227

def assert_publishing_api_patch_links(content_id, attributes_or_matcher = nil, times = 1)
  url = PUBLISHING_API_V2_ENDPOINT + "/links/" + content_id
  assert_publishing_api(:patch, url, attributes_or_matcher, times)
end

#assert_publishing_api_publish(content_id, attributes_or_matcher = nil, times = 1) ⇒ Object

Assert that content was published (POST /v2/content/:content_id/publish)

Parameters:

  • content_id (UUID)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


207
208
209
210
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 207

def assert_publishing_api_publish(content_id, attributes_or_matcher = nil, times = 1)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/publish"
  assert_publishing_api(:post, url, attributes_or_matcher, times)
end

#assert_publishing_api_put_content(content_id, attributes_or_matcher = nil, times = 1) ⇒ Object

Assert that content was saved (PUT /v2/content/:content_id)

Parameters:

  • content_id (UUID)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


197
198
199
200
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 197

def assert_publishing_api_put_content(content_id, attributes_or_matcher = nil, times = 1)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/" + content_id
  assert_publishing_api(:put, url, attributes_or_matcher, times)
end

Assert that a draft was saved and published, and links were updated.

  • PUT /v2/content/:content_id

  • POST /v2/content/:content_id/publish

  • PATCH /v2/links/:content_id

Parameters:

  • body (String)
  • content_id (UUID) (defaults to: nil)
  • publish_body (Hash) (defaults to: nil)


181
182
183
184
185
186
187
188
189
190
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 181

def assert_publishing_api_put_content_links_and_publish(body, content_id = nil, publish_body = nil)
  content_id ||= body[:content_id]
  if publish_body.nil?
    publish_body = { update_type: body.fetch(:update_type) }
    publish_body[:locale] = body[:locale] if body[:locale]
  end
  assert_publishing_api_put_content(content_id, body.except(:links))
  assert_publishing_api_patch_links(content_id, body.slice(:links)) unless body.slice(:links).empty?
  assert_publishing_api_publish(content_id, publish_body)
end

#assert_publishing_api_unpublish(content_id, attributes_or_matcher = nil, times = 1) ⇒ Object

Assert that content was unpublished (POST /v2/content/:content_id/unpublish)

Parameters:

  • content_id (UUID)
  • attributes_or_matcher (Object) (defaults to: nil)
  • times (Integer) (defaults to: 1)


217
218
219
220
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 217

def assert_publishing_api_unpublish(content_id, attributes_or_matcher = nil, times = 1)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/unpublish"
  assert_publishing_api(:post, url, attributes_or_matcher, times)
end

#request_json_includes(required_attributes) ⇒ Object

Get a request matcher that checks if a JSON request includes a set of attributes



263
264
265
266
267
268
269
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 263

def request_json_includes(required_attributes)
  ->(request) do
    data = JSON.parse(request.body)
    deep_stringify_keys(required_attributes).
      to_a.all? { |key, value| data[key] == value }
  end
end

#request_json_matches(required_attributes) ⇒ Object

Get a request matcher that checks if a JSON request matches a hash



272
273
274
275
276
277
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 272

def request_json_matches(required_attributes)
  ->(request) do
    data = JSON.parse(request.body)
    deep_stringify_keys(required_attributes) == data
  end
end

#stub_any_publishing_api_callObject

Stub any version 2 request to the publishing API



157
158
159
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 157

def stub_any_publishing_api_call
  stub_request(:any, %r{\A#{PUBLISHING_API_V2_ENDPOINT}})
end

#stub_any_publishing_api_call_to_return_not_foundObject

Stub any version 2 request to the publishing API to return a 404 response



162
163
164
165
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 162

def stub_any_publishing_api_call_to_return_not_found
  stub_request(:any, %r{\A#{PUBLISHING_API_V2_ENDPOINT}})
    .to_return(status: 404, headers: { "Content-Type" => "application/json; charset=utf-8" })
end

#stub_any_publishing_api_discard_draftObject

Stub any POST /v2/content/*/discard-draft request



152
153
154
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 152

def stub_any_publishing_api_discard_draft
  stub_request(:post, %r{\A#{PUBLISHING_API_V2_ENDPOINT}/content/.*/discard-draft})
end

Stub any PATCH /v2/links/* request



137
138
139
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 137

def stub_any_publishing_api_patch_links
  stub_request(:patch, %r{\A#{PUBLISHING_API_V2_ENDPOINT}/links/})
end

#stub_any_publishing_api_publishObject

Stub any POST /v2/content/*/publish request



142
143
144
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 142

def stub_any_publishing_api_publish
  stub_request(:post, %r{\A#{PUBLISHING_API_V2_ENDPOINT}/content/.*/publish})
end

#stub_any_publishing_api_put_contentObject

Stub any PUT /v2/content/* request



132
133
134
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 132

def stub_any_publishing_api_put_content
  stub_request(:put, %r{\A#{PUBLISHING_API_V2_ENDPOINT}/content/})
end

#stub_any_publishing_api_unpublishObject

Stub any POST /v2/content/*/unpublish request



147
148
149
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 147

def stub_any_publishing_api_unpublish
  stub_request(:post, %r{\A#{PUBLISHING_API_V2_ENDPOINT}/content/.*/unpublish})
end

#stub_publishing_api_discard_draft(content_id) ⇒ Object

Stub a POST /v2/content/:content_id/discard-draft request

Parameters:

  • content_id (UUID)


105
106
107
108
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 105

def stub_publishing_api_discard_draft(content_id)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/discard-draft"
  stub_request(:post, url).to_return(status: 200, headers: { "Content-Type" => "application/json; charset=utf-8" })
end

#stub_publishing_api_does_not_have_item(content_id) ⇒ Object Also known as: publishing_api_does_not_have_item

Stub GET /v2/content/:content_id to return a 404 response

Parameters:

  • content_id (UUID)


379
380
381
382
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 379

def stub_publishing_api_does_not_have_item(content_id)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/" + content_id
  stub_request(:get, url).to_return(status: 404, body: resource_not_found(content_id, "content item").to_json, headers: {})
end

Stub GET /v2/links/:content_id to return a 404 response

Parameters:

  • content_id (UUID)


518
519
520
521
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 518

def stub_publishing_api_does_not_have_links(content_id)
  url = PUBLISHING_API_V2_ENDPOINT + "/links/" + content_id
  stub_request(:get, url).to_return(status: 404, body: resource_not_found(content_id, "link set").to_json, headers: {})
end

#stub_publishing_api_get_editions(editions, params = {}) ⇒ Object Also known as: publishing_api_get_editions

Stub GET /v2/editions to return a set of editions

Examples:


stub_publishing_api_get_editions(
  vehicle_recalls_and_faults,   # this is a variable containing an array of editions
  fields: fields,   #example: let(:fields) { %i[base_path content_id public_updated_at title publication_state] }
  per_page: 50
)

Parameters:

  • items (Array)
  • params (Hash) (defaults to: {})


587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 587

def stub_publishing_api_get_editions(editions, params = {})
  url = PUBLISHING_API_V2_ENDPOINT + "/editions"

  results = editions.map do |edition|
    next edition unless params[:fields]
    edition.select { |k| params[:fields].include?(k) }
  end

  per_page = (params[:per_page] || 100).to_i
  results = results.take(per_page)

  body = {
    results: results,
    links: [
      { rel: "self", href: "#{PUBLISHING_API_V2_ENDPOINT}/editions" },
    ],
  }

  stub_request(:get, url)
    .with(query: params)
    .to_return(status: 200, body: body.to_json, headers: {})
end

#stub_publishing_api_has_content(items, params = {}) ⇒ Object Also known as: publishing_api_has_content

Stub GET /v2/content/ to return a set of content items

Examples:


stub_publishing_api_has_content(
  vehicle_recalls_and_faults,   # this is a variable containing an array of content items
  document_type: described_class.publishing_api_document_type,   #example of a document_type: "vehicle_recalls_and_faults_alert"
  fields: fields,   #example: let(:fields) { %i[base_path content_id public_updated_at title publication_state] }
  page: 1,
  per_page: 50
)

Parameters:

  • items (Array)
  • params (Hash) (defaults to: {})


292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 292

def stub_publishing_api_has_content(items, params = {})
  url = PUBLISHING_API_V2_ENDPOINT + "/content"

  if params.respond_to? :fetch
    per_page = params.fetch(:per_page, 50)
    page = params.fetch(:page, 1)
  else
    per_page = 50
    page = 1
  end

  start_position = (page - 1) * per_page
  page_items = items.slice(start_position, per_page) || []

  number_of_pages =
    if items.count < per_page
      1
    else
      (items.count / per_page.to_f).ceil
    end

  body = {
    results: page_items,
    total: items.count,
    pages: number_of_pages,
    current_page: page
  }

  stub_request(:get, url)
    .with(query: params)
    .to_return(status: 200, body: body.to_json, headers: {})
end

Stub a request to the expanded links endpoint

Examples:

stub_publishing_api_has_expanded_links(
  {
    "content_id" => "64aadc14-9bca-40d9-abb4-4f21f9792a05",
    "expanded_links" => {
      "mainstream_browse_pages" => [
        {
          "content_id" => "df2e7a3e-2078-45de-a76a-fd37d027427a",
          "base_path" => "/a/base/path",
          "document_type" => "mainstream_browse_page",
          "locale" => "en",
          "links" => {},
          # ...
        }
      ],
      "parent" => [
        {
          "content_id" => "df2e7a3e-2028-45de-a75a-fd37d027427e",
          "document_type" => "mainstream_browse_page",
          # ...
        },
      ]
    }
  }
)
Services.publishing_api.expanded_links("64aadc14-9bca-40d9-abb4-4f21f9792a05")
=>  {
      "content_id" => "64aadc14-9bca-40d9-abb4-4f21f9792a05",
      "expanded_links" => {
        "mainstream_browse_pages" => [
          {
            "content_id" => "df2e7a3e-2078-45de-a76a-fd37d027427a",
            "base_path" => "/a/base/path",
            "document_type" => "mainstream_browse_page",
            "locale" => "en",
            "links" => {},
            ...
          }
        ],
        "parent" => [
          {
            "content_id" => "df2e7a3e-2028-45de-a75a-fd37d027427e",
            "document_type" => "mainstream_browse_page",
            ...
          },
        ]
      }
    }

Parameters:

  • links (Hash)

    the structure of the links hash



474
475
476
477
478
479
480
481
482
483
484
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 474

def stub_publishing_api_has_expanded_links(links, with_drafts: true, generate: false)
  links = deep_transform_keys(links, &:to_sym)
  request_params = {}
  request_params['with_drafts'] = false if !with_drafts
  request_params['generate'] = true if generate

  url = PUBLISHING_API_V2_ENDPOINT + "/expanded-links/" + links[:content_id]
  stub_request(:get, url)
    .with(query: request_params)
    .to_return(status: 200, body: links.to_json, headers: {})
end

#stub_publishing_api_has_fields_for_document(document_type, items, fields) ⇒ Object Also known as: publishing_api_has_fields_for_document

This method has been refactored into publishing_api_has_content (above) publishing_api_has_content allows for flexible passing in of arguments, please use instead



327
328
329
330
331
332
333
334
335
336
337
338
339
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 327

def stub_publishing_api_has_fields_for_document(document_type, items, fields)
  body = Array(items).map { |item|
    deep_stringify_keys(item).slice(*fields)
  }

  query_params = fields.map { |f|
    "&fields%5B%5D=#{f}"
  }

  url = PUBLISHING_API_V2_ENDPOINT + "/content?document_type=#{document_type}#{query_params.join('')}"

  stub_request(:get, url).to_return(status: 200, body: { results: body }.to_json, headers: {})
end

#stub_publishing_api_has_item(item, params = {}) ⇒ Object Also known as: publishing_api_has_item

Stub GET /v2/content/:content_id to return a specific content item hash

Parameters:

  • item (Hash)


352
353
354
355
356
357
358
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 352

def stub_publishing_api_has_item(item, params = {})
  item = deep_transform_keys(item, &:to_sym)
  url = PUBLISHING_API_V2_ENDPOINT + "/content/" + item[:content_id]
  stub_request(:get, url)
    .with(query: hash_including(params))
    .to_return(status: 200, body: item.to_json, headers: {})
end

#stub_publishing_api_has_item_in_sequence(content_id, items) ⇒ Object Also known as: publishing_api_has_item_in_sequence

Stub GET /v2/content/:content_id to progress through a series of responses.

Parameters:

  • items (Array)


363
364
365
366
367
368
369
370
371
372
373
374
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 363

def stub_publishing_api_has_item_in_sequence(content_id, items)
  items = items.each { |item| deep_transform_keys(item, &:to_sym) }
  url = PUBLISHING_API_V2_ENDPOINT + "/content/" + content_id
  calls = -1

  stub_request(:get, url).to_return do |_request|
    calls += 1
    item = items[calls] || items.last

    { status: 200, body: item.to_json, headers: {} }
  end
end

#stub_publishing_api_has_linkables(linkables, document_type:) ⇒ Object Also known as: publishing_api_has_linkables

Stub GET /v2/linkables to return a set of content items with a specific document type

Parameters:

  • linkables (Array)


344
345
346
347
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 344

def stub_publishing_api_has_linkables(linkables, document_type:)
  url = PUBLISHING_API_V2_ENDPOINT + "/linkables?document_type=#{document_type}"
  stub_request(:get, url).to_return(status: 200, body: linkables.to_json, headers: {})
end

#stub_publishing_api_has_linked_items(items, params = {}) ⇒ Object Also known as: publishing_api_has_linked_items

Stub calls to the get linked items endpoint

Examples:


stub_publishing_api_has_linked_items(
  [ item_1, item_2 ],
  {
    content_id: "51ac4247-fd92-470a-a207-6b852a97f2db",
    link_type: "taxons",
    fields: ["title", "description", "base_path"]
  }
)

Parameters:

  • items (Array)

    The linked items we wish to return

  • params (Hash) (defaults to: {})

    A hash of parameters



556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 556

def stub_publishing_api_has_linked_items(items, params = {})
  content_id = params.fetch(:content_id)
  link_type = params.fetch(:link_type)
  fields = params.fetch(:fields, %w(base_path content_id document_type title))

  url = Plek.current.find('publishing-api') + "/v2/linked/#{content_id}"

  request_parmeters = {
    "fields" => fields,
    "link_type" => link_type,
  }

  stub_request(:get, url)
    .with(query: request_parmeters)
    .and_return(
      body: items.to_json,
      status: 200
    )
end

Stub a request to links endpoint

Examples:


stub_publishing_api_has_links(
  {
    "content_id" => "64aadc14-9bca-40d9-abb6-4f21f9792a05",
    "links" => {
      "mainstream_browse_pages" => ["df2e7a3e-2078-45de-a75a-fd37d027427e"],
      "parent" => ["df2e7a3e-2078-45de-a75a-fd37d027427e"],
      "organisations" => ["569a9ee5-c195-4b7f-b9dc-edc17a09113f", "5c54ae52-341b-499e-a6dd-67f04633b8cf"]
    },
    "version" => 6
  }
)

Services.publishing_api.get_links("64aadc14-9bca-40d9-abb6-4f21f9792a05")
=> {
     "content_id" => "64aadc14-9bca-40d9-abb6-4f21f9792a05",
     "links" => {
       "mainstream_browse_pages" => ["df2e7a3e-2078-45de-a75a-fd37d027427e"],
       "parent" => ["df2e7a3e-2078-45de-a75a-fd37d027427e"],
       "organisations" => ["569a9ee5-c195-4b7f-b9dc-edc17a09113f", "5c54ae52-341b-499e-a6dd-67f04633b8cf"]
     },
     "version" => 6
   }

Parameters:

  • links (Hash)

    the structure of the links hash



414
415
416
417
418
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 414

def stub_publishing_api_has_links(links)
  links = deep_transform_keys(links, &:to_sym)
  url = PUBLISHING_API_V2_ENDPOINT + "/links/" + links[:content_id]
  stub_request(:get, url).to_return(status: 200, body: links.to_json, headers: {})
end

Stub a request to get links for content ids

Examples:

stub_publishing_api_has_links_for_content_ids(
  { "2878337b-bed9-4e7f-85b6-10ed2cbcd504" => {
      "links" => { "taxons" => ["eb6965c7-3056-45d0-ae50-2f0a5e2e0854"] }
    },
    "eec13cea-219d-4896-9c97-60114da23559" => {
      "links" => {}
    }
  }
)
Services.publishing_api.get_links_for_content_ids(["2878337b-bed9-4e7f-85b6-10ed2cbcd504"])
=>  {
      "2878337b-bed9-4e7f-85b6-10ed2cbcd504" => {
        "links" => [
          "eb6965c7-3056-45d0-ae50-2f0a5e2e0854"
        ]
      }
    }

Parameters:

  • links (Hash)

    the links for each content id



510
511
512
513
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 510

def stub_publishing_api_has_links_for_content_ids(links)
  url = PUBLISHING_API_V2_ENDPOINT + "/links/by-content-id"
  stub_request(:post, url).with(body: { content_ids: links.keys }).to_return(status: 200, body: links.to_json, headers: {})
end

#stub_publishing_api_has_lookups(lookup_hash) ⇒ Object Also known as: publishing_api_has_lookups

Stub calls to the lookups endpoint

Examples:


stub_publishing_api_has_lookups({
  "/foo" => "51ac4247-fd92-470a-a207-6b852a97f2db",
  "/bar" => "261bd281-f16c-48d5-82d2-9544019ad9ca"
})

Parameters:

  • lookup_hash (Hash)

    Hash with base_path as key, content_id as value.



534
535
536
537
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 534

def stub_publishing_api_has_lookups(lookup_hash)
  url = Plek.current.find('publishing-api') + '/lookup-by-base-path'
  stub_request(:post, url).to_return(body: lookup_hash.to_json)
end

#stub_publishing_api_isnt_availableObject Also known as: publishing_api_isnt_available

Stub any version 2 request to the publishing API to return a 503 response



168
169
170
171
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 168

def stub_publishing_api_isnt_available
  stub_request(:any, /#{PUBLISHING_API_V2_ENDPOINT}\/.*/).to_return(status: 503)
  stub_request(:any, /#{PUBLISHING_API_ENDPOINT}\/.*/).to_return(status: 503)
end

Stub a PATCH /v2/links/:content_id request

Examples:

stub_publishing_api_patch_links(
  my_content_id,
  "links" => {
    "taxons" => %w(level_one_topic level_two_topic),
  },
  "previous_version" => 3,
)

Parameters:

  • content_id (UUID)
  • body (String)


49
50
51
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 49

def stub_publishing_api_patch_links(content_id, body)
  stub_publishing_api_patch(content_id, body, '/links')
end

Stub a PATCH /v2/links/:content_id request to return a 409 response

Examples:

stub_publishing_api_patch_links_conflict(
  my_content_id,
  "links" => {
    "taxons" => %w(level_one_topic level_two_topic),
  },
  "previous_version" => 3,
)

Parameters:

  • content_id (UUID)
  • body (String)


66
67
68
69
70
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 66

def stub_publishing_api_patch_links_conflict(content_id, body)
  previous_version = JSON.parse(body.to_json)["previous_version"]
  override_response_hash = { status: 409, body: version_conflict(previous_version) }
  stub_publishing_api_patch(content_id, body, '/links', override_response_hash)
end

#stub_publishing_api_publish(content_id, body, response_hash = {}) ⇒ Object

Stub a POST /v2/content/:content_id/publish request

Parameters:

  • content_id (UUID)
  • body (String)
  • response_hash (Hash) (defaults to: {})


77
78
79
80
81
82
83
84
85
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 77

def stub_publishing_api_publish(content_id, body, response_hash = {})
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/publish"
  response = {
    status: 200,
    body: '{}',
    headers: { "Content-Type" => "application/json; charset=utf-8" }
  }.merge(response_hash)
  stub_request(:post, url).with(body: body).to_return(response)
end

#stub_publishing_api_put_content(content_id, body, response_hash = {}) ⇒ Object

Stub a PUT /v2/content/:content_id request with the given content id and request body. if no response_hash is given, a default response as follows is created: 200, body: ‘{’, headers: => “application/json; charset=utf-8”}

if a response is given, then it will be merged with the default response. if the given parameter for the response body is a Hash, it will be converted to JSON.

The following two examples are equivalent:

Examples:

stub_publishing_api_put_content(my_content_id, my_request_body, { status: 201, body: {version: 33}.to_json })
stub_publishing_api_put_content(my_content_id, my_request_body, { status: 201, body: {version: 33} })

Parameters:

  • content_id (UUID)
  • body (String)
  • response_hash (Hash) (defaults to: {})


32
33
34
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 32

def stub_publishing_api_put_content(content_id, body, response_hash = {})
  stub_publishing_api_put(content_id, body, '/content', response_hash)
end

Stub requests issued when publishing a new draft.

  • PUT /v2/content/:content_id

  • POST /v2/content/:content_id/publish

  • PATCH /v2/links/:content_id

Parameters:

  • body (String)
  • content_id (UUID) (defaults to: nil)
  • publish_body (Hash) (defaults to: nil)


118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 118

def stub_publishing_api_put_content_links_and_publish(body, content_id = nil, publish_body = nil)
  content_id ||= body[:content_id]
  if publish_body.nil?
    publish_body = { update_type: body.fetch(:update_type) }
    publish_body[:locale] = body[:locale] if body[:locale]
  end
  stubs = []
  stubs << stub_publishing_api_put_content(content_id, body.except(:links))
  stubs << stub_publishing_api_patch_links(content_id, body.slice(:links)) unless body.slice(:links).empty?
  stubs << stub_publishing_api_publish(content_id, publish_body)
  stubs
end

#stub_publishing_api_unpublish(content_id, params, response_hash = {}) ⇒ Object

Stub a POST /v2/content/:content_id/unpublish request

Parameters:

  • content_id (UUID)
  • params (Hash)
  • body (String)


92
93
94
95
96
97
98
99
100
# File 'lib/gds_api/test_helpers/publishing_api_v2.rb', line 92

def stub_publishing_api_unpublish(content_id, params, response_hash = {})
  url = PUBLISHING_API_V2_ENDPOINT + "/content/#{content_id}/unpublish"
  response = {
    status: 200,
    body: '{}',
    headers: { "Content-Type" => "application/json; charset=utf-8" }
  }.merge(response_hash)
  stub_request(:post, url).with(params).to_return(response)
end