Add additional Taler token requests to specs

This commit is contained in:
Maikel Linke
2026-03-20 15:47:59 +11:00
parent 067349f742
commit 23a4ca5933
4 changed files with 177 additions and 55 deletions

View File

@@ -1,54 +1,5 @@
---
http_interactions:
- request:
method: post
uri: https://backend.demo.taler.net/instances/sandbox/private/orders
body:
encoding: UTF-8
string: '{"order":{"amount":"KUDOS:10.0","summary":"Open Food Network order","fulfillment_url":"http://test.host/payment_gateways/taler/61"},"create_token":false}'
headers:
Authorization:
- "<HIDDEN-AUTHORIZATION-HEADER>"
Accept:
- application/json
User-Agent:
- Taler Ruby
Content-Type:
- application/json
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
response:
status:
code: 200
message: OK
headers:
Server:
- nginx/1.26.3
Date:
- Thu, 22 Jan 2026 04:43:32 GMT
Content-Type:
- application/json
Content-Length:
- '42'
Connection:
- keep-alive
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- "*"
Cache-Control:
- no-store
Via:
- 1.1 Caddy
Strict-Transport-Security:
- max-age=63072000; includeSubDomains; preload
body:
encoding: UTF-8
string: |-
{
"order_id": "2026.022-0284X4GE8WKMJ"
}
recorded_at: Thu, 22 Jan 2026 04:43:33 GMT
- request:
method: get
uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.022-0284X4GE8WKMJ
@@ -103,4 +54,108 @@ http_interactions:
}
}
recorded_at: Thu, 22 Jan 2026 04:43:34 GMT
recorded_with: VCR 6.3.1
- request:
method: post
uri: https://backend.demo.taler.net/instances/sandbox/private/token
body:
encoding: UTF-8
string: '{"scope":"write"}'
headers:
Authorization:
- "<HIDDEN-AUTHORIZATION-HEADER>"
Accept:
- application/json
User-Agent:
- Taler Ruby
Content-Type:
- application/json
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
response:
status:
code: 200
message: OK
headers:
Server:
- nginx/1.26.3
Date:
- Fri, 20 Mar 2026 04:31:47 GMT
Content-Type:
- application/json
Content-Length:
- '258'
Connection:
- keep-alive
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- "*"
Cache-Control:
- no-store
Via:
- 1.1 Caddy
Strict-Transport-Security:
- max-age=63072000; includeSubDomains; preload
body:
encoding: ASCII-8BIT
string: |-
{
"access_token": "secret-token:J38S28NEJ6T07H1WP60F3T6PPWQYNKMR251TEZEX3CXP3SH54210",
"token": "secret-token:J38S28NEJ6T07H1WP60F3T6PPWQYNKMR251TEZEX3CXP3SH54210",
"scope": "write",
"refreshable": false,
"expiration": {
"t_s": 1774067507
}
}
recorded_at: Fri, 20 Mar 2026 04:31:48 GMT
- request:
method: post
uri: https://backend.demo.taler.net/instances/sandbox/private/orders
body:
encoding: UTF-8
string: '{"order":{"amount":"KUDOS:10.0","summary":"Open Food Network order","fulfillment_url":"http://test.host/payment_gateways/taler/198"},"create_token":false}'
headers:
Authorization:
- "<HIDDEN-AUTHORIZATION-HEADER>"
Accept:
- application/json
User-Agent:
- Taler Ruby
Content-Type:
- application/json
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
response:
status:
code: 200
message: OK
headers:
Server:
- nginx/1.26.3
Date:
- Fri, 20 Mar 2026 04:31:48 GMT
Content-Type:
- application/json
Content-Length:
- '42'
Connection:
- keep-alive
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- "*"
Cache-Control:
- no-store
Via:
- 1.1 Caddy
Strict-Transport-Security:
- max-age=63072000; includeSubDomains; preload
body:
encoding: UTF-8
string: |-
{
"order_id": "2026.079-0189PJNWMX6JA"
}
recorded_at: Fri, 20 Mar 2026 04:31:48 GMT
recorded_with: VCR 6.4.0

View File

