webpay_rails 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -2
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +14 -0
  5. data/Gemfile +2 -0
  6. data/README.md +32 -7
  7. data/config.ru +7 -0
  8. data/lib/webpay_rails.rb +5 -0
  9. data/lib/webpay_rails/base.rb +107 -32
  10. data/lib/webpay_rails/errors.rb +46 -8
  11. data/lib/webpay_rails/soap.rb +28 -51
  12. data/lib/webpay_rails/soap_normal.rb +52 -0
  13. data/lib/webpay_rails/soap_nullify.rb +32 -0
  14. data/lib/webpay_rails/transaction.rb +4 -11
  15. data/lib/webpay_rails/transaction_base.rb +11 -0
  16. data/lib/webpay_rails/transaction_nullified.rb +18 -0
  17. data/lib/webpay_rails/transaction_result.rb +5 -13
  18. data/lib/webpay_rails/vault.rb +36 -0
  19. data/lib/webpay_rails/version.rb +1 -1
  20. data/spec/internal/app/controllers/orders_controller.rb +107 -0
  21. data/spec/internal/app/models/concerns/universally_unique_identifiable.rb +15 -0
  22. data/spec/internal/app/models/order.rb +17 -0
  23. data/spec/internal/app/models/order_blank.rb +4 -0
  24. data/spec/internal/app/models/order_invalid.rb +14 -0
  25. data/spec/internal/app/views/orders/failed.html.erb +1 -0
  26. data/spec/internal/app/views/orders/gateway.html.erb +8 -0
  27. data/spec/internal/app/views/orders/new.html.erb +6 -0
  28. data/spec/internal/app/views/orders/success.html.erb +18 -0
  29. data/spec/internal/config/database.yml +3 -0
  30. data/spec/internal/config/routes.rb +10 -0
  31. data/spec/internal/db/schema.rb +22 -0
  32. data/spec/internal/public/favicon.ico +0 -0
  33. data/spec/internal/vendor/vault/597020000541.crt +22 -0
  34. data/spec/internal/vendor/vault/597020000541.key +27 -0
  35. data/spec/internal/vendor/vault/tbk.pem +17 -0
  36. data/spec/spec_helper.rb +31 -4
  37. data/spec/vault_helper.rb +67 -0
  38. data/spec/webpay_rails_spec.rb +296 -185
  39. data/webpay_rails.gemspec +18 -12
  40. metadata +162 -6
