wirecard_checkout_page 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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