blockchyp 2.2.1

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 (40) hide show
  1. checksums.yaml +7 -0
  2. data/Makefile +71 -0
  3. data/README.md +997 -0
  4. data/Rakefile +39 -0
  5. data/lib/blockchyp.rb +190 -0
  6. data/lib/blockchyp/version.rb +5 -0
  7. data/lib/blockchyp_client.rb +346 -0
  8. data/lib/crypto_utils.rb +25 -0
  9. data/test/boolean_prompt_test.rb +43 -0
  10. data/test/capture_signature_test.rb +40 -0
  11. data/test/gateway_timeout_test.rb +40 -0
  12. data/test/heartbeat_test.rb +27 -0
  13. data/test/new_transaction_display_test.rb +78 -0
  14. data/test/pan_charge_test.rb +53 -0
  15. data/test/pan_enroll_test.rb +51 -0
  16. data/test/pan_preauth_test.rb +52 -0
  17. data/test/simple_batch_close_test.rb +48 -0
  18. data/test/simple_capture_test.rb +47 -0
  19. data/test/simple_gift_activate_test.rb +42 -0
  20. data/test/simple_message_test.rb +40 -0
  21. data/test/simple_ping_test.rb +39 -0
  22. data/test/simple_refund_test.rb +48 -0
  23. data/test/simple_reversal_test.rb +48 -0
  24. data/test/simple_void_test.rb +48 -0
  25. data/test/terminal_charge_test.rb +51 -0
  26. data/test/terminal_clear_test.rb +39 -0
  27. data/test/terminal_ebt_balance_test.rb +41 -0
  28. data/test/terminal_ebt_charge_test.rb +53 -0
  29. data/test/terminal_enroll_test.rb +50 -0
  30. data/test/terminal_gift_card_balance_test.rb +40 -0
  31. data/test/terminal_keyed_charge_test.rb +52 -0
  32. data/test/terminal_manual_ebt_charge_test.rb +54 -0
  33. data/test/terminal_preauth_test.rb +51 -0
  34. data/test/terminal_status_test.rb +39 -0
  35. data/test/terminal_timeout_test.rb +39 -0
  36. data/test/terms_and_conditions_test.rb +44 -0
  37. data/test/test_helper.rb +65 -0
  38. data/test/text_prompt_test.rb +41 -0
  39. data/test/update_transaction_display_test.rb +78 -0
  40. metadata +81 -0
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'date'
5
+
6
+ module BlockChyp
7
+ # crypto and encoding utilities
8
+ class CryptoUtils
9
+ def self.generate_nonce
10
+ bin2hex(SecureRandom.bytes(32))
11
+ end
12
+
13
+ def self.timestamp
14
+ Time.now.utc.to_datetime.rfc3339
15
+ end
16
+
17
+ def self.bin2hex(val)
18
+ val.each_byte.map { |b| b.to_s(16) }.join
19
+ end
20
+
21
+ def self.hex2bin(val)
22
+ val.scan(/../).map { |x| x.hex.chr }.join
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class BooleanPromptTest < TestCase
13
+ def test_boolean_prompt
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'boolean_prompt_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['test'] = true
29
+ request['terminalName'] = 'Test Terminal'
30
+ request['prompt'] = 'Would you like to become a member?'
31
+ request['yesCaption'] = 'Yes'
32
+ request['noCaption'] = 'No'
33
+
34
+ response = blockchyp.boolean_prompt(request)
35
+
36
+ assert_not_nil(response)
37
+ # response assertions
38
+ assert(response['success'])
39
+ assert(response['response'])
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class CaptureSignatureTest < TestCase
13
+ def test_capture_signature
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'capture_signature_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['terminalName'] = 'Test Terminal'
29
+ request['sigFormat'] = SignatureFormat::PNG
30
+ request['sigWidth'] = 200
31
+
32
+ response = blockchyp.capture_signature(request)
33
+
34
+ assert_not_nil(response)
35
+ # response assertions
36
+ assert(response['success'])
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class GatewayTimeoutTest < TestCase
13
+ def test_gateway_timeout
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'gateway_timeout_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['timeout'] = 1
29
+ request['pan'] = '5555555555554444'
30
+ request['amount'] = '25.55'
31
+ request['test'] = true
32
+ request['transactionRef'] = uuid
33
+
34
+ assert_raise Net::ReadTimeout do
35
+ blockchyp.charge(request)
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require ::File.expand_path('test_helper', __dir__)
4
+
5
+ module BlockChyp
6
+ class HeartbeatTest < TestCase
7
+ def test_heartbeat
8
+ config = load_test_config
9
+
10
+ blockchyp = BlockChyp.new(
11
+ config['apiKey'],
12
+ config['bearerToken'],
13
+ config['signingKey']
14
+ )
15
+ blockchyp.gateway_host = config['gatewayHost']
16
+ blockchyp.test_gateway_host = config['testGatewayHost']
17
+
18
+ response = blockchyp.heartbeat(true)
19
+ assert_not_nil(response)
20
+ assert(response['success'])
21
+ assert(!response['timestamp'].empty?)
22
+ assert(!response['clockchain'].empty?)
23
+ assert(!response['latestTick'].empty?)
24
+ assert(!response['merchantPk'].empty?)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class NewTransactionDisplayTest < TestCase
13
+ def test_new_transaction_display
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'new_transaction_display_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['test'] = true
29
+ request['terminalName'] = 'Test Terminal'
30
+ request['transaction'] = new_transaction_display_transaction
31
+
32
+ response = blockchyp.new_transaction_display(request)
33
+
34
+ assert_not_nil(response)
35
+ # response assertions
36
+ assert(response['success'])
37
+ end
38
+
39
+ def new_transaction_display_transaction
40
+ val = {}
41
+ val['subtotal'] = '35.00'
42
+ val['tax'] = '5.00'
43
+ val['total'] = '70.00'
44
+ val['items'] = new_transaction_display_items
45
+ val
46
+ end
47
+
48
+ def new_transaction_display_items
49
+ val = []
50
+ val.push(new_transaction_display_item_2)
51
+ val
52
+ end
53
+
54
+ def new_transaction_display_item_2
55
+ val = {}
56
+ val['description'] = 'Leki Trekking Poles'
57
+ val['price'] = '35.00'
58
+ val['quantity'] = 2
59
+ val['extended'] = '70.00'
60
+ val['discounts'] = new_transaction_display_discounts
61
+ val
62
+ end
63
+
64
+ def new_transaction_display_discounts
65
+ val = []
66
+ val.push(new_transaction_display_discount_2)
67
+ val
68
+ end
69
+
70
+ def new_transaction_display_discount_2
71
+ val = {}
72
+ val['description'] = 'memberDiscount'
73
+ val['amount'] = '10.00'
74
+ val
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class PANChargeTest < TestCase
13
+ def test_pan_charge
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'pan_charge_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['pan'] = '4111111111111111'
29
+ request['amount'] = '25.55'
30
+ request['test'] = true
31
+ request['transactionRef'] = uuid
32
+
33
+ response = blockchyp.charge(request)
34
+
35
+ assert_not_nil(response)
36
+ # response assertions
37
+ assert(response['success'])
38
+ assert(response['approved'])
39
+ assert(response['test'])
40
+ assert_equal(response['authCode'].length, 6)
41
+ assert(!response['transactionId'].empty?)
42
+ assert(!response['timestamp'].empty?)
43
+ assert(!response['tickBlock'].empty?)
44
+ assert_equal('Approved', response['responseDescription'])
45
+ assert(!response['paymentType'].empty?)
46
+ assert(!response['maskedPan'].empty?)
47
+ assert(!response['entryMethod'].empty?)
48
+ assert_equal('25.55', response['authorizedAmount'])
49
+ assert_equal('KEYED', response['entryMethod'])
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class PANEnrollTest < TestCase
13
+ def test_pan_enroll
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'pan_enroll_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['pan'] = '4111111111111111'
29
+ request['test'] = true
30
+
31
+ response = blockchyp.enroll(request)
32
+
33
+ assert_not_nil(response)
34
+ # response assertions
35
+ assert(response['success'])
36
+ assert(response['approved'])
37
+ assert(response['test'])
38
+ assert_equal(response['authCode'].length, 6)
39
+ assert(!response['transactionId'].empty?)
40
+ assert(!response['timestamp'].empty?)
41
+ assert(!response['tickBlock'].empty?)
42
+ assert_equal('Approved', response['responseDescription'])
43
+ assert(!response['paymentType'].empty?)
44
+ assert(!response['maskedPan'].empty?)
45
+ assert(!response['entryMethod'].empty?)
46
+ assert_equal('KEYED', response['entryMethod'])
47
+ assert(!response['token'].empty?)
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class PANPreauthTest < TestCase
13
+ def test_pan_preauth
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'pan_preauth_test')
25
+
26
+ # setup request object
27
+ request = {}
28
+ request['pan'] = '4111111111111111'
29
+ request['amount'] = '25.55'
30
+ request['test'] = true
31
+
32
+ response = blockchyp.preauth(request)
33
+
34
+ assert_not_nil(response)
35
+ # response assertions
36
+ assert(response['success'])
37
+ assert(response['approved'])
38
+ assert(response['test'])
39
+ assert_equal(response['authCode'].length, 6)
40
+ assert(!response['transactionId'].empty?)
41
+ assert(!response['timestamp'].empty?)
42
+ assert(!response['tickBlock'].empty?)
43
+ assert_equal('Approved', response['responseDescription'])
44
+ assert(!response['paymentType'].empty?)
45
+ assert(!response['maskedPan'].empty?)
46
+ assert(!response['entryMethod'].empty?)
47
+ assert_equal('25.55', response['authorizedAmount'])
48
+ assert_equal('KEYED', response['entryMethod'])
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 BlockChyp, Inc. All rights reserved. Use of this code is
4
+ # governed by a license that can be found in the LICENSE file.
5
+ #
6
+ # This file was generated automatically. Changes to this file will be lost
7
+ # every time the code is regenerated.
8
+
9
+ require ::File.expand_path('test_helper', __dir__)
10
+
11
+ module BlockChyp
12
+ class SimpleBatchCloseTest < TestCase
13
+ def test_simple_batch_close
14
+ config = load_test_config
15
+
16
+ blockchyp = BlockChyp.new(
17
+ config['apiKey'],
18
+ config['bearerToken'],
19
+ config['signingKey']
20
+ )
21
+ blockchyp.gateway_host = config['gatewayHost']
22
+ blockchyp.test_gateway_host = config['testGatewayHost']
23
+
24
+ test_delay(blockchyp, 'simple_batch_close_test')
25
+ # setup request object
26
+ request = {}
27
+ request['pan'] = '4111111111111111'
28
+ request['amount'] = '25.55'
29
+ request['test'] = true
30
+ request['transactionRef'] = uuid
31
+ response = blockchyp.charge(request)
32
+
33
+
34
+ # setup request object
35
+ request = {}
36
+ request['test'] = true
37
+
38
+ response = blockchyp.close_batch(request)
39
+
40
+ assert_not_nil(response)
41
+ # response assertions
42
+ assert(response['success'])
43
+ assert(!response['capturedTotal'].empty?)
44
+ assert(!response['openPreauths'].empty?)
45
+ end
46
+
47
+ end
48
+ end