youlend 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faker'
4
+
5
+ module Youlend
6
+ class LeadGenerator
7
+ def self.generate
8
+ new.generate
9
+ end
10
+
11
+ def initialize
12
+ Faker::Config.locale = 'en-GB'
13
+
14
+ generate
15
+ end
16
+
17
+ # Mandatory fields:
18
+ # * CompanyName
19
+ # * CompanyType (ltd, plc, llp, dac, soleTrader, aps, as, ks, ivs and is)
20
+ # * MonthsTrading
21
+ # * CountryISOCode (GBR, DNK and IRE)
22
+ # * KeyContactName
23
+ # * ThirdPartyLeadId
24
+ # * RegisteredAddress
25
+ # * ContactPhoneNumber
26
+ # * MonthlyCardRevenue (must be greater than or equal to '1000')
27
+ # * ContactEmailAddress
28
+ # * LoanCurrencyISOCode (ISO 4217 currency code. Valid codes are GBP, EUR and DKK)
29
+ # * ThirdPartyCustomerId
30
+ def generate
31
+ {
32
+ companyName: 'HOKO LTD',
33
+ companyType: 'ltd',
34
+ monthsTrading: rand(3..10),
35
+ countryISOCode: 'GBR',
36
+ keyContactName: Faker::Name.name,
37
+ thirdPartyLeadId: SecureRandom.uuid,
38
+ registeredAddress: address,
39
+ contactPhoneNumber: Faker::PhoneNumber.phone_number,
40
+ monthlyCardRevenue: 10_000,
41
+ contactEmailAddress: Faker::Internet.email,
42
+ loanCurrencyISOCode: 'GBP',
43
+ thirdPartyCustomerId: SecureRandom.uuid,
44
+ companyNumber: '09525857', # optional
45
+ notificationURL: Faker::Internet.url, # optional
46
+ thirdPartyMerchantId: SecureRandom.uuid # optional
47
+ }
48
+ end
49
+
50
+ private
51
+
52
+ def address
53
+ {
54
+ line1: Faker::Address.street_address,
55
+ line2: Faker::Address.secondary_address,
56
+ city: 'London',
57
+ region: 'London',
58
+ areaCode: Faker::Address.zip_code,
59
+ country: 'UK'
60
+ }
61
+ end
62
+ end
63
+ end
File without changes
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faker'
4
+
5
+ module Youlend
6
+ class MerchantGenerator
7
+ def self.generate
8
+ new.generate
9
+ end
10
+
11
+ def initialize
12
+ Faker::Config.locale = 'en-GB'
13
+
14
+ generate
15
+ end
16
+
17
+ # Mandatory fields:
18
+ # * CompanyName
19
+ # * CompanyType (ltd, plc, llp, dac, partnership, soleTrader, aps, as, ks, ivs and is)
20
+ # * CompanyNumber
21
+ # * FinancialData
22
+ # * CountryISOCode (GBR, DNK and IRE)
23
+ # * LoanCurrencyISOCode (ISO 4217 currency code. Valid codes are GBP, EUR and DKK)
24
+ # * ThirdPartyMerchantId
25
+ def generate
26
+ {
27
+ companyName: 'HOKO LTD',
28
+ companyType: 'ltd',
29
+ companyNumber: '09525857',
30
+ financialData: financial_data,
31
+ countryISOCode: 'GBR',
32
+ loanCurrencyISOCode: 'GBP',
33
+ thirdPartyMerchantId: SecureRandom.uuid,
34
+ significantPersons: [significant_person], # optional
35
+ contactEmailAddress: 'oterosantos@gmail.com' # optional
36
+ }
37
+ end
38
+
39
+ private
40
+
41
+ def financial_data
42
+ {
43
+ monthlyCardRevenue: 0,
44
+ monthlyValueOfPurchaseTransactions: 0,
45
+ monthlyRevenueFromInvoices: 0,
46
+ paymentData: payment_data
47
+ }
48
+ end
49
+
50
+ def payment_data
51
+ (1..12).to_a.map do |month|
52
+ formatted_month = format('%02<month>d', month: month)
53
+
54
+ {
55
+ paymentDate: "#{Date.today.year - 1}-#{formatted_month}-01",
56
+ amount: 5000,
57
+ currencyISOCode: 'GBP'
58
+ }
59
+ end
60
+ end
61
+
62
+ def significant_person
63
+ {
64
+ firstName: Faker::Name.first_name,
65
+ surname: Faker::Name.last_name,
66
+ address: address,
67
+ dateOfBirth: Date.parse('1980-01-01').to_s
68
+ }
69
+ end
70
+
71
+ def address
72
+ {
73
+ line1: Faker::Address.street_address,
74
+ line2: Faker::Address.secondary_address,
75
+ city: 'London',
76
+ region: 'London',
77
+ areaCode: Faker::Address.zip_code,
78
+ country: 'UK'
79
+ }
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Youlend
4
+ class PathSanitizer
5
+ # Removes any leading '/' and guarantees an ending '/'
6
+ def self.sanitize(path)
7
+ parts = path.split('/').reject(&:empty?)
8
+ new_path = parts.join('/')
9
+
10
+ [new_path, '/'].join
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Following the API description here: https://staging.youlendapi.com/prequalification/index.html
4
+ module Youlend
5
+ class Quote
6
+ def self.pre_qualification(params)
7
+ response = Youlend.connection.post('/prequalification/Requests', :prequalification, params)
8
+
9
+ # If we got back a response but all the funded amounts are 0.0 it means that the load was
10
+ # actually rejected! We'll replace the response body with an error message instead and change
11
+ # the success code.
12
+ if loan_accepted?(response.body)
13
+ response
14
+ else
15
+ response.http_response.env.status = 422
16
+ response.http_response.env.body = { error: 'Rejected', error_description: 'Loan was rejected' }
17
+ response
18
+ end
19
+ end
20
+
21
+ def self.loan_accepted?(data)
22
+ return false unless data[:loanOptions]
23
+ options = data[:loanOptions]
24
+
25
+ funded_amounts = options.map { |option| option[:fundedAmount] }
26
+
27
+ funded_amounts.any?(&:positive?)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module Youlend
6
+ class Response
7
+ extend Forwardable
8
+
9
+ attr_reader :http_response
10
+ def_delegators :@http_response, :headers, :body, :status, :success?
11
+
12
+ def initialize(http_response)
13
+ @http_response = http_response
14
+ end
15
+
16
+ def unauthorized?
17
+ status == 401
18
+ end
19
+
20
+ def token_expired?
21
+ auth_header = @http_response.headers['www-authenticate']
22
+
23
+ return false unless auth_header
24
+
25
+ auth_header.match?(/.*token is expired.*/)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Youlend
4
+ VERSION = '1.0.0'
5
+ end
@@ -0,0 +1,84 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"test","client_secret":null,"audience":"/prequalification"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 401
21
+ message: Unauthorized
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:30:34 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '60'
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=b86d644328e734a89744d6ab0c5ab572c0111eb1-1612272634-1800-AcGEpbRAnosUxswpSXM+JAqOBtuUgVfOzH1IugvEMHcHIsTDjoQ1XXEiXASfhswbTP1gXQLtpq79QNhCRMd3i88=;
33
+ path=/; expires=Tue, 02-Feb-21 14:00:34 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=db76a7c8db86f5fd148669281a4fd0fca1612272634; expires=Thu, 04-Mar-21
36
+ 13:30:34 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3Ad446bdc0-655a-11eb-9745-d92175d2cd95.IicDICUYKjaHmwetynHVcGPlmOwmulS%2BU6pKfHrGcvE;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:30:34 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3Ad446bdc0-655a-11eb-9745-d92175d2cd95.IicDICUYKjaHmwetynHVcGPlmOwmulS%2BU6pKfHrGcvE;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:30:34 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b4447ece99da6a-LIS
45
+ Cache-Control:
46
+ - private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Cf-Cache-Status:
50
+ - DYNAMIC
51
+ Cf-Request-Id:
52
+ - '080489233a0000da6ab2a8b000000001'
53
+ Expect-Ct:
54
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
55
+ Ot-Baggage-Auth0-Request-Id:
56
+ - 61b4447ece99da6a
57
+ Ot-Tracer-Sampled:
58
+ - 'true'
59
+ Ot-Tracer-Spanid:
60
+ - 7ca1b23302f70745
61
+ Ot-Tracer-Traceid:
62
+ - 4774272523010f8a
63
+ X-Auth0-Requestid:
64
+ - 9105d826c668167fdfd4
65
+ X-Content-Type-Options:
66
+ - nosniff
67
+ X-Ratelimit-Limit:
68
+ - '30'
69
+ X-Ratelimit-Remaining:
70
+ - '29'
71
+ X-Ratelimit-Reset:
72
+ - '1612272635'
73
+ Vary:
74
+ - Accept-Encoding
75
+ Server:
76
+ - cloudflare
77
+ Alt-Svc:
78
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
79
+ body:
80
+ encoding: UTF-8
81
+ string: '{"error":"access_denied","error_description":"Unauthorized"}'
82
+ http_version:
83
+ recorded_at: Tue, 02 Feb 2021 13:30:34 GMT
84
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,86 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"<CLIENT_ID>","client_secret":"<CLIENT_SECRET>","audience":"https://staging.youlendapi.com/onboarding"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:24:57 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=e6a4378af86d22825e034680d08e42422cad86a0-1612272297-1800-AcsFVk6Zv0PJF3XHlWZ8G77qJ8cvjPf6Aku6MvwFjMinViAvIKbeV3urOJ3KxhRsxRt1g/woJ0OywLZhWe4Smkw=;
33
+ path=/; expires=Tue, 02-Feb-21 13:54:57 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=d0401db464e44077ae99de37e2a271a0f1612272296; expires=Thu, 04-Mar-21
36
+ 13:24:56 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3A0af87850-655a-11eb-98e7-893d431ee561.a4UtjYsy2su3wNuzKHvF5c6FwubT%2Bdtr3hwRaI1cK%2F4;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:57 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3A0af87850-655a-11eb-98e7-893d431ee561.a4UtjYsy2su3wNuzKHvF5c6FwubT%2Bdtr3hwRaI1cK%2F4;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:57 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b43c400c3d5d43-LIS
45
+ Cache-Control:
46
+ - no-store
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Vary:
50
+ - Accept-Encoding
51
+ Cf-Cache-Status:
52
+ - DYNAMIC
53
+ Cf-Request-Id:
54
+ - '080483fc0a00005d43a9a02000000001'
55
+ Expect-Ct:
56
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
57
+ Ot-Baggage-Auth0-Request-Id:
58
+ - 61b43c400c3d5d43
59
+ Ot-Tracer-Sampled:
60
+ - 'true'
61
+ Ot-Tracer-Spanid:
62
+ - 1176407e7e758d00
63
+ Ot-Tracer-Traceid:
64
+ - 3f5af5df1055e780
65
+ Pragma:
66
+ - no-cache
67
+ X-Auth0-Requestid:
68
+ - 770c64fa80205df8e5b4
69
+ X-Content-Type-Options:
70
+ - nosniff
71
+ X-Ratelimit-Limit:
72
+ - '30'
73
+ X-Ratelimit-Remaining:
74
+ - '29'
75
+ X-Ratelimit-Reset:
76
+ - '1612272298'
77
+ Server:
78
+ - cloudflare
79
+ Alt-Svc:
80
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
81
+ body:
82
+ encoding: ASCII-8BIT
83
+ string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik0wUXdOMEl5TnpRMVJrRXhNa1pGTlVWRU5UQTJRalV6UWtRMVJUY3dORE0xUVVVM05rTkVRZyJ9.eyJodHRwOi8veW91bGVuZC5jb20vY2xhaW1zL2xlbmRpbmdQYXJ0bmVySWQiOiJkOGJmZTcwMy1lODBlLTRlMzUtYmFhYS1mZDk2MWU3ZGZlZTkiLCJpc3MiOiJodHRwczovL3lvdWxlbmQtc3RhZy5ldS5hdXRoMC5jb20vIiwic3ViIjoidXpLVEcyQ0NBZkFZQ0pGU0I3N3ZXRlVOelVOOHZxdlhAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vc3RhZ2luZy55b3VsZW5kYXBpLmNvbS9vbmJvYXJkaW5nIiwiaWF0IjoxNjEyMjcyMjk3LCJleHAiOjE2MTIzNTg2OTcsImF6cCI6InV6S1RHMkNDQWZBWUNKRlNCNzd2V0ZVTnpVTjh2cXZYIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.lcYAhbXgtTnOBE528d5mPu7CD_FUefSnRwIK9u1rdg-CcRCflLmesALTJjS-VbE0kotT_PAU9n2CuLAbsK3XbORkg8doxKZG_1mNeSxuqCYrcd-nOPtxnKUXuRrCIZoogzmt9gt350skue_6YSKVjqeqeGetzyOdoitiJEms2rkuzMqkfNlTqouXKjYKHFIG6tUg4oBUlrvjwDvAXaLmZIyxpSkihrqCG2_5cvzrmtZmffwJvFtPVYKyufgtZm66NIPiitw_NfTtcU1ZggPBgJyjjGJKL6XD--mJqoaGEzWUncyJEOuONmqm_m_H0LuCfb5OQMLkDbQuqo_fwsixfA","expires_in":86400,"token_type":"Bearer"}'
84
+ http_version:
85
+ recorded_at: Tue, 02 Feb 2021 13:24:57 GMT
86
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,86 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://youlend-stag.eu.auth0.com/oauth/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"grant_type":"client_credentials","client_id":"<CLIENT_ID>","client_secret":"<CLIENT_SECRET>","audience":"https://staging.youlendapi.com/prequalification"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ruby-youlend-1.0.0
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Date:
24
+ - Tue, 02 Feb 2021 13:24:56 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - __cf_bm=1f04630e67aebd3e63c5ae209b26c60da4cebc96-1612272296-1800-AdPv0nCo/T4gCqXZONdqjcajKW+5GA8gigo3PBVPwP9olp1ZX6yXJmJJHCDL3+Upyon3Vtg+uwZV+xYQR6VCteA=;
33
+ path=/; expires=Tue, 02-Feb-21 13:54:56 GMT; domain=.eu.auth0.com; HttpOnly;
34
+ Secure; SameSite=None
35
+ - __cfduid=d0091f13a90105b0ec98405f0a18a34981612272296; expires=Thu, 04-Mar-21
36
+ 13:24:56 GMT; path=/; domain=.eu.auth0.com; HttpOnly; SameSite=Lax; Secure
37
+ - did=s%3Av0%3A0ac50c40-655a-11eb-809c-3d9d54edece8.Msqyby98z4gqYXI9LxAWrR2xCemhgYWy8FphAoEUNlA;
38
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:56 GMT; HttpOnly;
39
+ Secure; SameSite=None
40
+ - did_compat=s%3Av0%3A0ac50c40-655a-11eb-809c-3d9d54edece8.Msqyby98z4gqYXI9LxAWrR2xCemhgYWy8FphAoEUNlA;
41
+ Max-Age=31557600; Path=/; Expires=Wed, 02 Feb 2022 19:24:56 GMT; HttpOnly;
42
+ Secure
43
+ Cf-Ray:
44
+ - 61b43c3d3ec0da6e-LIS
45
+ Cache-Control:
46
+ - no-store
47
+ Strict-Transport-Security:
48
+ - max-age=31536000
49
+ Vary:
50
+ - Accept-Encoding
51
+ Cf-Cache-Status:
52
+ - DYNAMIC
53
+ Cf-Request-Id:
54
+ - '080483fa430000da6eb7b8a000000001'
55
+ Expect-Ct:
56
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
57
+ Ot-Baggage-Auth0-Request-Id:
58
+ - 61b43c3d3ec0da6e
59
+ Ot-Tracer-Sampled:
60
+ - 'true'
61
+ Ot-Tracer-Spanid:
62
+ - 625d9fdc0482fd38
63
+ Ot-Tracer-Traceid:
64
+ - 70edb07403066d5e
65
+ Pragma:
66
+ - no-cache
67
+ X-Auth0-Requestid:
68
+ - 48a985195b00b3397482
69
+ X-Content-Type-Options:
70
+ - nosniff
71
+ X-Ratelimit-Limit:
72
+ - '30'
73
+ X-Ratelimit-Remaining:
74
+ - '29'
75
+ X-Ratelimit-Reset:
76
+ - '1612272297'
77
+ Server:
78
+ - cloudflare
79
+ Alt-Svc:
80
+ - h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400
81
+ body:
82
+ encoding: ASCII-8BIT
83
+ string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik0wUXdOMEl5TnpRMVJrRXhNa1pGTlVWRU5UQTJRalV6UWtRMVJUY3dORE0xUVVVM05rTkVRZyJ9.eyJodHRwOi8veW91bGVuZC5jb20vY2xhaW1zL2xlbmRpbmdQYXJ0bmVySWQiOiJkOGJmZTcwMy1lODBlLTRlMzUtYmFhYS1mZDk2MWU3ZGZlZTkiLCJpc3MiOiJodHRwczovL3lvdWxlbmQtc3RhZy5ldS5hdXRoMC5jb20vIiwic3ViIjoidXpLVEcyQ0NBZkFZQ0pGU0I3N3ZXRlVOelVOOHZxdlhAY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vc3RhZ2luZy55b3VsZW5kYXBpLmNvbS9wcmVxdWFsaWZpY2F0aW9uIiwiaWF0IjoxNjEyMjcyMjk2LCJleHAiOjE2MTIzNTg2OTYsImF6cCI6InV6S1RHMkNDQWZBWUNKRlNCNzd2V0ZVTnpVTjh2cXZYIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.ZSyjtXprsNihqIaCfB5JXjwPhBEi41VDyiWmZMu4XIBNrojuqYXnEljwFQIVEM9IiXrDMFx-b9RqLu1CyNtNKqexbIylQ6_jALCyENCeapXZ-MrHTPCPBs8NdnISeRNah-uvT0bMnOVUzpXW6D99aCoGp2LyLAPwqG-kbI05xpKuX_dtMn43To-67-0VCZijJBOT6fip5uJf7m1VTgHc7_Wc4B8gTYl0WUwtZokBqcviD0AzkQxShsdMI1vDZdXPvya475d1F-nfHg0XT4YJKoaJ8tvdClmBcUA4vJrHb1kN6mW7eGpcL-71fzwffJnZViras3FyY7_QOxUNn7FotA","expires_in":86400,"token_type":"Bearer"}'
84
+ http_version:
85
+ recorded_at: Tue, 02 Feb 2021 13:24:56 GMT
86
+ recorded_with: VCR 5.0.0