defra_ruby_mocks 2.2.0 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc69209c2d4b90b3726d7486bb0f4f0f001d80aff649951f4e8eaa5e17e46cec
4
- data.tar.gz: 2f8ca2c6731b2d0eae695e7aeae936c20288480bf758c4f16fcdcf3a27f70067
3
+ metadata.gz: 72e4545b335d8982579d4e72ec7319ad6d2a18dff08f931576dbace757736e30
4
+ data.tar.gz: 4b8a88a381bd24fd027214c2b86016d4b532d74dce07284050e2a48f3dfe726d
5
5
  SHA512:
6
- metadata.gz: ed7a96c4eb66607adbe341b441181b339b60e28cf1d66e92e1eb6467606d82676110efc587d921a309fec419c472095a82c7b1b1bb8ebbff64740182c38723f4
7
- data.tar.gz: f9b8847f14ac049e9b1cef302cfbe8893c6b56797e5f48e6b6548f939c16f923111c2f79be4023ab8c1c5a62aa91db10eebfc73b797de9feb7326798a65af215
6
+ metadata.gz: 5043858781580f1d769aecbe6c0e185311421811c4dad12154e50b83e58f69efde797a854d190384219b8a2d8fb2b73da66ddabecc2064a52c51140022e01b85
7
+ data.tar.gz: 45699483045aba318c7421ff48dbea130aaba08f3b92204fc9b2c16e1a63e89838c1429aaae4f72c32e8a32a7bf4757463b721469c4125d7e50e6413cf56f023
data/README.md CHANGED
@@ -3,7 +3,6 @@
3
3
  ![Build Status](https://github.com/DEFRA/defra-ruby-mocks/workflows/CI/badge.svg?branch=main)
4
4
  [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=DEFRA_defra-ruby-mocks&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=DEFRA_defra-ruby-mocks)
5
5
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=DEFRA_defra-ruby-mocks&metric=coverage)](https://sonarcloud.io/dashboard?id=DEFRA_defra-ruby-mocks)
6
- [![security](https://hakiri.io/github/DEFRA/defra-ruby-mocks/main.svg)](https://hakiri.io/github/DEFRA/defra-ruby-mocks/main)
7
6
  [![Licence](https://img.shields.io/badge/Licence-OGLv3-blue.svg)](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3)
8
7
 
9
8
  A Rails Engine used by the [Ruby services team](https://github.com/DEFRA/ruby-services-team) in their digital services.
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DefraRubyMocks
4
+ class GovpayController < ::DefraRubyMocks::ApplicationController
5
+
6
+ protect_from_forgery with: :exception, except: [:create_payemnt]
7
+
8
+ def create_payment
9
+ valid_create_params
10
+ render json: GovpayCreatePaymentService.new.run(
11
+ amount: params[:amount], description: params[:description], return_url: params[:return_url]
12
+ )
13
+ rescue StandardError => e
14
+ Rails.logger.error("MOCKS: Govpay payment creation error: #{e.message}")
15
+ Rails.logger.error e.backtrace
16
+ head 500
17
+ end
18
+
19
+ def payment_details
20
+ valid_payment_id
21
+ render json: GovpayGetPaymentService.new.run(payment_id: params[:payment_id])
22
+ rescue StandardError => e
23
+ Rails.logger.error("MOCKS: Govpay payment details error: #{e.message}")
24
+ Rails.logger.error e.backtrace
25
+ head 422
26
+ end
27
+
28
+ def valid_create_params
29
+ params.require(%i[amount description return_url])
30
+ end
31
+
32
+ def valid_payment_id
33
+ return true if params[:payment_id].length > 20 && params[:payment_id].match(/\A[a-zA-Z0-9]*\z/)
34
+
35
+ raise ArgumentError, "Invalid Govpay payment ID #{params[:payment_id]}"
36
+ end
37
+ end
38
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module DefraRubyMocks
4
4
  class WorldpayController < ::DefraRubyMocks::ApplicationController
5
+ protect_from_forgery with: :exception, except: [:payments_service]
5
6
 
6
7
  before_action :set_default_response_format
7
8
 
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom"
4
+
5
+ module DefraRubyMocks
6
+ class GovpayCreatePaymentService < BaseService
7
+
8
+ def run(amount:, description:, return_url:)
9
+ {
10
+ created_date: Time.current,
11
+ state: { status: "created", finished: false },
12
+ _links: {
13
+ self: { href: "#{base_url}/#{payment_id}", method: "GET" },
14
+ next_url: { href: return_url, method: "GET" }
15
+ },
16
+ amount: amount.to_i,
17
+ reference: "12345",
18
+ description: description,
19
+ payment_id: payment_id,
20
+ payment_provider: "sandbox"
21
+ }
22
+ end
23
+
24
+ private
25
+
26
+ def base_url
27
+ File.join(DefraRubyMocks.configuration.govpay_domain, "/payments")
28
+ end
29
+
30
+ def payment_id
31
+ @payment_id ||= SecureRandom.alphanumeric(26)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom"
4
+
5
+ module DefraRubyMocks
6
+ class GovpayGetPaymentService < BaseService
7
+
8
+ def run(payment_id:, amount: Random.rand(100..1_000), created_at: Time.current)
9
+ {
10
+ created_date: created_at,
11
+ amount: amount,
12
+ state: {
13
+ status: "success",
14
+ finished: true
15
+ },
16
+ description: "Your waste carriers registration fee",
17
+ reference: "12345",
18
+ language: "en",
19
+ payment_id: payment_id,
20
+ refund_summary: {
21
+ status: "available",
22
+ amount_available: amount - 100,
23
+ amount_submitted: 0
24
+ },
25
+ total_amount: amount,
26
+ payment_provider: "worldpay",
27
+ provider_id: "10987654321"
28
+ }
29
+ end
30
+
31
+ end
32
+ end
@@ -46,9 +46,9 @@ module DefraRubyMocks
46
46
 
47
47
  def company_name
48
48
  if resource.class.to_s == "WasteCarriersEngine::OrderCopyCardsRegistration"
49
- locate_original_registration(resource.reg_identifier).company_name.downcase
49
+ locate_original_registration(resource.reg_identifier).company_name&.downcase
50
50
  else
51
- resource.company_name.downcase
51
+ resource.company_name&.downcase
52
52
  end
53
53
  end
54
54
  end
@@ -65,6 +65,8 @@ module DefraRubyMocks
65
65
  end
66
66
 
67
67
  def payment_status
68
+ return :AUTHORISED unless @resource.company_name
69
+
68
70
  return :REFUSED if @resource.company_name.include?("reject")
69
71
  return :STUCK if @resource.company_name.include?("stuck")
70
72
  return :SENT_FOR_AUTHORISATION if @resource.company_name.include?("pending")
data/config/routes.rb CHANGED
@@ -11,14 +11,23 @@ DefraRubyMocks::Engine.routes.draw do
11
11
  as: "company_officers",
12
12
  constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
13
13
 
14
- get "/worldpay/payments-service",
15
- to: "worldpay#payments_service",
16
- as: "worldpay_payments_service",
17
- constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
14
+ post "/worldpay/payments-service",
15
+ to: "worldpay#payments_service",
16
+ as: "worldpay_payments_service",
17
+ constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
18
18
 
19
19
  get "/worldpay/dispatcher",
20
20
  to: "worldpay#dispatcher",
21
21
  as: "worldpay_dispatcher",
22
22
  constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
23
23
 
24
+ post "/govpay/v1/payments",
25
+ to: "govpay#create_payment",
26
+ as: "govpay_create_payment",
27
+ constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
28
+
29
+ get "/govpay/v1/payments/:payment_id",
30
+ to: "govpay#payment_details",
31
+ as: "govpay_payment_details",
32
+ constraints: ->(_request) { DefraRubyMocks.configuration.enabled? }
24
33
  end
@@ -5,8 +5,7 @@ module DefraRubyMocks
5
5
 
6
6
  DEFAULT_DELAY = 1000
7
7
 
8
- attr_accessor :worldpay_admin_code, :worldpay_mac_secret
9
- attr_accessor :worldpay_merchant_code, :worldpay_domain
8
+ attr_accessor :worldpay_admin_code, :worldpay_mac_secret, :worldpay_merchant_code, :worldpay_domain, :govpay_domain
10
9
  attr_reader :delay
11
10
 
12
11
  def initialize
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DefraRubyMocks
4
- VERSION = "2.2.0"
4
+ VERSION = "2.3.2"
5
5
  end