@@ -0,0 +1,22 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table(:orders, force: true) do |t|
3
+ t.string :uuid
4
+ t.string :tbk_token_ws, index: true
5
+ t.string :tbk_accounting_date
6
+ t.string :tbk_buy_order
7
+ t.string :tbk_card_number
8
+ t.string :tbk_commerce_code
9
+ t.string :tbk_authorization_code
10
+ t.string :tbk_payment_type_code
11
+ t.string :tbk_response_code
12
+ t.string :tbk_transaction_date
13
+ t.string :tbk_vci
14
+ t.string :tbk_session_id
15
+ t.string :tbk_card_expiration_date
16
+ t.string :tbk_shares_number
17
+ t.integer :amount
18
+ t.integer :status, default: 0
19
+
20
+ t.timestamps
21
+ end
22
+ end
File without changes
@@ -0,0 +1,22 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC
3
+ Q0wxETAPBgNVBAgMCFNhbnRpYWdvMRIwEAYDVQQKDAlUcmFuc2JhbmsxETAPBgNV
4
+ BAcMCFNhbnRpYWdvMRUwEwYDVQQDDAw1OTcwMjAwMDA1NDExFzAVBgNVBAsMDkNh
5
+ bmFsZXNSZW1vdG9zMSUwIwYJKoZIhvcNAQkBFhZpbnRlZ3JhZG9yZXNAdmFyaW9z
6
+ LmNsMB4XDTE2MDYyMjIxMDkyN1oXDTI0MDYyMDIxMDkyN1owgZ4xCzAJBgNVBAYT
7
+ AkNMMREwDwYDVQQIDAhTYW50aWFnbzESMBAGA1UECgwJVHJhbnNiYW5rMREwDwYD
8
+ VQQHDAhTYW50aWFnbzEVMBMGA1UEAwwMNTk3MDIwMDAwNTQxMRcwFQYDVQQLDA5D
9
+ YW5hbGVzUmVtb3RvczElMCMGCSqGSIb3DQEJARYWaW50ZWdyYWRvcmVzQHZhcmlv
10
+ cy5jbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANApVXB/EQtbviqQ
11
+ j1J82EiHJslyPO0RLAZEM2gNUCXuMPwe4OirylfQ2qn5zYTL3ff8qZhn9EQ0D4ZQ
12
+ Wxpc8pis9cYdJUAQ/vTGa4PCbvP3dZNKSG9UC0A54UYEdk9eJ4F6T+DyECrauw7H
13
+ RwcmxVOb7wClanR7yJmRc6nsW2Y11scYU/v7BnA+FbOu933Ogfl49lKyhe0MleaT
14
+ A6tBwgi0zJmn1gJjax8peopkDPm6gtdoJxBABJKyYkjuj/9tZvYgybOSkGp6SW8t
15
+ GhlvJqHGERwzB2Y7U4iD9PiQCYC/SrB/q13ZNm0+2nq3u08ziv2xMIZGBF5zDLf+
16
+ ub1egH8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAdgNpIS2NZFx5PoYwJZf8faze
17
+ NmKQg73seDGuP8d8w/CZf1Py/gsJFNbh4CEySWZRCzlOKxzmtPTmyPdyhObjMA8E
18
+ Adps9DtgiN2ITSF1HUFmhMjI5V7U2L9LyEdpUaieYyPBfxiicdWz2YULVuOYDJHR
19
+ n05jlj/EjYa5bLKs/yggYiqMkZdIX8NiLL6ZTERIvBa6azDKs6yDsCsnE1M5tzQI
20
+ VVEkZtEfil6E1tz8v3yLZapLt+8jmPq1RCSx3Zh4fUkxBTpUW/9SWUNEXbKK7bB3
21
+ zfB3kGE55K5nxHKfQlrqdHLcIo+vdShATwYnmhUkGxUnM9qoCDlB8lYu3rFi9w==
22
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEA0ClVcH8RC1u+KpCPUnzYSIcmyXI87REsBkQzaA1QJe4w/B7g
3
+ 6KvKV9DaqfnNhMvd9/ypmGf0RDQPhlBbGlzymKz1xh0lQBD+9MZrg8Ju8/d1k0pI
4
+ b1QLQDnhRgR2T14ngXpP4PIQKtq7DsdHBybFU5vvAKVqdHvImZFzqexbZjXWxxhT
5
+ +/sGcD4Vs673fc6B+Xj2UrKF7QyV5pMDq0HCCLTMmafWAmNrHyl6imQM+bqC12gn
6
+ EEAEkrJiSO6P/21m9iDJs5KQanpJby0aGW8mocYRHDMHZjtTiIP0+JAJgL9KsH+r
7
+ Xdk2bT7aere7TzOK/bEwhkYEXnMMt/65vV6AfwIDAQABAoIBAHnIlOn6DTi99eXl
8
+ KVSzIb5dA747jZWMxFruL70ifM+UKSh30FGPoBP8ZtGnCiw1ManSMk6uEuSMKMEF
9
+ 5iboVi4okqnTh2WSC/ec1m4BpPQqxKjlfrdTTjnHIxrZpXYNucMwkeci93569ZFR
10
+ 2SY/8pZV1mBkZoG7ocLmq+qwE1EaBEL/sXMvuF/h08nJ71I4zcclpB8kN0yFrBCW
11
+ 7scqOwTLiob2mmU2bFHOyyjTkGOlEsBQxhtVwVEt/0AFH/ucmMTP0vrKOA0HkhxM
12
+ oeR4k2z0qwTzZKXuEZtsau8a/9B3S3YcgoSOhRP/VdY1WL5hWDHeK8q1Nfq2eETX
13
+ jnQ4zjECgYEA7z2/biWe9nDyYDZM7SfHy1xF5Q3ocmv14NhTbt8iDlz2LsZ2JcPn
14
+ EMV++m88F3PYdFUOp4Zuw+eLJSrBqfuPYrTVNH0v/HdTqTS70R2YZCFb9g0ryaHV
15
+ TRwYovu/oQMV4LBSzrwdtCrcfUZDtqMYmmZfEkdjCWCEpEi36nlG0JMCgYEA3r49
16
+ o+soFIpDqLMei1tF+Ah/rm8oY5f4Wc82kmSgoPFCWnQEIW36i/GRaoQYsBp4loue
17
+ vyPuW+BzoZpVcJDuBmHY3UOLKr4ZldOn2KIj6sCQZ1mNKo5WuZ4YFeL5uyp9Hvio
18
+ TCPGeXghG0uIk4emSwolJVSbKSRi6SPsiANff+UCgYEAvNMRmlAbLQtsYb+565xw
19
+ NvO3PthBVL4dLL/Q6js21/tLWxPNAHWklDosxGCzHxeSCg9wJ40VM4425rjebdld
20
+ DF0Jwgnkq/FKmMxESQKA2tbxjDxNCTGv9tJsJ4dnch/LTrIcSYt0LlV9/WpN24LS
21
+ 0lpmQzkQ07/YMQosDuZ1m/0CgYEAu9oHlEHTmJcO/qypmu/ML6XDQPKARpY5Hkzy
22
+ gj4ZdgJianSjsynUfsepUwK663I3twdjR2JfON8vxd+qJPgltf45bknziYWvgDtz
23
+ t/Duh6IFZxQQSQ6oN30MZRD6eo4X3dHp5eTaE0Fr8mAefAWQCoMw1q3m+ai1PlhM
24
+ uFzX4r0CgYEArx4TAq+Z4crVCdABBzAZ7GvvAXdxvBo0AhD9IddSWVTCza972wta
25
+ 5J2rrS/ye9Tfu5j2IbTHaLDz14mwMXr1S4L39UX/NifLc93KHie/yjycCuu4uqNo
26
+ MtdweTnQt73lN2cnYedRUhw9UTfPzYu7jdXCUAyAD4IEjFQrswk2x04=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDKTCCAhECBFZl7uIwDQYJKoZIhvcNAQEFBQAwWTELMAkGA1UEBhMCQ0wxDjAMBgNVBAgMBUNo
3
+ aWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANrZHUxCzAJBgNV
4
+ BAMMAjEwMB4XDTE1MTIwNzIwNDEwNloXDTE4MDkwMjIwNDEwNlowWTELMAkGA1UEBhMCQ0wxDjAM
5
+ BgNVBAgMBUNoaWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANr
6
+ ZHUxCzAJBgNVBAMMAjEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAizJUWTDC7nfP
7
+ 3jmZpWXFdG9oKyBrU0Bdl6fKif9a1GrwevThsU5Dq3wiRfYvomStNjFDYFXOs9pRIxqX2AWDybjA
8
+ X/+bdDTVbM+xXllA9stJY8s7hxAvwwO7IEuOmYDpmLKP7J+4KkNH7yxsKZyLL9trG3iSjV6Y6SO5
9
+ EEhUsdxoJFAow/h7qizJW0kOaWRcljf7kpqJAL3AadIuqV+hlf+Ts/64aMsfSJJA6xdbdp9ddgVF
10
+ oqUl1M8vpmd4glxlSrYmEkbYwdI9uF2d6bAeaneBPJFZr6KQqlbbrVyeJZqmMlEPy0qPco1TIxrd
11
+ EHlXgIFJLyyMRAyjX9i4l70xjwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBn3tUPS6e2USgMrPKp
12
+ sxU4OTfW64+mfD6QrVeBOh81f6aGHa67sMJn8FE/cG6jrUmX/FP1/Cpbpvkm5UUlFKpgaFfHv+Kg
13
+ CpEvgcRIv/OeIi6Jbuu3NrPdGPwzYkzlOQnmgio5RGb6GSs+OQ0mUWZ9J1+YtdZc+xTga0x7nsCT
14
+ 5xNcUXsZKhyjoKhXtxJm3eyB3ysLNyuL/RHy/EyNEWiUhvt1SIePnW+Y4/cjQWYwNqSqMzTSW9TP
15
+ 2QR2bX/W2H6ktRcLsgBK9mq7lE36p3q6c9DtZJE+xfA4NGCYWM9hd8pbusnoNO7AFxJZOuuvLZI7
16
+ JvD7YLhPvCYKry7N6x3l
17
+ -----END CERTIFICATE-----
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,36 @@
1
- require 'bundler/setup'
2
- Bundler.setup
1
+ require 'bundler'
2
+
3
+ Bundler.require :default, :development
4
+
5
+ require 'capybara/rspec'
6
+
7
+ Combustion.initialize! :active_record, :action_controller, :action_view
8
+
9
+ require 'rspec/rails'
10
+ require 'capybara/rails'
11
+
12
+ if ENV['CAPYBARA_DRIVER'].try(:to_sym) == :poltergeist
13
+ require 'capybara/poltergeist'
14
+ Capybara.default_driver = :poltergeist
15
+ else
16
+ Capybara.register_driver :selenium do |app|
17
+ Capybara::Selenium::Driver.new(
18
+ app,
19
+ browser: :firefox,
20
+ desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)
21
+ )
22
+ end
23
+
24
+ Capybara.default_driver = :selenium
25
+ end
26
+ Capybara.default_max_wait_time = 10
27
+
28
+ require 'coveralls'
29
+
30
+ Coveralls.wear!
3
31
 
4
- require 'active_record'
5
32
  require 'webpay_rails'
6
33
 
7
34
  RSpec.configure do |config|
8
- # some (optional) config here
35
+ config.use_transactional_fixtures = true
9
36
  end
