wirecard_checkout_page 0.0.1 → 0.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +2 -1
  4. data/Gemfile +2 -0
  5. data/README.md +4 -0
  6. data/Rakefile +1 -2
  7. data/VERSION +1 -1
  8. data/lib/wirecard_checkout_page.rb +6 -2
  9. data/lib/wirecard_checkout_page/errors.rb +2 -0
  10. data/lib/wirecard_checkout_page/fingerprint.rb +0 -0
  11. data/lib/wirecard_checkout_page/gateway.rb +26 -12
  12. data/lib/wirecard_checkout_page/init_request.rb +71 -0
  13. data/lib/wirecard_checkout_page/init_response.rb +12 -2
  14. data/lib/wirecard_checkout_page/request.rb +85 -0
  15. data/lib/wirecard_checkout_page/response_checksum.rb +15 -45
  16. data/lib/wirecard_checkout_page/toolkit/recur_payment.rb +66 -0
  17. data/lib/wirecard_checkout_page/toolkit/request.rb +55 -0
  18. data/lib/wirecard_checkout_page/toolkit/response.rb +50 -0
  19. data/lib/wirecard_checkout_page/version.rb +1 -1
  20. data/spec/spec_helper.rb +12 -8
  21. data/spec/wirecard_checkout_page/gateway_spec.rb +86 -28
  22. data/spec/wirecard_checkout_page/init_request_spec.rb +62 -0
  23. data/spec/wirecard_checkout_page/request_spec.rb +88 -0
  24. data/spec/wirecard_checkout_page/response_checksum_spec.rb +70 -116
  25. data/spec/wirecard_checkout_page/toolkit/recur_payment_spec.rb +125 -0
  26. data/spec/wirecard_checkout_page/toolkit/request_spec.rb +79 -0
  27. data/spec/wirecard_checkout_page/toolkit/response_spec.rb +36 -0
  28. data/wirecard_checkout_page.gemspec +9 -12
  29. metadata +40 -45
  30. data/lib/wirecard_checkout_page/request_checksum.rb +0 -88
  31. data/lib/wirecard_checkout_page/value_handling.rb +0 -19
  32. data/lib/wirecard_checkout_page/value_missing.rb +0 -1
  33. data/spec/wirecard_checkout_page/request_checksum_spec.rb +0 -96
  34. data/spec/wirecard_checkout_page/response_spec.rb +0 -42
