webpay_rails 1.0.3 → 1.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 (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