@@ -0,0 +1,67 @@
1
+ COMMERCE_CODE = 597020000541
2
+ PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----
3
+ MIIEpQIBAAKCAQEA0ClVcH8RC1u+KpCPUnzYSIcmyXI87REsBkQzaA1QJe4w/B7g
4
+ 6KvKV9DaqfnNhMvd9/ypmGf0RDQPhlBbGlzymKz1xh0lQBD+9MZrg8Ju8/d1k0pI
5
+ b1QLQDnhRgR2T14ngXpP4PIQKtq7DsdHBybFU5vvAKVqdHvImZFzqexbZjXWxxhT
6
+ +/sGcD4Vs673fc6B+Xj2UrKF7QyV5pMDq0HCCLTMmafWAmNrHyl6imQM+bqC12gn
7
+ EEAEkrJiSO6P/21m9iDJs5KQanpJby0aGW8mocYRHDMHZjtTiIP0+JAJgL9KsH+r
8
+ Xdk2bT7aere7TzOK/bEwhkYEXnMMt/65vV6AfwIDAQABAoIBAHnIlOn6DTi99eXl
9
+ KVSzIb5dA747jZWMxFruL70ifM+UKSh30FGPoBP8ZtGnCiw1ManSMk6uEuSMKMEF
10
+ 5iboVi4okqnTh2WSC/ec1m4BpPQqxKjlfrdTTjnHIxrZpXYNucMwkeci93569ZFR
11
+ 2SY/8pZV1mBkZoG7ocLmq+qwE1EaBEL/sXMvuF/h08nJ71I4zcclpB8kN0yFrBCW
12
+ 7scqOwTLiob2mmU2bFHOyyjTkGOlEsBQxhtVwVEt/0AFH/ucmMTP0vrKOA0HkhxM
13
+ oeR4k2z0qwTzZKXuEZtsau8a/9B3S3YcgoSOhRP/VdY1WL5hWDHeK8q1Nfq2eETX
14
+ jnQ4zjECgYEA7z2/biWe9nDyYDZM7SfHy1xF5Q3ocmv14NhTbt8iDlz2LsZ2JcPn
15
+ EMV++m88F3PYdFUOp4Zuw+eLJSrBqfuPYrTVNH0v/HdTqTS70R2YZCFb9g0ryaHV
16
+ TRwYovu/oQMV4LBSzrwdtCrcfUZDtqMYmmZfEkdjCWCEpEi36nlG0JMCgYEA3r49
17
+ o+soFIpDqLMei1tF+Ah/rm8oY5f4Wc82kmSgoPFCWnQEIW36i/GRaoQYsBp4loue
18
+ vyPuW+BzoZpVcJDuBmHY3UOLKr4ZldOn2KIj6sCQZ1mNKo5WuZ4YFeL5uyp9Hvio
19
+ TCPGeXghG0uIk4emSwolJVSbKSRi6SPsiANff+UCgYEAvNMRmlAbLQtsYb+565xw
20
+ NvO3PthBVL4dLL/Q6js21/tLWxPNAHWklDosxGCzHxeSCg9wJ40VM4425rjebdld
21
+ DF0Jwgnkq/FKmMxESQKA2tbxjDxNCTGv9tJsJ4dnch/LTrIcSYt0LlV9/WpN24LS
22
+ 0lpmQzkQ07/YMQosDuZ1m/0CgYEAu9oHlEHTmJcO/qypmu/ML6XDQPKARpY5Hkzy
23
+ gj4ZdgJianSjsynUfsepUwK663I3twdjR2JfON8vxd+qJPgltf45bknziYWvgDtz
24
+ t/Duh6IFZxQQSQ6oN30MZRD6eo4X3dHp5eTaE0Fr8mAefAWQCoMw1q3m+ai1PlhM
25
+ uFzX4r0CgYEArx4TAq+Z4crVCdABBzAZ7GvvAXdxvBo0AhD9IddSWVTCza972wta
26
+ 5J2rrS/ye9Tfu5j2IbTHaLDz14mwMXr1S4L39UX/NifLc93KHie/yjycCuu4uqNo
27
+ MtdweTnQt73lN2cnYedRUhw9UTfPzYu7jdXCUAyAD4IEjFQrswk2x04=
28
+ -----END RSA PRIVATE KEY-----'.freeze
29
+ PUBLIC_CERT = '-----BEGIN CERTIFICATE-----
30
+ MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC
31
+ Q0wxETAPBgNVBAgMCFNhbnRpYWdvMRIwEAYDVQQKDAlUcmFuc2JhbmsxETAPBgNV
32
+ BAcMCFNhbnRpYWdvMRUwEwYDVQQDDAw1OTcwMjAwMDA1NDExFzAVBgNVBAsMDkNh
33
+ bmFsZXNSZW1vdG9zMSUwIwYJKoZIhvcNAQkBFhZpbnRlZ3JhZG9yZXNAdmFyaW9z
34
+ LmNsMB4XDTE2MDYyMjIxMDkyN1oXDTI0MDYyMDIxMDkyN1owgZ4xCzAJBgNVBAYT
35
+ AkNMMREwDwYDVQQIDAhTYW50aWFnbzESMBAGA1UECgwJVHJhbnNiYW5rMREwDwYD
36
+ VQQHDAhTYW50aWFnbzEVMBMGA1UEAwwMNTk3MDIwMDAwNTQxMRcwFQYDVQQLDA5D
37
+ YW5hbGVzUmVtb3RvczElMCMGCSqGSIb3DQEJARYWaW50ZWdyYWRvcmVzQHZhcmlv
38
+ cy5jbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANApVXB/EQtbviqQ
39
+ j1J82EiHJslyPO0RLAZEM2gNUCXuMPwe4OirylfQ2qn5zYTL3ff8qZhn9EQ0D4ZQ
40
+ Wxpc8pis9cYdJUAQ/vTGa4PCbvP3dZNKSG9UC0A54UYEdk9eJ4F6T+DyECrauw7H
41
+ RwcmxVOb7wClanR7yJmRc6nsW2Y11scYU/v7BnA+FbOu933Ogfl49lKyhe0MleaT
42
+ A6tBwgi0zJmn1gJjax8peopkDPm6gtdoJxBABJKyYkjuj/9tZvYgybOSkGp6SW8t
43
+ GhlvJqHGERwzB2Y7U4iD9PiQCYC/SrB/q13ZNm0+2nq3u08ziv2xMIZGBF5zDLf+
44
+ ub1egH8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAdgNpIS2NZFx5PoYwJZf8faze
45
+ NmKQg73seDGuP8d8w/CZf1Py/gsJFNbh4CEySWZRCzlOKxzmtPTmyPdyhObjMA8E
46
+ Adps9DtgiN2ITSF1HUFmhMjI5V7U2L9LyEdpUaieYyPBfxiicdWz2YULVuOYDJHR
47
+ n05jlj/EjYa5bLKs/yggYiqMkZdIX8NiLL6ZTERIvBa6azDKs6yDsCsnE1M5tzQI
48
+ VVEkZtEfil6E1tz8v3yLZapLt+8jmPq1RCSx3Zh4fUkxBTpUW/9SWUNEXbKK7bB3
49
+ zfB3kGE55K5nxHKfQlrqdHLcIo+vdShATwYnmhUkGxUnM9qoCDlB8lYu3rFi9w==
50
+ -----END CERTIFICATE-----'.freeze
51
+ WEBPAY_CERT = '-----BEGIN CERTIFICATE-----
52
+ MIIDKTCCAhECBFZl7uIwDQYJKoZIhvcNAQEFBQAwWTELMAkGA1UEBhMCQ0wxDjAMBgNVBAgMBUNo
53
+ aWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANrZHUxCzAJBgNV
54
+ BAMMAjEwMB4XDTE1MTIwNzIwNDEwNloXDTE4MDkwMjIwNDEwNlowWTELMAkGA1UEBhMCQ0wxDjAM
55
+ BgNVBAgMBUNoaWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANr
56
+ ZHUxCzAJBgNVBAMMAjEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAizJUWTDC7nfP
57
+ 3jmZpWXFdG9oKyBrU0Bdl6fKif9a1GrwevThsU5Dq3wiRfYvomStNjFDYFXOs9pRIxqX2AWDybjA
58
+ X/+bdDTVbM+xXllA9stJY8s7hxAvwwO7IEuOmYDpmLKP7J+4KkNH7yxsKZyLL9trG3iSjV6Y6SO5
59
+ EEhUsdxoJFAow/h7qizJW0kOaWRcljf7kpqJAL3AadIuqV+hlf+Ts/64aMsfSJJA6xdbdp9ddgVF
60
+ oqUl1M8vpmd4glxlSrYmEkbYwdI9uF2d6bAeaneBPJFZr6KQqlbbrVyeJZqmMlEPy0qPco1TIxrd
61
+ EHlXgIFJLyyMRAyjX9i4l70xjwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBn3tUPS6e2USgMrPKp
62
+ sxU4OTfW64+mfD6QrVeBOh81f6aGHa67sMJn8FE/cG6jrUmX/FP1/Cpbpvkm5UUlFKpgaFfHv+Kg
63
+ CpEvgcRIv/OeIi6Jbuu3NrPdGPwzYkzlOQnmgio5RGb6GSs+OQ0mUWZ9J1+YtdZc+xTga0x7nsCT
64
+ 5xNcUXsZKhyjoKhXtxJm3eyB3ysLNyuL/RHy/EyNEWiUhvt1SIePnW+Y4/cjQWYwNqSqMzTSW9TP
65
+ 2QR2bX/W2H6ktRcLsgBK9mq7lE36p3q6c9DtZJE+xfA4NGCYWM9hd8pbusnoNO7AFxJZOuuvLZI7
66
+ JvD7YLhPvCYKry7N6x3l
67
+ -----END CERTIFICATE-----'.freeze
@@ -1,206 +1,317 @@
1
1
  require 'spec_helper'
