defra_ruby_mocks 4.0.0 → 4.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c648dae3e678030c2d132615c0d148b673bedacde6d9d0e653dd2f20710fe4f9
4
- data.tar.gz: '0948298e72ee7c2adb8e5cd98ff71eaf0f72de6fe9a9faf0aa0e6ae1e3699c3b'
3
+ metadata.gz: daca7a21c8e025f343ee8e118ce47db24bc156f01646d747b3eb69f779f8f47e
4
+ data.tar.gz: 7d4d39f87f9caae3bf194ff94eb5e952d841deb2f97928177e83b739158166a5
5
5
  SHA512:
6
- metadata.gz: 1cdb1d9e9b0f434ef1b7bcc58de8f5ec79c07bb10621772cd705ef33bad0a66a7767b764df299a8b506af750b296429b814a5b4575385b66d08cf8f985853778
7
- data.tar.gz: 4ca9a9935239757a5af2874392c85de2df9e9a1c93ee504610a8430b6179004de218b2ef9fb06ef20ffdc4e9edcc1f0d812d9ee14ed06a024ed14c46279dd50c
6
+ metadata.gz: b95c89f6d29270099b4d96c5b841de3cbe2f97648a44006bfa13f442e35ea8b191b2c436db0426854efefdc9c001b89686eb3db004ab16acb6854b2036b05f7a
7
+ data.tar.gz: de085b31d9767d688660ee45b6530cd139d9cb3d4a2a313c5aa170494d415dc88c308f794a7c60b2891a0da6d47c84ce838318455399fc37f6fbcef783f833f0
@@ -8,17 +8,31 @@ module DefraRubyMocks
8
8
  def create_payment
9
9
  valid_create_params
10
10
 
11
- # Enqueue the payment callback to run after the controller responds
12
- DefraRubyMocks::GovpayPaymentCallbackJob.perform_later(params[:return_url])
11
+ store_return_url(params[:return_url])
13
12
 
14
13
  render json: GovpayCreatePaymentService.new.run(
15
- amount: params[:amount], description: params[:description], return_url: params[:return_url]
14
+ amount: params[:amount], description: params[:description]
16
15
  )
17
16
  rescue StandardError => e
18
17
  Rails.logger.error("MOCKS: Govpay payment creation error: #{e.message}")
19
18
  head 500
20
19
  end
21
20
 
21
+ # This mocks the Govpay route which presents the payment details page to the user.
22
+ # We don't mock the actual payment details and payment confirmation pages - we go
23
+ # straight to the application callback route.
24
+ def next_url
25
+ response_url = retrieve_return_url
26
+ Rails.logger.warn "Govpay mock calling response URL #{response_url}"
27
+ redirect_to response_url
28
+ # RestClient::Request.execute(method: :GET, url: response_url)
29
+ rescue RestClient::ExceptionWithResponse => e
30
+ Rails.logger.warn "Govpay mock: RestClient received response: #{e}"
31
+ rescue StandardError => e
32
+ Rails.logger.error("Govpay mock: Error sending request to govpay: #{e}")
33
+ Airbrake.notify(e, message: "Error on govpay request")
34
+ end
35
+
22
36
  def payment_details
23
37
  valid_payment_id
24
38
  render json: GovpayGetPaymentService.new.run(payment_id: params[:payment_id])
@@ -44,6 +58,22 @@ module DefraRubyMocks
44
58
  head 500
45
59
  end
46
60
 
61
+ private
62
+
63
+ # We need to persist the return_url between the initial payment creation request and the execution of next_url
64
+ def return_url_filepath
65
+ "#{Dir.tmpdir}/last_return_url"
66
+ end
67
+
68
+ def store_return_url(return_url)
69
+ Rails.logger.warn ":::::: storing return_url #{return_url}"
70
+ File.write(return_url_filepath, return_url)
71
+ end
72
+
73
+ def retrieve_return_url
74
+ File.read(return_url_filepath)
75
+ end
76
+
47
77
  def valid_create_params
48
78
  params.require(%i[amount description return_url])
49
79
  end
@@ -5,12 +5,12 @@ require "securerandom"
5
5
  module DefraRubyMocks
6
6
  class GovpayCreatePaymentService < BaseService
7
7
 
8
- def run(amount:, description:, return_url:)
8
+ def run(amount:, description:)
9
9
  success_response.merge(
10
10
  {
11
11
  _links: {
12
12
  self: { href: "#{base_url}/#{payment_id}", method: "GET" },
13
- next_url: { href: return_url, method: "GET" }
13
+ next_url: { href: "#{base_url}/secure/next-url-uuid-abc123", method: "GET" }
14
14
  },
15
15
  amount: amount.to_i,
16
16
  description: description,
data/config/routes.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- DefraRubyMocks::Engine.routes.draw do
3
+ DefraRubyMocks::Engine.routes.draw do # rubocop:disable Metrics/BlockLength
4
4
  get "/company/:id",
5
5
  to: "company#show",
6
6
  as: "company",
@@ -16,6 +16,11 @@ DefraRubyMocks::Engine.routes.draw do
16
16
  as: "govpay_create_payment",
17
17
  constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
18
18
 
19
+ get "/govpay/v1/payments/secure/:uuid",
20
+ to: "govpay#next_url",
21
+ as: "govpay_next_url",
22
+ constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
23
+
19
24
  get "/govpay/v1/payments/:payment_id",
20
25
  to: "govpay#payment_details",
21
26
  as: "govpay_payment_details",
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DefraRubyMocks
4
- VERSION = "4.0.0"
4
+ VERSION = "4.1.0"
5
5
  end
@@ -12,12 +12,6 @@ module DefraRubyMocks
12
12
  def configuration
13
13
  @configuration ||= Configuration.new
14
14
  end
15
-
16
- # Added for testing. Without we cannot test both a config object with and
17
- # with set values in the same rspec session
18
- def reset_configuration
19
- @configuration = nil
20
- end
21
15
  end
22
16
 
23
17
  def self.configure
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defra_ruby_mocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Defra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-05 00:00:00.000000000 Z
11
+ date: 2023-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -66,8 +66,6 @@ files:
66
66
  - app/controllers/defra_ruby_mocks/application_controller.rb
67
67
  - app/controllers/defra_ruby_mocks/company_controller.rb
68
68
  - app/controllers/defra_ruby_mocks/govpay_controller.rb
69
- - app/jobs/defra_ruby_mocks/application_job.rb
70
- - app/jobs/defra_ruby_mocks/govpay_payment_callback_job.rb
71
69
  - app/services/defra_ruby_mocks/base_service.rb
72
70
  - app/services/defra_ruby_mocks/companies_house_service.rb
73
71
  - app/services/defra_ruby_mocks/govpay_create_payment_service.rb
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DefraRubyMocks
4
- class ApplicationJob < ActiveJob::Base
5
- end
6
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DefraRubyMocks
4
- class GovpayPaymentCallbackJob < DefraRubyMocks::ApplicationJob
5
- queue_as :default
6
-
7
- def perform(*response_url)
8
- Rails.logger.debug "GovpayPaymentCallbackJob calling response URL #{response_url}"
9
- RestClient::Request.execute(method: :GET, url: response_url[0])
10
- rescue RestClient::ExceptionWithResponse => e
11
- Rails.logger.debug "GovpayPaymentCallbackJob: RestClient received response: #{e}"
12
- rescue StandardError => e
13
- Rails.logger.error("GovpayPaymentCallbackJob: Error sending request to govpay: #{e}")
14
- Airbrake.notify(e, message: "Error on govpay request")
15
- end
16
- end
17
- end