@@ -1,88 +0,0 @@
1
- require 'wirecard_checkout_page/value_handling'
2
-
3
- module WirecardCheckoutPage
4
- class RequestChecksum
5
- include WirecardCheckoutPage::Utils
6
- include WirecardCheckoutPage::ValueHandling
7
-
8
- FINGERPRINT_KEYS = %w[
9
- secret
10
- customerId
11
- amount
12
- paymentType
13
- currency
14
- language
15
- orderDescription
16
- serviceURL
17
- successURL
18
- cancelURL
19
- failureURL
20
- confirmURL
21
- orderReference
22
- requestFingerprintOrder
23
- ].freeze
24
-
25
- def initialize(values = {})
26
- @values = stringify_keys(values)
27
- @fingerprint_keys = @values.delete('fingerprint_keys') || FINGERPRINT_KEYS
28
- @secret = @values.delete('secret') or
29
- raise WirecardCheckoutPage::ValueMissing, 'value "secret" is missing'
30
- @values = add_some_defaults @values
31
- @values.freeze
32
- @fingerprint_keys = fingerprint_keys
33
- @secret = @secret
34
- reset_missing_keys
35
- end
36
-
37
- attr_reader :fingerprint_keys
38
-
39
- attr_reader :values
40
-
41
- def request_parameters
42
- reset_missing_keys
43
- parameters = @values.dup
44
- parameters['requestFingerprintOrder'] = requestFingerprintOrder
45
- parameters['requestFingerprint'] = fingerprint
46
- if missing_keys?
47
- raise WirecardCheckoutPage::ValueMissing,
48
- "values #{missing_keys * ', ' } are missing"
49
- end
50
- parameters
51
- end
52
-
53
- private
54
-
55
- def fingerprint
56
- values = @values.dup
57
- values.update(
58
- 'requestFingerprintOrder' => requestFingerprintOrder,
59
- 'secret' => @secret,
60
- )
61
- Digest::MD5.hexdigest requestFingerprintSeed(values)
62
- end
63
-
64
- def requestFingerprintSeed(values)
65
- seed = fingerprint_keys.map { |k|
66
- values.fetch(k) do
67
- add_missing_key k
68
- next
69
- end
70
- } * ''
71
- end
72
-
73
- def requestFingerprintOrder
74
- @requestFingerprintOrder ||= fingerprint_keys.join(',').freeze
75
- end
76
-
77
- def add_some_defaults(values)
78
- default_values = {
79
- 'paymentType' => 'SELECT',
80
- 'currency' => 'EUR',
81
- 'language' => 'de',
82
- }
83
- values.update(default_values) do |key,old,new|
84
- old.nil? ? new : old
85
- end
86
- end
87
- end
88
- end
@@ -1,19 +0,0 @@
1
- module WirecardCheckoutPage::ValueHandling
2
- def missing_keys
3
- @missing_keys ||= []
4
- end
5
-
6
- def missing_keys?
7
- unless missing_keys.empty?
8
- missing_keys
9
- end
10
- end
11
-
12
- def add_missing_key(key)
13
- missing_keys << key
14
- end
15
-
16
- def reset_missing_keys
17
- missing_keys.clear
18
- end
19
- end
@@ -1 +0,0 @@
1
- require 'wirecard_checkout_page/errors'
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WirecardCheckoutPage::RequestChecksum do
4
- let :secret do
5
- 'SOMESECRET'
6
- end
7
-
8
- let :customer_id do
9
- 'SOMECUSTOMERID'
10
- end
11
-
12
- let :shop_id do
13
- 'someshopid'
14
- end
15
-
16
- describe '.new' do
17
- it "raises a WirecardCheckoutPage::ValueMissing if no values were passed" do
18
- expect {
19
- WirecardCheckoutPage::RequestChecksum.new
20
- }.to raise_error WirecardCheckoutPage::ValueMissing
21
- end
22
- end
23
-
24
- describe '#request_parameters' do
25
- it "raises a WirecardCheckoutPage::ValueMissing if not all required values were passed" do
26
- expect {
27
- WirecardCheckoutPage::RequestChecksum.new(
28
- secret: 'foo',
29
- fingerprint_keys: %w[foo bar],
30
- foo: 'foo'
31
- ).request_parameters
32
- }.to raise_error WirecardCheckoutPage::ValueMissing
33
- end
34
-
35
- it "doesn't an error if all required values were passed" do
36
- expect {
37
- WirecardCheckoutPage::RequestChecksum.new(
38
- secret: 'foo',
39
- fingerprint_keys: %w[foo bar],
40
- foo: 'foo',
41
- bar: 'bar',
42
- ).request_parameters
43
- }.not_to raise_error
44
- end
45
-
46
- it 'uses its default parameters and unless they were passed' do
47
- parameters = WirecardCheckoutPage::RequestChecksum.new(
48
- secret: 'foo',
49
- fingerprint_keys: [],
50
- currency: 'USD'
51
- ).request_parameters
52
- expect(parameters).to eq(
53
- "currency" => "USD",
54
- "language" => "de",
55
- "paymentType" => "SELECT",
56
- "requestFingerprint" => "d41d8cd98f00b204e9800998ecf8427e",
57
- "requestFingerprintOrder" => "",
58
- )
59
- end
60
-
61
- it "computes a checksum" do
62
- checksum = WirecardCheckoutPage::RequestChecksum.new(
63
- secret: secret,
64
- fingerprint_keys: WirecardCheckoutPage::RequestChecksum::FINGERPRINT_KEYS + %w[shopId],
65
- customerId: customer_id,
66
- shopId: shop_id,
67
- amount: '6.66',
68
- orderDescription: 'Kauf einer Seele (billig)',
69
- successURL: 'http://example.com/success',
70
- cancelURL: 'http://example.com/cancel',
71
- failureURL: 'http://example.com/failure',
72
- serviceURL: 'http://example.com',
73
- confirmURL: 'http://example.com/confirm',
74
- orderReference: '475ae67f248578b92a701',
75
- )
76
- expect(checksum.__send__(:fingerprint)).to eq "10feda94a5db9f3e2fc7439d3c4c228b"
77
- expect(checksum.request_parameters).to eq(
78
- "customerId" => customer_id,
79
- "shopId" => shop_id,
80
- "paymentType" => "SELECT",
81
- "currency" => "EUR",
82
- "language" => "de",
83
- "amount" => "6.66",
84
- "orderDescription" => "Kauf einer Seele (billig)",
85
- "successURL" => "http://example.com/success",
86
- "cancelURL" => "http://example.com/cancel",
87
- "failureURL" => "http://example.com/failure",
88
- "serviceURL" => "http://example.com",
89
- "confirmURL" => "http://example.com/confirm",
90
- "orderReference" => "475ae67f248578b92a701",
91
- "requestFingerprintOrder" => checksum.fingerprint_keys * ',',
92
- "requestFingerprint" => "10feda94a5db9f3e2fc7439d3c4c228b"
93
- )
94
- end
95
- end
96
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WirecardCheckoutPage::InitResponse do
4
-
5
- let(:success_response) do
6
- http_response = double(headers: { 'Location' => 'payment-url' }, body: '')
7
- WirecardCheckoutPage::InitResponse.new(http_response)
8
- end
9
-
10
- let(:failure_response) do
11
- http_response = double(headers: {}, body: 'Error message')
12
- WirecardCheckoutPage::InitResponse.new(http_response)
13
- end
14
-
15
- describe '#params' do
16
- it 'extracts the payment_url from the headers' do
17
- expect(success_response.params).to eq({ payment_url: 'payment-url' })
18
- end
19
-
20
- it 'returns nil as payment_url on error' do
21
- expect(failure_response.params).to eq({ payment_url: nil })
22
- end
23
- end
24
-
25
- describe '#success?' do
26
- it 'returns true if payment_url is present' do
27
- expect(success_response).to be_success
28
- end
29
-
30
- it 'returns false if payment_url is blank' do
31
- expect(failure_response).not_to be_success
32
- end
33
- end
34
-
35
- describe '#message' do
36
- it 'returns the response body' do
37
- expect(success_response.message).to eq ''
38
- expect(failure_response.message).to eq 'Error message'
39
- end
40
- end
41
-
42
- end