2
+ require 'vault_helper'
2
3
 
3
- silence_warnings do
4
- ActiveRecord::Migration.verbose = false
5
- ActiveRecord::Base.logger = Logger.new(nil)
6
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
7
- end
4
+ describe WebpayRails do
5
+ before(:all) { @amount = 1000 }
6
+ before(:all) { @buy_order = SecureRandom.uuid.first(30).delete!('-') }
7
+ before(:all) { @session_id = 'aj2h4kj2' }
8
+ before(:all) { @return_url = 'http://localhost:3000/tbknormal?option=return' }
9
+ before(:all) { @final_url = 'http://localhost:3000/tbknormal?option=final' }
10
+ before(:all) { @init_transaction_params = { amount: @amount,
11
+ buy_order: @buy_order,
12
+ session_id: @session_id,
13
+ return_url: @return_url,
14
+ final_url: @final_url } }
15
+ before(:all) { @webpay_rails_params = { commerce_code: COMMERCE_CODE,
16
+ private_key: PRIVATE_KEY,
17
+ webpay_cert: WEBPAY_CERT,
18
+ public_cert: PUBLIC_CERT } }
8
19
 
9
- ActiveRecord::Base.connection.instance_eval do
10
- create_table :orders
11
- end
20
+ describe WebpayRails::Base do
21
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.except(:commerce_code)) }.to raise_error(WebpayRails::MissingCommerceCode) }
22
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.except(:private_key)) }.to raise_error(WebpayRails::MissingPrivateKey) }
23
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.except(:webpay_cert)) }.to raise_error(WebpayRails::MissingWebpayCertificate) }
24
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.except(:public_cert)) }.to raise_error(WebpayRails::MissingPublicCertificate) }
25
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.merge(private_key: '', public_cert: '', webpay_cert: '')) }.to raise_error(WebpayRails::FileNotFound) }
26
+ it { expect{ OrderBlank.webpay_rails(@webpay_rails_params.merge(environment: :other)) }.to raise_error(WebpayRails::InvalidEnvironment) }
27
+ end
12
28
 