@@ -47,6 +47,61 @@ http_interactions:
"detail": "taler-order-id:12345"
}
recorded_at: Sat, 24 Jan 2026 00:51:31 GMT
- request:
method: post
uri: https://backend.demo.taler.net/instances/sandbox/private/token
body:
encoding: UTF-8
string: '{"scope":"write"}'
headers:
Authorization:
- "<HIDDEN-AUTHORIZATION-HEADER>"
Accept:
- application/json
User-Agent:
- Taler Ruby
Content-Type:
- application/json
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
response:
status:
code: 200
message: OK
headers:
Server:
- nginx/1.26.3
Date:
- Fri, 20 Mar 2026 04:52:23 GMT
Content-Type:
- application/json
Content-Length:
- '258'
Connection:
- keep-alive
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- "*"
Cache-Control:
- no-store
Via:
- 1.1 Caddy
Strict-Transport-Security:
- max-age=63072000; includeSubDomains; preload
body:
encoding: ASCII-8BIT
string: |-
{
"access_token": "secret-token:176N5XTVVSR98FE6V4QR2Y35HKS61ZW5CK1BC7YEZYHX9M41N5GG",
"token": "secret-token:176N5XTVVSR98FE6V4QR2Y35HKS61ZW5CK1BC7YEZYHX9M41N5GG",
"scope": "write",
"refreshable": false,
"expiration": {
"t_s": 1774068743
}
}
recorded_at: Fri, 20 Mar 2026 04:52:23 GMT
- request:
method: get
uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.020-03R3ETNZZ0DVA
@@ -70,7 +125,7 @@ http_interactions:
Server:
- nginx/1.26.3
Date:
- Sat, 24 Jan 2026 00:55:33 GMT
- Fri, 20 Mar 2026 04:52:24 GMT
Content-Type:
- application/json
Content-Length:
@@ -205,5 +260,5 @@ http_interactions:
"refund_details": [],
"order_status_url": "https://backend.demo.taler.net/instances/sandbox/orders/2026.020-03R3ETNZZ0DVA"
}
recorded_at: Sat, 24 Jan 2026 00:55:32 GMT
recorded_with: VCR 6.3.1
recorded_at: Fri, 20 Mar 2026 04:52:24 GMT
recorded_with: VCR 6.4.0

View File

@@ -10,16 +10,18 @@ RSpec.describe Spree::PaymentMethod::Taler do
)
}
let(:backend_url) { "https://backend.demo.taler.net/instances/sandbox" }
let(:token_url) { "#{backend_url}/private/token" }
describe "#external_payment_url", vcr: true do
it "creates an order reference and retrieves a URL to pay at" do
order = create(:order_ready_for_confirmation, payment_method: taler)
url = subject.external_payment_url(order:)
expect(url).to eq "#{backend_url}/orders/2026.022-0284X4GE8WKMJ"
expect(url).to start_with "#{backend_url}/orders/"
expect(url).to match "orders/20...[0-9A-Z-]{17}$"
payment = order.payments.last.reload
expect(payment.response_code).to match "2026.022-0284X4GE8WKMJ"
expect(payment.response_code).to match "20...[0-9A-Z-]{17}$"
end
end
@@ -29,6 +31,10 @@ RSpec.describe Spree::PaymentMethod::Taler do
let(:payment) { build(:payment, response_code: "taler-order-7") }
let(:order_url) { "#{backend_url}/private/orders/taler-order-7" }
before do
stub_request(:post, token_url).to_return(body: { token: "12345" }.to_json)
end
it "returns an ActiveMerchant response" do
order_status = "paid"
stub_request(:get, order_url).to_return(body: { order_status: }.to_json)
@@ -57,6 +63,10 @@ RSpec.describe Spree::PaymentMethod::Taler do
"taler://refund/backend.demo.taler.net/instances/sandbox/taler-order-8/"
}
before do
stub_request(:post, token_url).to_return(body: { token: "12345" }.to_json)
end
it "starts the refund process" do
order_status = {
order_status: "paid",

View File

@@ -32,8 +32,10 @@ RSpec.describe "Admin -> Order -> Payments" do
amount: "KUDOS:2",
}
}
token_endpoint = "https://taler.example.com/private/token"
order_endpoint = "https://taler.example.com/private/orders/taler-id-1"
refund_endpoint = "https://taler.example.com/private/orders/taler-id-1/refund"
stub_request(:post, token_endpoint).to_return(body: { token: "abc" }.to_json)
stub_request(:get, order_endpoint).to_return(body: order_status.to_json)
stub_request(:post, refund_endpoint).to_return(body: "{}")