13
- class Order < ActiveRecord::Base
14
- extend WebpayRails
15
-
16
- webpay_rails({
17
- commerce_code: 597020000541,
18
- private_key: '-----BEGIN RSA PRIVATE KEY-----
19
- MIIEpQIBAAKCAQEA0ClVcH8RC1u+KpCPUnzYSIcmyXI87REsBkQzaA1QJe4w/B7g
20
- 6KvKV9DaqfnNhMvd9/ypmGf0RDQPhlBbGlzymKz1xh0lQBD+9MZrg8Ju8/d1k0pI
21
- b1QLQDnhRgR2T14ngXpP4PIQKtq7DsdHBybFU5vvAKVqdHvImZFzqexbZjXWxxhT
22
- +/sGcD4Vs673fc6B+Xj2UrKF7QyV5pMDq0HCCLTMmafWAmNrHyl6imQM+bqC12gn
23
- EEAEkrJiSO6P/21m9iDJs5KQanpJby0aGW8mocYRHDMHZjtTiIP0+JAJgL9KsH+r
24
- Xdk2bT7aere7TzOK/bEwhkYEXnMMt/65vV6AfwIDAQABAoIBAHnIlOn6DTi99eXl
25
- KVSzIb5dA747jZWMxFruL70ifM+UKSh30FGPoBP8ZtGnCiw1ManSMk6uEuSMKMEF
26
- 5iboVi4okqnTh2WSC/ec1m4BpPQqxKjlfrdTTjnHIxrZpXYNucMwkeci93569ZFR
27
- 2SY/8pZV1mBkZoG7ocLmq+qwE1EaBEL/sXMvuF/h08nJ71I4zcclpB8kN0yFrBCW
28
- 7scqOwTLiob2mmU2bFHOyyjTkGOlEsBQxhtVwVEt/0AFH/ucmMTP0vrKOA0HkhxM
29
- oeR4k2z0qwTzZKXuEZtsau8a/9B3S3YcgoSOhRP/VdY1WL5hWDHeK8q1Nfq2eETX
30
- jnQ4zjECgYEA7z2/biWe9nDyYDZM7SfHy1xF5Q3ocmv14NhTbt8iDlz2LsZ2JcPn
31
- EMV++m88F3PYdFUOp4Zuw+eLJSrBqfuPYrTVNH0v/HdTqTS70R2YZCFb9g0ryaHV
32
- TRwYovu/oQMV4LBSzrwdtCrcfUZDtqMYmmZfEkdjCWCEpEi36nlG0JMCgYEA3r49
33
- o+soFIpDqLMei1tF+Ah/rm8oY5f4Wc82kmSgoPFCWnQEIW36i/GRaoQYsBp4loue
34
- vyPuW+BzoZpVcJDuBmHY3UOLKr4ZldOn2KIj6sCQZ1mNKo5WuZ4YFeL5uyp9Hvio
35
- TCPGeXghG0uIk4emSwolJVSbKSRi6SPsiANff+UCgYEAvNMRmlAbLQtsYb+565xw
36
- NvO3PthBVL4dLL/Q6js21/tLWxPNAHWklDosxGCzHxeSCg9wJ40VM4425rjebdld
37
- DF0Jwgnkq/FKmMxESQKA2tbxjDxNCTGv9tJsJ4dnch/LTrIcSYt0LlV9/WpN24LS
38
- 0lpmQzkQ07/YMQosDuZ1m/0CgYEAu9oHlEHTmJcO/qypmu/ML6XDQPKARpY5Hkzy
39
- gj4ZdgJianSjsynUfsepUwK663I3twdjR2JfON8vxd+qJPgltf45bknziYWvgDtz
40
- t/Duh6IFZxQQSQ6oN30MZRD6eo4X3dHp5eTaE0Fr8mAefAWQCoMw1q3m+ai1PlhM
41
- uFzX4r0CgYEArx4TAq+Z4crVCdABBzAZ7GvvAXdxvBo0AhD9IddSWVTCza972wta
42
- 5J2rrS/ye9Tfu5j2IbTHaLDz14mwMXr1S4L39UX/NifLc93KHie/yjycCuu4uqNo
43
- MtdweTnQt73lN2cnYedRUhw9UTfPzYu7jdXCUAyAD4IEjFQrswk2x04=
44
- -----END RSA PRIVATE KEY-----',
45
- public_cert: '-----BEGIN CERTIFICATE-----
46
- MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC
47
- Q0wxETAPBgNVBAgMCFNhbnRpYWdvMRIwEAYDVQQKDAlUcmFuc2JhbmsxETAPBgNV
48
- BAcMCFNhbnRpYWdvMRUwEwYDVQQDDAw1OTcwMjAwMDA1NDExFzAVBgNVBAsMDkNh
49
- bmFsZXNSZW1vdG9zMSUwIwYJKoZIhvcNAQkBFhZpbnRlZ3JhZG9yZXNAdmFyaW9z
50
- LmNsMB4XDTE2MDYyMjIxMDkyN1oXDTI0MDYyMDIxMDkyN1owgZ4xCzAJBgNVBAYT
51
- AkNMMREwDwYDVQQIDAhTYW50aWFnbzESMBAGA1UECgwJVHJhbnNiYW5rMREwDwYD
52
- VQQHDAhTYW50aWFnbzEVMBMGA1UEAwwMNTk3MDIwMDAwNTQxMRcwFQYDVQQLDA5D
53
- YW5hbGVzUmVtb3RvczElMCMGCSqGSIb3DQEJARYWaW50ZWdyYWRvcmVzQHZhcmlv
54
- cy5jbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANApVXB/EQtbviqQ
55
- j1J82EiHJslyPO0RLAZEM2gNUCXuMPwe4OirylfQ2qn5zYTL3ff8qZhn9EQ0D4ZQ
56
- Wxpc8pis9cYdJUAQ/vTGa4PCbvP3dZNKSG9UC0A54UYEdk9eJ4F6T+DyECrauw7H
57
- RwcmxVOb7wClanR7yJmRc6nsW2Y11scYU/v7BnA+FbOu933Ogfl49lKyhe0MleaT
58
- A6tBwgi0zJmn1gJjax8peopkDPm6gtdoJxBABJKyYkjuj/9tZvYgybOSkGp6SW8t
59
- GhlvJqHGERwzB2Y7U4iD9PiQCYC/SrB/q13ZNm0+2nq3u08ziv2xMIZGBF5zDLf+
60
- ub1egH8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAdgNpIS2NZFx5PoYwJZf8faze
61
- NmKQg73seDGuP8d8w/CZf1Py/gsJFNbh4CEySWZRCzlOKxzmtPTmyPdyhObjMA8E
62
- Adps9DtgiN2ITSF1HUFmhMjI5V7U2L9LyEdpUaieYyPBfxiicdWz2YULVuOYDJHR
63
- n05jlj/EjYa5bLKs/yggYiqMkZdIX8NiLL6ZTERIvBa6azDKs6yDsCsnE1M5tzQI
64
- VVEkZtEfil6E1tz8v3yLZapLt+8jmPq1RCSx3Zh4fUkxBTpUW/9SWUNEXbKK7bB3
65
- zfB3kGE55K5nxHKfQlrqdHLcIo+vdShATwYnmhUkGxUnM9qoCDlB8lYu3rFi9w==
66
- -----END CERTIFICATE-----',
67
- webpay_cert: '-----BEGIN CERTIFICATE-----
68
- MIIDKTCCAhECBFZl7uIwDQYJKoZIhvcNAQEFBQAwWTELMAkGA1UEBhMCQ0wxDjAMBgNVBAgMBUNo
69
- aWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANrZHUxCzAJBgNV
70
- BAMMAjEwMB4XDTE1MTIwNzIwNDEwNloXDTE4MDkwMjIwNDEwNlowWTELMAkGA1UEBhMCQ0wxDjAM
71
- BgNVBAgMBUNoaWxlMREwDwYDVQQHDAhTYW50aWFnbzEMMAoGA1UECgwDa2R1MQwwCgYDVQQLDANr
72
- ZHUxCzAJBgNVBAMMAjEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAizJUWTDC7nfP
73
- 3jmZpWXFdG9oKyBrU0Bdl6fKif9a1GrwevThsU5Dq3wiRfYvomStNjFDYFXOs9pRIxqX2AWDybjA
74
- X/+bdDTVbM+xXllA9stJY8s7hxAvwwO7IEuOmYDpmLKP7J+4KkNH7yxsKZyLL9trG3iSjV6Y6SO5
75
- EEhUsdxoJFAow/h7qizJW0kOaWRcljf7kpqJAL3AadIuqV+hlf+Ts/64aMsfSJJA6xdbdp9ddgVF
76
- oqUl1M8vpmd4glxlSrYmEkbYwdI9uF2d6bAeaneBPJFZr6KQqlbbrVyeJZqmMlEPy0qPco1TIxrd
77
- EHlXgIFJLyyMRAyjX9i4l70xjwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBn3tUPS6e2USgMrPKp
78
- sxU4OTfW64+mfD6QrVeBOh81f6aGHa67sMJn8FE/cG6jrUmX/FP1/Cpbpvkm5UUlFKpgaFfHv+Kg
79
- CpEvgcRIv/OeIi6Jbuu3NrPdGPwzYkzlOQnmgio5RGb6GSs+OQ0mUWZ9J1+YtdZc+xTga0x7nsCT
80
- 5xNcUXsZKhyjoKhXtxJm3eyB3ysLNyuL/RHy/EyNEWiUhvt1SIePnW+Y4/cjQWYwNqSqMzTSW9TP
81
- 2QR2bX/W2H6ktRcLsgBK9mq7lE36p3q6c9DtZJE+xfA4NGCYWM9hd8pbusnoNO7AFxJZOuuvLZI7
82
- JvD7YLhPvCYKry7N6x3l
83
- -----END CERTIFICATE-----',
84
- environment: :integration,
85
- log: false
86
- })
87
- end
29
+ describe WebpayRails::Transaction do
30
+ context 'when all is ok' do
31
+ before(:all) { @transaction = Order.init_transaction(@init_transaction_params) }
88
32
 
89
- class OrderWithInvalidWebpayCertificate < ActiveRecord::Base
90
- extend WebpayRails
91
-
92
- webpay_rails({
93
- commerce_code: 597020000541,
94
- private_key: '-----BEGIN RSA PRIVATE KEY-----
95
- MIIEpQIBAAKCAQEA0ClVcH8RC1u+KpCPUnzYSIcmyXI87REsBkQzaA1QJe4w/B7g
96
- 6KvKV9DaqfnNhMvd9/ypmGf0RDQPhlBbGlzymKz1xh0lQBD+9MZrg8Ju8/d1k0pI
97
- b1QLQDnhRgR2T14ngXpP4PIQKtq7DsdHBybFU5vvAKVqdHvImZFzqexbZjXWxxhT
98
- +/sGcD4Vs673fc6B+Xj2UrKF7QyV5pMDq0HCCLTMmafWAmNrHyl6imQM+bqC12gn
99
- EEAEkrJiSO6P/21m9iDJs5KQanpJby0aGW8mocYRHDMHZjtTiIP0+JAJgL9KsH+r
100
- Xdk2bT7aere7TzOK/bEwhkYEXnMMt/65vV6AfwIDAQABAoIBAHnIlOn6DTi99eXl
101
- KVSzIb5dA747jZWMxFruL70ifM+UKSh30FGPoBP8ZtGnCiw1ManSMk6uEuSMKMEF
102
- 5iboVi4okqnTh2WSC/ec1m4BpPQqxKjlfrdTTjnHIxrZpXYNucMwkeci93569ZFR
103
- 2SY/8pZV1mBkZoG7ocLmq+qwE1EaBEL/sXMvuF/h08nJ71I4zcclpB8kN0yFrBCW
104
- 7scqOwTLiob2mmU2bFHOyyjTkGOlEsBQxhtVwVEt/0AFH/ucmMTP0vrKOA0HkhxM
105
- oeR4k2z0qwTzZKXuEZtsau8a/9B3S3YcgoSOhRP/VdY1WL5hWDHeK8q1Nfq2eETX
106
- jnQ4zjECgYEA7z2/biWe9nDyYDZM7SfHy1xF5Q3ocmv14NhTbt8iDlz2LsZ2JcPn
107
- EMV++m88F3PYdFUOp4Zuw+eLJSrBqfuPYrTVNH0v/HdTqTS70R2YZCFb9g0ryaHV
108
- TRwYovu/oQMV4LBSzrwdtCrcfUZDtqMYmmZfEkdjCWCEpEi36nlG0JMCgYEA3r49
109
- o+soFIpDqLMei1tF+Ah/rm8oY5f4Wc82kmSgoPFCWnQEIW36i/GRaoQYsBp4loue
110
- vyPuW+BzoZpVcJDuBmHY3UOLKr4ZldOn2KIj6sCQZ1mNKo5WuZ4YFeL5uyp9Hvio
111
- TCPGeXghG0uIk4emSwolJVSbKSRi6SPsiANff+UCgYEAvNMRmlAbLQtsYb+565xw
112
- NvO3PthBVL4dLL/Q6js21/tLWxPNAHWklDosxGCzHxeSCg9wJ40VM4425rjebdld
113
- DF0Jwgnkq/FKmMxESQKA2tbxjDxNCTGv9tJsJ4dnch/LTrIcSYt0LlV9/WpN24LS
114
- 0lpmQzkQ07/YMQosDuZ1m/0CgYEAu9oHlEHTmJcO/qypmu/ML6XDQPKARpY5Hkzy
115
- gj4ZdgJianSjsynUfsepUwK663I3twdjR2JfON8vxd+qJPgltf45bknziYWvgDtz
116
- t/Duh6IFZxQQSQ6oN30MZRD6eo4X3dHp5eTaE0Fr8mAefAWQCoMw1q3m+ai1PlhM
117
- uFzX4r0CgYEArx4TAq+Z4crVCdABBzAZ7GvvAXdxvBo0AhD9IddSWVTCza972wta
118
- 5J2rrS/ye9Tfu5j2IbTHaLDz14mwMXr1S4L39UX/NifLc93KHie/yjycCuu4uqNo
119
- MtdweTnQt73lN2cnYedRUhw9UTfPzYu7jdXCUAyAD4IEjFQrswk2x04=
120
- -----END RSA PRIVATE KEY-----',
121
- public_cert: '-----BEGIN CERTIFICATE-----
122
- MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC
123
- Q0wxETAPBgNVBAgMCFNhbnRpYWdvMRIwEAYDVQQKDAlUcmFuc2JhbmsxETAPBgNV
124
- BAcMCFNhbnRpYWdvMRUwEwYDVQQDDAw1OTcwMjAwMDA1NDExFzAVBgNVBAsMDkNh
125
- bmFsZXNSZW1vdG9zMSUwIwYJKoZIhvcNAQkBFhZpbnRlZ3JhZG9yZXNAdmFyaW9z
126
- LmNsMB4XDTE2MDYyMjIxMDkyN1oXDTI0MDYyMDIxMDkyN1owgZ4xCzAJBgNVBAYT
127
- AkNMMREwDwYDVQQIDAhTYW50aWFnbzESMBAGA1UECgwJVHJhbnNiYW5rMREwDwYD
128
- VQQHDAhTYW50aWFnbzEVMBMGA1UEAwwMNTk3MDIwMDAwNTQxMRcwFQYDVQQLDA5D
129
- YW5hbGVzUmVtb3RvczElMCMGCSqGSIb3DQEJARYWaW50ZWdyYWRvcmVzQHZhcmlv
130
- cy5jbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANApVXB/EQtbviqQ
131
- j1J82EiHJslyPO0RLAZEM2gNUCXuMPwe4OirylfQ2qn5zYTL3ff8qZhn9EQ0D4ZQ
132
- Wxpc8pis9cYdJUAQ/vTGa4PCbvP3dZNKSG9UC0A54UYEdk9eJ4F6T+DyECrauw7H
133
- RwcmxVOb7wClanR7yJmRc6nsW2Y11scYU/v7BnA+FbOu933Ogfl49lKyhe0MleaT
134
- A6tBwgi0zJmn1gJjax8peopkDPm6gtdoJxBABJKyYkjuj/9tZvYgybOSkGp6SW8t
135
- GhlvJqHGERwzB2Y7U4iD9PiQCYC/SrB/q13ZNm0+2nq3u08ziv2xMIZGBF5zDLf+
136
- ub1egH8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAdgNpIS2NZFx5PoYwJZf8faze
137
- NmKQg73seDGuP8d8w/CZf1Py/gsJFNbh4CEySWZRCzlOKxzmtPTmyPdyhObjMA8E
138
- Adps9DtgiN2ITSF1HUFmhMjI5V7U2L9LyEdpUaieYyPBfxiicdWz2YULVuOYDJHR
139
- n05jlj/EjYa5bLKs/yggYiqMkZdIX8NiLL6ZTERIvBa6azDKs6yDsCsnE1M5tzQI
140
- VVEkZtEfil6E1tz8v3yLZapLt+8jmPq1RCSx3Zh4fUkxBTpUW/9SWUNEXbKK7bB3
141
- zfB3kGE55K5nxHKfQlrqdHLcIo+vdShATwYnmhUkGxUnM9qoCDlB8lYu3rFi9w==
142
- -----END CERTIFICATE-----',
143
- webpay_cert: '-----BEGIN CERTIFICATE-----
144
- MIIDujCCAqICCQCZ42cY33KRTzANBgkqhkiG9w0BAQsFADCBnjELMAkGA1UEBhMC
145
- Q0wxETAPBgNVBAgMCFNhbnRpYWdvMRIwEAYDVQQKDAlUcmFuc2JhbmsxETAPBgNV
146
- BAcMCFNhbnRpYWdvMRUwEwYDVQQDDAw1OTcwMjAwMDA1NDExFzAVBgNVBAsMDkNh
147
- bmFsZXNSZW1vdG9zMSUwIwYJKoZIhvcNAQkBFhZpbnRlZ3JhZG9yZXNAdmFyaW9z
148
- LmNsMB4XDTE2MDYyMjIxMDkyN1oXDTI0MDYyMDIxMDkyN1owgZ4xCzAJBgNVBAYT
149
- AkNMMREwDwYDVQQIDAhTYW50aWFnbzESMBAGA1UECgwJVHJhbnNiYW5rMREwDwYD
150
- VQQHDAhTYW50aWFnbzEVMBMGA1UEAwwMNTk3MDIwMDAwNTQxMRcwFQYDVQQLDA5D
151
- YW5hbGVzUmVtb3RvczElMCMGCSqGSIb3DQEJARYWaW50ZWdyYWRvcmVzQHZhcmlv
152
- cy5jbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANApVXB/EQtbviqQ
153
- j1J82EiHJslyPO0RLAZEM2gNUCXuMPwe4OirylfQ2qn5zYTL3ff8qZhn9EQ0D4ZQ
154
- Wxpc8pis9cYdJUAQ/vTGa4PCbvP3dZNKSG9UC0A54UYEdk9eJ4F6T+DyECrauw7H
155
- RwcmxVOb7wClanR7yJmRc6nsW2Y11scYU/v7BnA+FbOu933Ogfl49lKyhe0MleaT
156
- A6tBwgi0zJmn1gJjax8peopkDPm6gtdoJxBABJKyYkjuj/9tZvYgybOSkGp6SW8t
157
- GhlvJqHGERwzB2Y7U4iD9PiQCYC/SrB/q13ZNm0+2nq3u08ziv2xMIZGBF5zDLf+
158
- ub1egH8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAdgNpIS2NZFx5PoYwJZf8faze
159
- NmKQg73seDGuP8d8w/CZf1Py/gsJFNbh4CEySWZRCzlOKxzmtPTmyPdyhObjMA8E
160
- Adps9DtgiN2ITSF1HUFmhMjI5V7U2L9LyEdpUaieYyPBfxiicdWz2YULVuOYDJHR
161
- n05jlj/EjYa5bLKs/yggYiqMkZdIX8NiLL6ZTERIvBa6azDKs6yDsCsnE1M5tzQI
162
- VVEkZtEfil6E1tz8v3yLZapLt+8jmPq1RCSx3Zh4fUkxBTpUW/9SWUNEXbKK7bB3
163
- zfB3kGE55K5nxHKfQlrqdHLcIo+vdShATwYnmhUkGxUnM9qoCDlB8lYu3rFi9w==
164
- -----END CERTIFICATE-----',
165
- environment: :integration,
166
- log: false
167
- })
168
- end
33
+ it { expect(@transaction).to be_kind_of(WebpayRails::Transaction) }
169
34
 
170
- describe WebpayRails do
171
- let(:amount) { 1000 }
172
- let(:buy_order) { rand(1111111..9999999) }
173
- let(:session_id) { 'aj2h4kj2' }
174
- let(:return_url) { 'http://localhost:3000/tbknormal?option=return' }
175
- let(:final_url) { 'http://localhost:3000/tbknormal?option=final' }
35
+ describe '.token' do
36
+ it { expect(@transaction.token).not_to be_blank }
37
+ end
176
38
 
177
- describe WebpayRails::Transaction do
178
- describe "when all is ok" do
179
- let(:transaction) { Order.init_transaction(amount, buy_order, session_id, return_url, final_url) }
39
+ describe '.url' do
40
+ it { expect(@transaction.url).not_to be_blank }
41
+ end
180
42
 
181
- it { expect(transaction).to be_kind_of(WebpayRails::Transaction) }
43
+ describe '.success?' do
44
+ it { expect(@transaction.success?).to be_truthy }
45
+ end
46
+ end
47
+
48
+ context 'when not' do
49
+ it { expect { Order.init_transaction(@init_transaction_params.merge(return_url: '', final_url: '')) }.to raise_error(WebpayRails::RequestFailed) }
50
+ it { expect { Order.init_transaction(@init_transaction_params.merge(amount: 0)) }.to raise_error(WebpayRails::RequestFailed) }
51
+ it { expect { OrderInvalid.init_transaction(@init_transaction_params) }.to raise_error(WebpayRails::InvalidCertificate) }
52
+ end
53
+ end
54
+
55
+ describe WebpayRails::TransactionResult do
56
+ context 'when all is ok' do
57
+ describe '.buy_order' do
58
+ pending 'should not be blank'
59
+ end
60
+
61
+ describe '.session_id' do
62
+ # pending 'should not be blank' NOTE: In fact it can
63
+ end
64
+
65
+ describe '.accounting_date' do
66
+ pending 'should not be blank'
67
+ end
68
+
69
+ describe '.transaction_date' do
70
+ pending 'should not be blank'
71
+ end
182
72
 
183
- describe ".token" do
184
- it { expect(transaction.token).not_to be_blank }
73
+ describe '.vci' do
74
+ pending 'should not be blank'
185
75
  end
186
76
 
187
- describe ".url" do
188
- it { expect(transaction.url).not_to be_blank }
77
+ describe '.url_redirection' do
78
+ pending 'should not be blank'
189
79
  end
190
80
 
191
- describe ".success?" do
192
- it { expect(transaction.success?).to be_truthy }
81
+ describe '.card_number' do
82
+ pending 'should not be blank'
83
+ end
84
+
85
+ describe '.card_expiration_date' do
86
+ # pending 'should not be blank' NOTE: In fact Webpay returns blank
87
+ end
88
+
89
+ describe '.authorization_code' do
90
+ pending 'should not be blank'
91
+ end
92
+
93
+ describe '.payment_type_code' do
94
+ pending 'should not be blank'
95
+ end
96
+
97
+ describe '.response_code' do
98
+ pending 'should not be blank'
99
+ end
100
+
101
+ describe '.amount' do
102
+ pending 'should not be blank'
103
+ end
104
+
105
+ describe '.shares_number' do
106
+ pending 'should not be blank'
107
+ end
108
+
109
+ describe '.commerce_code' do
110
+ pending 'should not be blank'
111
+ end
112
+
113
+ describe '.approved?' do
114
+ pending 'should be truthy'
193
115
  end
194
116
  end
195
117
 
196
- describe "when not" do
197
- it { expect{Order.init_transaction(amount, buy_order, session_id, '', '')}.to raise_error(WebpayRails::FailedInitTransaction) }
198
- it { expect{Order.init_transaction(0, buy_order, session_id, return_url, final_url)}.to raise_error(WebpayRails::FailedInitTransaction) }
199
- it { expect{OrderWithInvalidWebpayCertificate.init_transaction(amount, buy_order, session_id, return_url, final_url)}.to raise_error(WebpayRails::InvalidCertificate) }
118
+ context 'when not' do
119
+ it { expect { Order.init_transaction(token: 'asd') }.to raise_error(WebpayRails::RequestFailed) }
120
+ pending 'should raise WebpayRails::InvalidCertificate'
200
121
  end
201
122
  end
202
123
 
203
- describe WebpayRails::TransactionResult do
204
- pending "comming soon"
124
+ describe 'Normal debit payment flow' do
125
+ before(:each) { visit '/' }
126
+
127
+ context 'when it accepted' do
128
+ it 'it is sent to the success page' do
129
+ # Rails app
130
+ fill_in(id: 'order_amount', with: '1000')
131
+ find('input[type=submit]').click
132
+
133
+ # Webpay
134
+ find('input#TBK_TIPO_TARJETA[value=DEBIT_CARD]').set(true)
135
+ select('TEST COMMERCE BANK', from: 'TBK_BANCO')
136
+ fill_in('TBK_NUMERO_TARJETA', with: '12345678')
137
+ click_button('button')
138
+
139
+ # Demo Bank
140
+ within_frame('transicion') do
141
+ fill_in('rutClient', with: '111111111')
142
+ fill_in('passwordClient', with: '123')
143
+ find('input[type=submit]').click
144
+ # It is not necessary because it is already selected by default
145
+ # select('Aceptar', from: 'vci')
146
+ find('input[type=submit]').click
147
+ end
148
+
149
+ # Webpay
150
+ accept_alert if page.driver.options[:browser] == :firefox
151
+ click_button('button4')
152
+ accept_alert if page.driver.options[:browser] == :firefox
153
+
154
+ # Rails app
155
+ expect(page).to have_content('Success transaction')
156
+ end
157
+ end
158
+
159
+ context 'when it rejected' do
160
+ it 'it is sent to the failure page' do
161
+ # Rails app
162
+ fill_in(id: 'order_amount', with: '1000')
163
+ find('input[type=submit]').click
164
+
165
+ # Webpay
166
+ find('input#TBK_TIPO_TARJETA[value=DEBIT_CARD]').set(true)
167
+ select('TEST COMMERCE BANK', from: 'TBK_BANCO')
168
+ fill_in('TBK_NUMERO_TARJETA', with: '12345678')
169
+ click_button('button')
170
+
171
+ # Demo Bank
172
+ within_frame('transicion') do
173
+ fill_in('rutClient', with: '111111111')
174
+ fill_in('passwordClient', with: '123')
175
+ find('input[type=submit]').click
176
+
177
+ select('Rechazar', from: 'vci')
178
+ find('input[type=submit]').click
179
+ end
180
+
181
+ # Webpay
182
+ accept_alert if page.driver.options[:browser] == :firefox
183
+
184
+ # Rails app
185
+ expect(page).to have_content('Failed transaction')
186
+ end
187
+ end
188
+
189
+ context 'when click on the "Anular" button' do
190
+ it 'it is sent to the failure page' do
191
+ # Rails app
192
+ fill_in(id: 'order_amount', with: '1000')
193
+ find('input[type=submit]').click
194
+
195
+ # Webpay
196
+ click_button('button3')
197
+ accept_alert if page.driver.options[:browser] == :firefox
198
+
199
+ # Rails app
200
+ expect(page).to have_content('Failed transaction')
201
+ end
202
+ end
203
+ end
204
+
205
+ describe 'Normal credit (without shares) payment flow' do
206
+ before(:each) { visit '/' }
207
+
208
+ context 'when it accepted' do
209
+ it 'it is sent to the success page' do
210
+ # Rails app
211
+ fill_in(id: 'order_amount', with: '1000')
212
+ find('input[type=submit]').click
213
+
214
+ # Webpay
215
+ find('input#TBK_TIPO_TARJETA[value=CREDIT_CARD]').set(true)
216
+ fill_in('TBK_NUMERO_TARJETA', with: '4051885600446623')
217
+ fill_in('TBK_CVV', with: '123')
218
+ shares_radio = find('input#TBK_TIPO_PAGO597020000541_noshares')
219
+ expect(shares_radio).to be_checked
220
+ click_button('button')
221
+
222
+ # Demo Bank
223
+ within_frame('transicion') do
224
+ fill_in('rutClient', with: '111111111')
225
+ fill_in('passwordClient', with: '123')
226
+ find('input[type=submit]').click
227
+ # It is not necessary because it is already selected by default
228
+ # select('Aceptar', from: 'vci')
229
+ find('input[type=submit]').click
230
+ end
231
+
232
+ # Webpay
233
+ accept_alert if page.driver.options[:browser] == :firefox
234
+ click_button('button4')
235
+ accept_alert if page.driver.options[:browser] == :firefox
236
+
237
+ # Rails app
238
+ expect(page).to have_content('Success transaction')
239
+ end
240
+ end
241
+
242
+ context 'when it rejected' do
243
+ it 'it is sent to the failure page' do
244
+ # Rails app
245
+ fill_in(id: 'order_amount', with: '1000')
246
+ find('input[type=submit]').click
247
+
248
+ # Webpay
249
+ find('input#TBK_TIPO_TARJETA[value=CREDIT_CARD]').set(true)
250
+ fill_in('TBK_NUMERO_TARJETA', with: '4051885600446623')
251
+ fill_in('TBK_CVV', with: '123')
252
+ shares_radio = find('input#TBK_TIPO_PAGO597020000541_noshares')
253
+ expect(shares_radio).to be_checked
254
+ click_button('button')
255
+
256
+ # Demo Bank
257
+ within_frame('transicion') do
258
+ fill_in('rutClient', with: '111111111')
259
+ fill_in('passwordClient', with: '123')
260
+ find('input[type=submit]').click
261
+
262
+ select('Rechazar', from: 'vci')
263
+ find('input[type=submit]').click
264
+ end
265
+
266
+ # Webpay
267
+ accept_alert if page.driver.options[:browser] == :firefox
268
+
269
+ # Rails app
270
+ expect(page).to have_content('Failed transaction')
271
+ end
272
+ end
273
+ end
274
+
275
+ describe WebpayRails::TransactionNullified do
276
+ before(:all) { @approved_order = Order.normal_selling.approved.first! }
277
+ before(:all) do
278
+ @nullify_params = {
279
+ authorization_code: @approved_order.tbk_authorization_code,
280
+ authorized_amount: @approved_order.amount,
281
+ buy_order: @approved_order.tbk_buy_order,
282
+ nullify_amount: @approved_order.amount
283
+ }
284
+ end
285
+
286
+ context 'when all is ok' do
287
+ before(:all) { @nullified_transaction = Order.nullify(@nullify_params) }
288
+
289
+ it { expect(@nullified_transaction).to be_kind_of(WebpayRails::TransactionNullified) }
290
+
291
+ describe '.token' do
292
+ it { expect(@nullified_transaction.token).not_to be_blank }
293
+ end
294
+
295
+ describe '.authorization_code' do
296
+ it { expect(@nullified_transaction.authorization_code).not_to be_blank }
297
+ end
298
+
299
+ describe '.authorization_date' do
300
+ it { expect(@nullified_transaction.authorization_date).not_to be_blank }
301
+ end
302
+
303
+ describe '.balance' do
304
+ it { expect(@nullified_transaction.balance).not_to be_blank }
305
+ end
306
+
307
+ describe '.nullified_amount' do
308
+ it { expect(@nullified_transaction.nullified_amount).not_to be_blank }
309
+ end
310
+ end
311
+
312
+ context 'when not' do
313
+ it { expect { Order.nullify(@nullify_params.merge(nullify_amount: 0)) }.to raise_error(WebpayRails::RequestFailed) }
314
+ pending 'should raise WebpayRails::InvalidCertificate'
315
+ end
205
316
  end
206
317
  end