conekta 0.3.3 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +5 -11
  3. data/CHANGELOG +5 -0
  4. data/Gemfile +6 -1
  5. data/LICENSE.txt +22 -0
  6. data/README.md +59 -0
  7. data/Rakefile +1 -14
  8. data/conekta.gemspec +22 -22
  9. data/lib/conekta.rb +36 -290
  10. data/lib/conekta/card.rb +10 -34
  11. data/lib/conekta/charge.rb +14 -38
  12. data/lib/conekta/conekta_object.rb +64 -136
  13. data/lib/conekta/customer.rb +23 -25
  14. data/lib/conekta/error.rb +65 -0
  15. data/lib/conekta/event.rb +2 -2
  16. data/lib/conekta/operations/create.rb +19 -0
  17. data/lib/conekta/operations/create_member.rb +30 -0
  18. data/lib/conekta/operations/custom_action.rb +17 -0
  19. data/lib/conekta/operations/delete.rb +43 -0
  20. data/lib/conekta/operations/find.rb +28 -0
  21. data/lib/conekta/operations/update.rb +13 -0
  22. data/lib/conekta/operations/where.rb +28 -0
  23. data/lib/conekta/payment_method.rb +4 -0
  24. data/lib/conekta/plan.rb +8 -5
  25. data/lib/conekta/requestor.rb +55 -0
  26. data/lib/conekta/resource.rb +13 -0
  27. data/lib/conekta/subscription.rb +12 -26
  28. data/lib/conekta/token.rb +3 -2
  29. data/lib/conekta/util.rb +19 -91
  30. data/lib/conekta/version.rb +1 -1
  31. data/lib/ssl_data/ca_bundle.crt +66 -0
  32. data/spec/conekta_spec.rb +299 -808
  33. data/spec/spec_helper.rb +12 -0
  34. metadata +55 -72
  35. data/CONTRIBUTORS +0 -9
  36. data/Gemfile.lock +0 -57
  37. data/History.txt +0 -4
  38. data/LICENSE +0 -23
  39. data/README.rdoc +0 -30
  40. data/VERSION +0 -1
  41. data/bin/conekta-console +0 -7
  42. data/bin/test calls +0 -205
  43. data/gemfiles/default-with-activesupport.gemfile +0 -3
  44. data/gemfiles/json.gemfile +0 -4
  45. data/gemfiles/yajl.gemfile +0 -4
  46. data/lib/conekta/account.rb +0 -4
  47. data/lib/conekta/api_operations/create.rb +0 -16
  48. data/lib/conekta/api_operations/create_member.rb +0 -18
  49. data/lib/conekta/api_operations/delete.rb +0 -11
  50. data/lib/conekta/api_operations/list.rb +0 -16
  51. data/lib/conekta/api_operations/modify_member.rb +0 -12
  52. data/lib/conekta/api_operations/update.rb +0 -22
  53. data/lib/conekta/api_resource.rb +0 -33
  54. data/lib/conekta/errors/api_connection_error.rb +0 -4
  55. data/lib/conekta/errors/api_error.rb +0 -4
  56. data/lib/conekta/errors/authentication_error.rb +0 -4
  57. data/lib/conekta/errors/card_error.rb +0 -11
  58. data/lib/conekta/errors/conekta_error.rb +0 -20
  59. data/lib/conekta/errors/malformed_request_error.rb +0 -10
  60. data/lib/conekta/errors/parameter_validation_error.rb +0 -10
  61. data/lib/conekta/errors/resource_not_found_error.rb +0 -10
  62. data/lib/conekta/json.rb +0 -21
  63. data/lib/conekta/list_object.rb +0 -35
  64. data/lib/conekta/log.rb +0 -5
  65. data/lib/conekta/singleton_api_resource.rb +0 -20
  66. data/lib/data/ca-certificates.crt +0 -3918
  67. data/spec/conekta_with_active_support_spec.rb +0 -3
  68. data/spec/test_helper.rb +0 -338
@@ -1,3 +1,3 @@
1
1
  module Conekta
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.5'
3
3
  end
@@ -0,0 +1,66 @@
1
+ #Bundled Digicerts
2
+ DigiCert Assured ID Root CA
3
+ ===========================
4
+ -----BEGIN CERTIFICATE-----
5
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
6
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
7
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
8
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
9
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
10
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
11
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
12
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
13
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
14
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
15
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
16
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
17
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
18
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
19
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
20
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
21
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
22
+ -----END CERTIFICATE-----
23
+
24
+ DigiCert Global Root CA
25
+ =======================
26
+ -----BEGIN CERTIFICATE-----
27
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
28
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
29
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
30
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
31
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
32
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
33
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
34
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
35
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
36
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
37
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
38
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
39
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
40
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
41
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
42
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
43
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
44
+ -----END CERTIFICATE-----
45
+
46
+ DigiCert High Assurance EV Root CA
47
+ ==================================
48
+ -----BEGIN CERTIFICATE-----
49
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
50
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
51
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
52
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
53
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
54
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
55
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
56
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
57
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
58
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
59
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
60
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
61
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
62
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
63
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
64
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
65
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
66
+ -----END CERTIFICATE-----
data/spec/conekta_spec.rb CHANGED
@@ -1,841 +1,332 @@
1
- # -*- coding: utf-8 -*-
2
- require File.expand_path('../test_helper', __FILE__)
3
- #require 'test/unit'
4
- #require 'shoulda'
5
- require 'rspec'
6
- require 'mocha/setup'
7
- require 'pp'
8
- require 'rest-client'
9
- require 'cgi'
10
- require 'uri'
11
-
12
- class ConektaTest < Test::Unit::TestCase
13
- include Mocha
14
-
15
- describe Conekta::Util, "#symbolize_names" do
16
- it "symbolize_names should convert names to symbols" do
17
- start = {
18
- 'foo' => 'bar',
19
- 'array' => [{ 'foo' => 'bar' }],
20
- 'nested' => {
21
- 1 => 2,
22
- :symbol => 9,
23
- 'string' => nil
24
- }
25
- }
26
- finish = {
27
- :foo => 'bar',
28
- :array => [{ :foo => 'bar' }],
29
- :nested => {
30
- 1 => 2,
31
- :symbol => 9,
32
- :string => nil
33
- }
34
- }
35
-
36
- symbolized = Conekta::Util.symbolize_names(start)
37
- finish.should eq(symbolized)
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ describe :conekta_tests do
3
+ Conekta.api_key = '1tv5yJp3xnVZ7eK67m4h'
4
+ describe :charge_tests do
5
+ p "charge tests"
6
+ before :each do
7
+ @valid_payment_method = {amount: 2000, currency: 'mxn', description: 'Some desc'}
8
+ @invalid_payment_method = {amount: 10, currency: 'mxn', description: 'Some desc'}
9
+ @valid_visa_card = {card: 'tok_test_visa_4242'}
10
+ end
11
+ it "succesful get charge" do
12
+ pm = @valid_payment_method
13
+ card = @valid_visa_card
14
+ cpm = Conekta::Charge.create(pm.merge(card))
15
+ cpm.status.should eq("paid")
16
+ pm = Conekta::Charge.find(cpm.id)
17
+ pm.class.class_name.should eq("Charge")
18
+ end
19
+ it "test succesful where" do
20
+ charges = Conekta::Charge.where
21
+ charges.class.class_name.should eq("ConektaObject")
22
+ charges[0].class.class_name.should eq("Charge")
23
+ end
24
+ it "tests succesful bank pm create" do
25
+ pm = @valid_payment_method
26
+ bank = {bank: {'type' => 'banorte'}}
27
+ bpm = Conekta::Charge.create(pm.merge(bank))
28
+ bpm.status.should eq("pending_payment")
29
+ end
30
+ it "tests succesful card pm create" do
31
+ pm = @valid_payment_method
32
+ card = @valid_visa_card
33
+ cpm = Conekta::Charge.create(pm.merge(card))
34
+ cpm.status.should eq("paid")
35
+ end
36
+ it "tests succesful oxxo pm create" do
37
+ pm = @valid_payment_method
38
+ oxxo = {cash: {'type' => 'oxxo'}}
39
+ bpm = Conekta::Charge.create(pm.merge(oxxo))
40
+ bpm.status.should eq("pending_payment")
41
+ end
42
+ it "test unsuccesful pm create" do
43
+ pm = @invalid_payment_method
44
+ card = @valid_visa_card
45
+ begin
46
+ cpm = Conekta::Charge.create(pm.merge(card))
47
+ rescue Conekta::Error => e
48
+ e.message.should eq("The minimum purchase is 3 MXN pesos for card payments")
49
+ end
50
+ end
51
+ it "test susccesful refund" do
52
+ pm = @valid_payment_method
53
+ card = @valid_visa_card
54
+ cpm = Conekta::Charge.create(pm.merge(card))
55
+ cpm.status.should eq("paid")
56
+ cpm.refund
57
+ cpm.status.should eq("refunded")
58
+ end
59
+ it "test unsusccesful refund" do
60
+ pm = @valid_payment_method
61
+ card = @valid_visa_card
62
+ cpm = Conekta::Charge.create(pm.merge(card))
63
+ cpm.status.should eq("paid")
64
+ begin
65
+ cpm.refund(3000)
66
+ rescue Conekta::Error => e
67
+ e.message.should eq("The order does not exist or the amount to refund is invalid")
68
+ end
69
+ end
70
+ it "tests succesful card pm create" do
71
+ pm = @valid_payment_method
72
+ card = @valid_visa_card
73
+ capture = {capture: false}
74
+ cpm = Conekta::Charge.create(pm.merge(card).merge(capture))
75
+ cpm.status.should eq("pre_authorized")
76
+ cpm.capture
77
+ cpm.status.should eq("paid")
38
78
  end
39
79
  end
40
-
41
- describe Conekta::ConektaObject, "#new" do
42
-
43
- it "creating a new APIResource should not fetch over the network" do
44
- @mock = double
45
- Conekta.mock_rest_client = @mock
46
- @mock.expects(:get).never
47
- @mock.expects(:post).never
48
- c = Conekta::Charge.new("someid")
49
- Conekta.mock_rest_client = nil
50
- end
51
-
52
- it "creating a new APIResource from a hash should not fetch over the network" do
53
- @mock = double
54
- Conekta.mock_rest_client = @mock
55
-
56
- @mock.expects(:get).never
57
- @mock.expects(:post).never
58
- c = Conekta::Charge.construct_from({
59
- id: "somecharge",
60
- amount: 10000,
61
- currency: 'MXN',
62
- card: {
63
- number: '4242424242424242',
64
- cvc:'123',
65
- exp_month:12,
66
- exp_year:19,
67
- name:'Sebastian Q.'
68
- }
80
+ describe :customer_tests do
81
+ p "customer tests"
82
+ it "successful customer create" do
83
+ customer = Conekta::Customer.create({
84
+ :cards => ["tok_test_visa_4242"],
69
85
  })
70
-
71
- Conekta.mock_rest_client = nil
72
- end
73
-
74
- it "setting an attribute should not cause a network request" do
75
- @mock = double
76
- Conekta.mock_rest_client = @mock
77
-
78
- @mock.expects(:get).never
79
- @mock.expects(:post).never
80
- c = Conekta::Charge.new("test_charge");
81
- c = Conekta::Charge.construct_from({
82
- id: "somecharge",
83
- amount: 10000,
84
- card: {
85
- number: '4242424242424242',
86
- cvc:'123',
87
- exp_month:12,
88
- exp_year:19,
89
- name:'Sebastian Q.'
90
- }
86
+ customer.class.class_name.should eq("Customer")
87
+ end
88
+ it "successful customer get" do
89
+ c = Conekta::Customer.create({
90
+ :cards => ["tok_test_visa_4242"],
91
91
  })
92
- c.currency = 'MXN'
93
-
94
- Conekta.mock_rest_client = nil
95
- end
96
-
97
- it "accessing id should not issue a fetch" do
98
- @mock = double
99
- Conekta.mock_rest_client = @mock
100
-
101
- @mock.expects(:get).never
102
- c = Conekta::Charge.new("test_charge");
103
- c.id
104
-
105
- Conekta.mock_rest_client = nil
92
+ customer = Conekta::Customer.find(c.id)
93
+ customer.class.class_name.should eq("Customer")
106
94
  end
107
- end
108
-
109
- describe Conekta, "#api_key" do
110
- it "not specifying api credentials should raise an exception" do
111
- Conekta.api_key = nil
112
- expect{Conekta::Charge.new("test_charge").refresh}.to raise_error(Conekta::AuthenticationError)
113
- end
114
-
115
- it "specifying api credentials containing whitespace should raise an exception" do
116
- Conekta.api_key = "key "
117
- expect{Conekta::Charge.new("test_charge").refresh}.to raise_error(Conekta::AuthenticationError)
118
- end
119
-
120
- it "specifying invalid api credentials should raise an exception" do
121
- @mock = double
122
- Conekta.mock_rest_client = @mock
123
-
124
- Conekta.api_key = "invalid"
125
- response = test_response(test_invalid_api_key_error, 401)
126
-
127
- @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 401))
128
- expect{Conekta::Charge.retrieve("failing_charge")}.to raise_error(Conekta::AuthenticationError)
129
-
130
- Conekta.mock_rest_client = nil
131
- end
132
-
133
- it "AuthenticationErrors should have an http status, http body, and JSON body" do
134
- @mock = double
135
- Conekta.mock_rest_client = @mock
136
-
137
- Conekta.api_key = "invalid"
138
- response = test_response(test_invalid_api_key_error, 401)
139
-
140
- begin
141
- @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 401))
142
- Conekta::Charge.retrieve("failing_charge")
143
- rescue Conekta::AuthenticationError => e
144
- 401.should eq(e.http_status)
145
- true.should_not eq(e.http_body)
146
- true.should_not eq(e.json_body[:message])
147
- test_invalid_api_key_error['message'].should eq(e.json_body[:message])
148
- end
149
-
150
- Conekta.mock_rest_client = nil
95
+ it "successful customer where" do
96
+ customers = Conekta::Customer.where
97
+ customers.class.class_name.should eq("ConektaObject")
98
+ customers[0].class.class_name.should eq("Customer")
151
99
  end
152
- end
153
-
154
- describe Conekta::ConektaObject, "#create" do
155
-
156
- it "when specifying per-object credentials with no global API key set, use the per-object credential when creating" do
157
- Conekta.api_key = nil
158
-
159
- Conekta.should_receive(:execute_request){|opts|
160
- opts[:headers][:authorization].should eq("Basic c2tfdGVzdF9sb2NhbDo=\n")
161
- test_response(test_charge)
162
- }
163
-
164
- Conekta::Charge.create({:card => {:number => '4242424242424242'}},
165
- 'sk_test_local')
166
- end
167
-
168
- it "when specifying per-object credentials with global API key set, use the per-object credential when creating" do
169
- Conekta.api_key = "global"
170
-
171
- Conekta.should_receive(:execute_request){|opts|
172
- opts[:headers][:authorization].should eq("Basic c2tfdGVzdF9sb2NhbDo=\n")
173
- test_response(test_charge)
174
- }
175
-
176
- Conekta::Charge.create({:card => {:number => '4242424242424242'}},
177
- 'sk_test_local')
178
- end
179
-
180
- it "when specifying per-object credentials with a global API key set, use the per-object credential when retrieving and making other calls" do
181
- Conekta.api_key = "global"
182
-
183
- Conekta.should_receive(:execute_request){|opts|
184
- opts[:url].should eq("#{Conekta.api_base}/charges/ch_test_charge.json")
185
- opts[:headers][:authorization].should eq("Basic c2tfdGVzdF9sb2NhbDo=\n")
186
- test_response(test_charge)
187
- }
188
- Conekta.should_receive(:execute_request){|opts|
189
- opts[:url].should eq("#{Conekta.api_base}/charges/ch_test_charge/refund.json")
190
- opts[:headers][:authorization].should eq("Basic c2tfdGVzdF9sb2NhbDo=\n")
191
- test_response(test_charge)
192
- }
193
-
194
- ch = Conekta::Charge.retrieve('ch_test_charge', 'sk_test_local')
195
- ch.refund
100
+ it "successful customer delete" do
101
+ customer = Conekta::Customer.create({
102
+ :cards => ["tok_test_visa_4242"],
103
+ })
104
+ customer.delete
105
+ customer.deleted.should eq(true)
196
106
  end
197
- end
198
-
199
- describe Conekta, "#execute_request" do
200
- it "with valid credential, urlencode values in GET params" do
201
- @mock = double
202
- Conekta.mock_rest_client = @mock
203
-
204
- Conekta.api_key = 'foo'
205
- response = test_response(test_charge_array)
206
- @mock.should_receive(:get){|arg1, arg2, arg3|
207
-
208
- arg1.should eq("#{Conekta.api_base}/charges.json?amount=500")
209
- arg2.should eq(nil)
210
- arg3.should eq(nil)
211
- response
212
- }
213
- charges = Conekta::Charge.all(amount: 500).data
214
- charges.should be_kind_of(Array)
215
-
216
- Conekta.mock_rest_client = nil
217
- end
218
-
219
- it "with valid credential, construct URL properly with base query parameters" do
220
- @mock = double
221
- Conekta.mock_rest_client = @mock
222
-
223
- response = test_response(test_charge_array)
224
-
225
- Conekta.api_key = 'foo'
226
- response = test_response(test_charge_array_filtered)
227
- @mock.should_receive(:get){|arg1, arg2, arg3|
228
- arg1.should eq("#{Conekta.api_base}/charges.json?amount=500")
229
- arg2.should eq(nil)
230
- arg3.should eq(nil)
231
- response
232
- }
233
- charges = Conekta::Charge.all(amount: 500)
234
-
235
- response = test_response(test_charge_array_filtered)
236
- @mock.should_receive(:get){|arg1, arg2, arg3|
237
- arg1.should eq("#{Conekta.api_base}/charges.json?amount=500&status=paid")
238
- arg2.should eq(nil)
239
- arg3.should eq(nil)
240
- response
241
- }
242
- charges.all(:status=>'paid')
243
-
244
- Conekta.mock_rest_client = nil
245
- end
246
-
247
- it "with valid credential, a 401 should give an AuthenticationError with http status, body, and JSON body" do
248
- @mock = double
249
- Conekta.mock_rest_client = @mock
250
-
251
- response = test_response(test_missing_id_error, 401)
252
- @mock.should_receive(:get){|args|
253
- raise RestClient::ExceptionWithResponse.new(response, 401)
254
- }.once
255
-
256
- begin
257
- Conekta::Charge.retrieve("foo")
258
- rescue Conekta::AuthenticationError => e
259
- e.http_status.should eq(401)
260
- e.http_body.should_not eq(true)
261
- e.json_body.should be_kind_of(Hash)
262
- end
263
-
264
- Conekta.mock_rest_client = nil
265
- end
266
-
267
- it "with valid credential, a 402 should give an CardError with http status, body, and JSON body" do
268
- @mock = double
269
- Conekta.mock_rest_client = @mock
270
-
271
- response = test_response(test_missing_id_error, 402)
272
- @mock.should_receive(:post){|args|
273
- raise RestClient::ExceptionWithResponse.new(response, 402)
274
- }.once
275
-
107
+ it "successful customer update" do
108
+ customer = Conekta::Customer.create({
109
+ :cards => ["tok_test_visa_4242"],
110
+ })
111
+ customer.update({name: 'Logan', email: 'logan@x-men.org'})
112
+ customer.name.should eq('Logan')
113
+ end
114
+ it "successful customer update" do
276
115
  begin
277
- Conekta::Charge.create({
278
- amount:10000,
279
- description:'Test',
280
- card: {
281
- name:'Leo Fischer',
282
- number:4000000000000119,
283
- cvc:123,
284
- exp_month:8,
285
- exp_year:19
286
- }
116
+ customer = Conekta::Customer.create({
117
+ :cards => ["tok_test_visa_4241"],
287
118
  })
288
-
289
- rescue Conekta::CardError => e
290
- e.http_status.should eq(402)
291
- e.http_body.should_not eq(true)
292
- e.json_body.should be_kind_of(Hash)
119
+ rescue Conekta::Error => e
120
+ e.message.should eq("Token 'tok_test_visa_4241' could not be found.")
293
121
  end
294
-
295
- Conekta.mock_rest_client = nil
296
- end
297
-
298
- it "with valid credential, a 404 should give an ResourceNotFoundError with http status, body, and JSON body" do
299
- @mock = double
300
- Conekta.mock_rest_client = @mock
301
-
302
- response = test_response(test_missing_id_error, 404)
303
- @mock.should_receive(:get){|args|
304
- raise RestClient::ExceptionWithResponse.new(response, 404)
305
- }.once
306
-
122
+ end
123
+ it "add card to customer" do
124
+ customer = Conekta::Customer.create({
125
+ :cards => ["tok_test_visa_4242"],
126
+ })
127
+ card = customer.create_card(:token => 'tok_test_visa_1881')
128
+ customer.cards.count.should eq(2)
129
+ customer.cards.last.last4.should eq('1881')
130
+ end
131
+ it "test delete card" do
132
+ customer = Conekta::Customer.create({
133
+ :cards => ["tok_test_visa_4242"],
134
+ })
135
+ card = customer.cards[0].delete
136
+ card.deleted.should eq(true)
137
+ end
138
+ it "test update card" do
139
+ customer = Conekta::Customer.create({
140
+ :cards => ["tok_test_visa_4242"],
141
+ })
142
+ customer.cards[0].update({token: 'tok_test_mastercard_4444', active: false})
143
+ customer.cards[0].last4.should eq('4444')
144
+ end
145
+ it "test succesful create subscription" do
146
+ customer = Conekta::Customer.create({
147
+ :cards => ["tok_test_visa_4242"],
148
+ })
149
+ subscription = customer.create_subscription({plan: 'gold-plan'})
150
+ subscription.class.class_name.should eq('Subscription')
151
+ end
152
+ it "test succesful update subscription" do
153
+ customer = Conekta::Customer.create({
154
+ :cards => ["tok_test_visa_4242"],
155
+ })
156
+ subscription = customer.create_subscription({plan: 'gold-plan'})
307
157
  begin
308
- Conekta::Charge.retrieve("foo")
309
- rescue Conekta::ResourceNotFoundError => e
310
- e.http_status.should eq(404)
311
- e.http_body.should_not eq(true)
312
- e.json_body.should be_kind_of(Hash)
158
+ plan = Conekta::Plan.find('gold-plan2')
159
+ rescue Conekta::Error => e
160
+ plan = Conekta::Plan.create({
161
+ id: "gold-plan2",
162
+ name: "Gold Plan",
163
+ amount: 10000,
164
+ currency: "MXN",
165
+ interval: "month",
166
+ frequency: 1,
167
+ trial_period_days: 15,
168
+ expiry_count: 12
169
+ })
313
170
  end
314
-
315
- Conekta.mock_rest_client = nil
316
- end
317
-
318
- it "with valid credential, a 422 should give an ParameterValidationError with http status, body, and JSON body" do
319
- @mock = double
320
- Conekta.mock_rest_client = @mock
321
-
322
- response = test_response(test_missing_id_error, 422)
323
- @mock.should_receive(:post){|args|
324
- raise RestClient::ExceptionWithResponse.new(response, 422)
325
- }.once
326
-
171
+ subscription.update({plan: plan.id})
172
+ subscription.plan_id.should eq('gold-plan2')
173
+ end
174
+ it "test unsuccesful create subscription" do
175
+ customer = Conekta::Customer.create({
176
+ :cards => ["tok_test_visa_4242"],
177
+ })
327
178
  begin
328
- Conekta::Charge.create({amount:-10000})
329
- rescue Conekta::ParameterValidationError => e
330
- e.http_status.should eq(422)
331
- e.http_body.should_not eq(true)
332
- e.json_body.should be_kind_of(Hash)
179
+ subscription = customer.create_subscription({plan: 'unexistent-plan'})
180
+ rescue Conekta::Error => e
181
+ e.message.should eq("Plan 'unexistent-plan' does not exist and cannot be used to create a new subsription.")
333
182
  end
334
-
335
- Conekta.mock_rest_client = nil
336
- end
337
-
338
- it "with valid credential, setting a nil value for a param should exclude that param from the request" do
339
- @mock = double
340
- Conekta.mock_rest_client = @mock
341
-
342
- @mock.should_receive(:get){|url, api_key, params|
343
- uri = URI(url)
344
- query = CGI.parse(uri.query)
345
- url.should match(%r{^#{Conekta.api_base}/charges?})
346
- query.keys.sort.should eq(['offset', 'sad'])
347
-
348
- test_response({ :count => 1, :data => [test_charge] })
349
- }
350
- c = Conekta::Charge.all(:count => nil, :offset => 5, :sad => false)
351
-
352
- @mock.should_receive(:post){|url, api_key, params|
353
- "#{Conekta.api_base}/charges.json".should eq(url)
354
- api_key.should eq(nil)
355
- {:amount => 50, :currency=>'usd', :card=>{}}.should eq(JSON.parse(params).symbolize_keys)
356
-
357
- test_response({ :count => 1, :data => [test_charge] })
358
- }
359
- c = Conekta::Charge.create(:amount => 50, :currency => 'usd', :card => { :number => nil })
360
- Conekta.mock_rest_client = nil
361
- end
362
-
363
- it "requesting with a unicode ID should result in a request" do
364
- @mock = double
365
- Conekta.mock_rest_client = @mock
366
-
367
- response = test_response(test_missing_id_error, 400)
368
- @mock.should_receive(:get){|arg1, arg2, arg3|
369
- arg1.should eq("#{Conekta.api_base}/charges/%E2%98%83.json")
370
- arg2.should eq(nil)
371
- arg3.should eq(nil)
372
- raise RestClient::ExceptionWithResponse.new(response, 400)
373
- }.once
374
- c = Conekta::Charge.new("☃")
375
- expect{c.refresh}.to raise_error(Conekta::MalformedRequestError)
376
-
377
- Conekta.mock_rest_client = nil
378
- end
379
-
380
- it "requesting with no ID should result in an ParameterValidationError with no request" do
381
- c = Conekta::Charge.new
382
- expect{c.refresh}.to raise_error(Conekta::ParameterValidationError)
383
- end
384
-
385
- it "making a GET request with parameters should have a query string and no body" do
386
- @mock = double
387
- Conekta.mock_rest_client = @mock
388
-
389
- params = { :limit => 1 }
390
- @mock.should_receive(:get){|arg1, arg2, arg3|
391
- arg1.should eq("#{Conekta.api_base}/charges.json?limit=1")
392
- arg2.should eq(nil)
393
- arg3.should eq(nil)
394
- test_response([test_charge])
395
- }.once
396
- c = Conekta::Charge.all(params)
397
-
398
- Conekta.mock_rest_client = nil
399
- end
400
-
401
- it "making a POST request with parameters should have a body and no query string" do
402
- @mock = double
403
- Conekta.mock_rest_client = @mock
404
-
405
- params = { :amount => 100, :currency => 'usd', :card => 'sc_token' }
406
- @mock.should_receive(:post){|url, get, post|
407
- get.should eq(nil)
408
- JSON.parse(post).symbolize_keys.should eq({:amount => 100, :currency => 'usd', :card => 'sc_token'})
409
- test_response(test_charge)
410
- }
411
- c = Conekta::Charge.create(params)
412
-
413
- Conekta.mock_rest_client = nil
414
- end
415
-
416
- it "loading an object should issue a GET request" do
417
- @mock = double
418
- Conekta.mock_rest_client = @mock
419
-
420
- @mock.should_receive(:get){|arg1, arg2, arg3|
421
- test_response(test_charge)
422
- }.once
423
- c = Conekta::Charge.new("test_charge")
424
- c.refresh
425
-
426
- Conekta.mock_rest_client = nil
427
- end
428
-
429
- it "using array accessors should be the same as the method interface" do
430
- @mock = double
431
- Conekta.mock_rest_client = @mock
432
-
433
- @mock.should_receive(:get){|arg1, arg2, arg3|
434
- test_response(test_charge)
435
- }.once
436
- c = Conekta::Charge.new("test_charge")
437
- c.refresh
438
- c.created.should eq(c[:created])
439
- c.created.should eq(c['created'])
440
- c['created'] = 12345
441
- c.created.should eq(12345)
442
-
443
- Conekta.mock_rest_client = nil
444
- end
445
-
446
- # it "accessing a property other than id or parent on an unfetched object should fetch it" do
447
- # @mock = double
448
- # Conekta.mock_rest_client = @mock
449
- #
450
- # @mock.should_receive(:get){
451
- # test_response(test_charge)
452
- # }.once
453
- # c = Conekta::Charge.new("test_charge")
454
- # c.card
455
- #
456
- # Conekta.mock_rest_client = nil
457
- # end
458
-
459
- it "updating an object should issue a POST request with only the changed properties" do
460
- @mock = double
461
- Conekta.mock_rest_client = @mock
462
-
463
- @mock.should_receive(:post){|url, api_key, params|
464
- url.should eq("#{Conekta.api_base}/charges/ch_test_charge.json")
465
- api_key.should eq(nil)
466
- JSON.parse(params).symbolize_keys.should eq({:mnemonic => 'another_mn'})
467
- test_response(test_charge)
468
- }.once
469
- c = Conekta::Charge.construct_from(test_charge)
470
- c.mnemonic = "another_mn"
471
- c.save
472
-
473
- Conekta.mock_rest_client = nil
474
- end
475
-
476
- it "updating should merge in returned properties" do
477
- @mock = double
478
- Conekta.mock_rest_client = @mock
479
-
480
- @mock = double
481
- Conekta.mock_rest_client = @mock
482
-
483
- @mock.should_receive(:post){
484
- test_response(test_charge)
485
- }.once
486
- c = Conekta::Charge.new("c_test_charge")
487
- c.mnemonic = "another_mn"
488
- c.save
489
- c.livemode.should eq(false)
490
-
491
- Conekta.mock_rest_client = nil
492
- end
493
-
494
- # it "deleting should send no props and result in an object that has no props other deleted" do
495
- # @mock = double
496
- # Conekta.mock_rest_client = @mock
497
- #
498
- # @mock.expects(:get).never
499
- # @mock.expects(:post).never
500
- # @mock.should_receive(:delete){|arg1, arg2, arg3|
501
- # arg1.should eq("#{Conekta.api_base}/v1/charges/ch_test_charge")
502
- # arg2.should eq(nil)
503
- # arg3.should eq(nil)
504
- #
505
- # test_response({ "id" => "test_charge", "deleted" => true })
506
- # }.once
507
- #
508
- # c = Conekta::Customer.construct_from(test_charge)
509
- # c.delete
510
- # c.deleted.should eq(true)
511
- #
512
- # c.livemode.to raise_error(NoMethodError)
513
- # end
514
-
515
- it "loading an object with properties that have specific types should instantiate those classes" do
516
- @mock = double
517
- Conekta.mock_rest_client = @mock
518
-
519
- @mock.should_receive(:get){
520
- test_response(test_charge)
521
- }.once
522
-
523
- c = Conekta::Charge.retrieve("test_charge")
524
- c.card.should be_kind_of(Conekta::ConektaObject)
525
- #c.card.object == 'card'
526
-
527
- Conekta.mock_rest_client = nil
528
- end
529
-
530
- it "loading all of an APIResource should return an array of recursively instantiated objects" do
531
- @mock = double
532
- Conekta.mock_rest_client = @mock
533
-
534
- @mock.should_receive(:get){
535
- test_response(test_charge_array)
536
- }.once
537
- c = Conekta::Charge.all
538
- c = c.data
539
- c.should be_kind_of(Array)
540
- c[0].should be_kind_of(Conekta::Charge)
541
- c[0].card.should be_kind_of(Conekta::ConektaObject)
542
- #c[0].card.object == 'card'
543
-
544
- Conekta.mock_rest_client = nil
545
- end
546
- end
547
-
548
- describe Conekta::Account, "#retrieve" do
549
- it "account should be retrievable" do
550
- @mock = double
551
- Conekta.mock_rest_client = @mock
552
-
553
- resp = {:email => "test+bindings@conekta.com", :charge_enabled => false, :details_submitted => false}
554
- @mock.should_receive(:get){test_response(resp)}.once
555
- a = Conekta::Account.retrieve
556
- "test+bindings@conekta.com".should eq(a.email)
557
- a.charge_enabled.should eq(false)
558
- a.details_submitted.should eq(false)
559
-
560
- Conekta.mock_rest_client = nil
561
- end
562
- end
563
-
564
- describe Conekta::ListObject, "#all" do
565
- it "be able to retrieve full lists given a listobject" do
566
- @mock = double
567
- Conekta.mock_rest_client = @mock
568
-
569
- @mock.should_receive(:get){
570
- test_response(test_charge_array)
571
- }.twice
572
-
573
- c = Conekta::Charge.all
574
- c.should be_kind_of(Conekta::ListObject)
575
- '/charges'.should eq(c.url)
576
- all = c.all
577
- all.should be_kind_of(Conekta::ListObject)
578
- '/charges'.should eq(all.url)
579
- all.data.should be_kind_of(Array)
580
-
581
- Conekta.mock_rest_client = nil
582
183
  end
583
- end
584
-
585
- describe "customer with token tests" do
586
- it "execute should return a new customer" do
587
- @mock = double
588
- Conekta.mock_rest_client = @mock
589
-
590
- @mock.should_receive(:post){|url, api_key, params|
591
- url.should eq("#{Conekta.api_base}/customers.json")
592
- api_key.should eq(nil)
593
- JSON.parse(params).symbolize_keys.should eq({
594
- :cards=>["TOKEN_ID"]
595
- })
596
-
597
- test_response(test_customer)
598
- }.once
599
-
600
- c = Conekta::Customer.create({
601
- :cards => ["TOKEN_ID"],
184
+ it "test succesful pause subscription" do
185
+ customer = Conekta::Customer.create({
186
+ :cards => ["tok_test_visa_4242"],
602
187
  })
603
- c.cards.first.last4.should eq("4242")
604
-
605
- Conekta.mock_rest_client = nil
188
+ subscription = customer.create_subscription({plan: 'gold-plan'})
189
+ subscription.pause
190
+ subscription.status.should eq('paused')
606
191
  end
607
- end
608
-
609
- describe "plan tests" do
610
- it "execute should return a new plan" do
611
- @mock = double
612
- Conekta.mock_rest_client = @mock
613
-
614
- @mock.should_receive(:post){|url, api_key, params|
615
- url.should eq("#{Conekta.api_base}/plans.json")
616
- api_key.should eq(nil)
617
- JSON.parse(params).symbolize_keys.should eq({
618
- :id => "gold-plan",
619
- :name => "Gold Plan",
620
- :amount => 10000,
621
- :currency => "MXN",
622
- :interval => "month",
623
- :frequency => 1,
624
- :trial_period_days => 15,
625
- :expiry_count => 12
626
- })
627
-
628
- test_response(test_plan)
629
- }.once
630
-
631
- p = Conekta::Plan.create({
632
- :id => "gold-plan",
633
- :name => "Gold Plan",
634
- :amount => 10000,
635
- :currency => "MXN",
636
- :interval => "month",
637
- :frequency => 1,
638
- :trial_period_days => 15,
639
- :expiry_count => 12
192
+ it "test succesful resume subscription" do
193
+ customer = Conekta::Customer.create({
194
+ :cards => ["tok_test_visa_4242"],
640
195
  })
641
- p.id.should eq("gold-plan")
642
-
643
- Conekta.mock_rest_client = nil
196
+ subscription = customer.create_subscription({plan: 'gold-plan'})
197
+ subscription.resume
198
+ subscription.status.should eq('active')
644
199
  end
645
- end
646
-
647
- describe "token tests" do
648
- it "execute should return a new token" do
649
- @mock = double
650
- Conekta.mock_rest_client = @mock
651
-
652
- @mock.should_receive(:post){|url, api_key, params|
653
- url.should eq("#{Conekta.api_base}/tokens.json")
654
- api_key.should eq(nil)
655
- params = JSON.parse(params).symbolize_keys
656
- params[:card] = params[:card].symbolize_keys
657
- params.should eq({
658
- :card => {
659
- :number => "4242424242424242",
660
- :exp_month => 11,
661
- :exp_year => 2012,
662
- }
663
- })
664
-
665
- test_response(test_token)
666
- }.once
667
-
668
- t = Conekta::Token.create({
669
- :card => {
670
- :number => "4242424242424242",
671
- :exp_month => 11,
672
- :exp_year => 2012,
673
- }
200
+ it "test succesful cancel subscription" do
201
+ customer = Conekta::Customer.create({
202
+ :cards => ["tok_test_visa_4242"],
674
203
  })
675
- t.used.should eq(false)
676
-
677
- Conekta.mock_rest_client = nil
204
+ subscription = customer.create_subscription({plan: 'gold-plan'})
205
+ subscription.cancel
206
+ subscription.status.should eq('canceled')
678
207
  end
679
208
  end
680
-
681
-
682
- describe "charge tests" do
683
- it "charges should be listable" do
684
- @mock = double
685
- Conekta.mock_rest_client = @mock
686
-
687
- @mock.should_receive(:get){
688
- test_response(test_charge_array)
689
- }.once
690
- c = Conekta::Charge.all
691
- c.data.should be_kind_of(Array)
692
- c.each do |charge|
693
- charge.should be_kind_of(Conekta::Charge)
209
+ describe :error_tests do
210
+ p "error tests"
211
+ it "test no id error" do
212
+ begin
213
+ charge = Conekta::Charge.find(nil)
214
+ rescue Conekta::Error => e
215
+ e.message.should eq('Could not get the id of Charge instance.')
694
216
  end
695
-
696
- Conekta.mock_rest_client = nil
697
- end
698
-
699
- it "charges should be refundable" do
700
- @mock = double
701
- Conekta.mock_rest_client = @mock
702
-
703
- @mock.expects(:get).never
704
- @mock.should_receive(:post){test_response({:id => "ch_test_charge", :refunded => true})}.once
705
- c = Conekta::Charge.new("test_charge")
706
- c.refund
707
- c.refunded.should eq(true)
708
-
709
- Conekta.mock_rest_client = nil
710
- end
711
-
712
- it "charges should not be deletable" do
713
- @mock = double
714
- Conekta.mock_rest_client = @mock
715
-
716
- @mock.should_receive(:get){test_response(test_charge)}.once
717
- c = Conekta::Charge.retrieve("test_charge")
718
- expect{c.delete}.to raise_error(NoMethodError)
719
-
720
- Conekta.mock_rest_client = nil
721
- end
722
-
723
-
724
- it "charges should be updateable" do
725
- @mock = double
726
- Conekta.mock_rest_client = @mock
727
-
728
- @mock.should_receive(:get){test_response(test_charge)}.once
729
- @mock.should_receive(:post){test_response(test_charge)}.once
730
- c = Conekta::Charge.new("test_charge")
731
- c.refresh
732
- c.mnemonic = "New charge description"
733
- c.save
734
-
735
- Conekta.mock_rest_client = nil
736
- end
737
-
738
- it "charges should have Card objects associated with their Card property" do
739
- @mock = double
740
- Conekta.mock_rest_client = @mock
741
-
742
- @mock.should_receive(:get){test_response(test_charge)}.once
743
- c = Conekta::Charge.retrieve("test_charge")
744
- c.card.should be_kind_of(Conekta::ConektaObject)
745
- #&& c.card.object == 'card'
746
-
747
- Conekta.mock_rest_client = nil
748
- end
749
-
750
- it "execute should return a new, fully executed charge when passed correct parameters" do
751
- @mock = double
752
- Conekta.mock_rest_client = @mock
753
-
754
- @mock.should_receive(:post){|url, api_key, params|
755
- url.should eq("#{Conekta.api_base}/charges.json")
756
- api_key.should eq(nil)
757
- params = JSON.parse(params).symbolize_keys
758
- params[:card] = params[:card].symbolize_keys
759
- params.should eq({
760
- :currency => 'usd',
761
- :amount => 100,
762
- :card=>{
763
- :number => '4242424242424242',
764
- :exp_month => 11,
765
- :exp_year => 2012
766
- }
767
- })
768
-
769
- test_response(test_charge)
770
- }.once
771
-
772
- c = Conekta::Charge.create({
773
- :amount => 100,
774
- :card => {
775
- :number => "4242424242424242",
776
- :exp_month => 11,
777
- :exp_year => 2012,
778
- },
779
- :currency => "usd"
780
- })
781
- c.paid.should eq(true)
782
-
783
- Conekta.mock_rest_client = nil
784
217
  end
785
- end
786
-
787
- describe Conekta::ConektaError do
788
- it "404s should raise an ResourceNotFoundError" do
789
- @mock = double
790
- Conekta.mock_rest_client = @mock
791
-
792
- response = test_response(test_missing_id_error, 404)
793
- @mock.should_receive(:get){raise RestClient::ExceptionWithResponse.new(response, 404)}.once
794
-
218
+ it "test no connection error" do
219
+ api_url = Conekta::api_base
220
+ Conekta::api_base = 'http://localhost:3001'
221
+ begin
222
+ customer = Conekta::Customer.create({cards: ["tok_test_visa_4242"]})
223
+ rescue Exception => e
224
+ e.class_name.should eq("NoConnectionError")
225
+ end
226
+ Conekta::api_base = api_url
227
+ end
228
+ it "test api error" do
229
+ begin
230
+ customer = Conekta::Customer.create({cards: {0=>"tok_test_visa_4242"}})
231
+ rescue Conekta::Error => e
232
+ e.class_name.should eq("ApiError")
233
+ end
234
+ end
235
+ it "test authentication error" do
236
+ Conekta::api_key = ""
795
237
  begin
796
- Conekta::Charge.new("test_charge").refresh
797
- rescue Conekta::ResourceNotFoundError => e # we don't use assert_raises because we want to examine e
798
- e.should be_kind_of(Conekta::ResourceNotFoundError)
799
- "id".should eq(e.param)
800
- "Invalid id value".should eq(e.message)
238
+ customer = Conekta::Customer.create({cards: ["tok_test_visa_4242"]})
239
+ rescue Conekta::Error => e
240
+ e.class_name.should eq("AuthenticationError")
241
+ end
242
+ Conekta.api_key = '1tv5yJp3xnVZ7eK67m4h'
243
+ end
244
+ it "test parameter validation error" do
245
+ begin
246
+ plan = Conekta::Plan.create({id: 'gold-plan'})
247
+ rescue Conekta::Error => e
248
+ e.class_name.should eq("ParameterValidationError")
249
+ end
250
+ end
251
+ it "test processing error" do
252
+ charge = nil
253
+ charges = Conekta::Charge.where()
254
+ charges.each do |(k,v)|
255
+ if v.status == "pre_authorized"
256
+ charge = v
257
+ break
258
+ end
801
259
  end
802
-
803
- Conekta.mock_rest_client = nil
804
- end
805
-
806
- it "5XXs should raise an APIError" do
807
- @mock = double
808
- Conekta.mock_rest_client = @mock
809
-
810
- response = test_response(test_api_error, 500)
811
- @mock.should_receive(:get){raise RestClient::ExceptionWithResponse.new(response, 500)}.once
812
-
813
260
  begin
814
- Conekta::Charge.new("test_charge").refresh
815
- rescue Conekta::APIError => e # we don't use assert_raises because we want to examine e
816
- e.should be_kind_of(Conekta::APIError)
261
+ if charge
262
+ charge.capture
263
+ end
264
+ rescue Conekta::Error => e
265
+ e.class_name.should eq("ProcessingError")
817
266
  end
818
-
819
- Conekta.mock_rest_client = nil
820
- end
821
-
822
- it "402s should raise a CardError" do
823
- @mock = double
824
- Conekta.mock_rest_client = @mock
825
-
826
- response = test_response(test_invalid_exp_year_error, 402)
827
- @mock.should_receive(:get){raise RestClient::ExceptionWithResponse.new(response, 402)}.once
828
-
267
+ end
268
+ it "test resource not found error" do
829
269
  begin
830
- Conekta::Charge.new("test_charge").refresh
831
- rescue Conekta::CardError => e # we don't use assert_raises because we want to examine e
832
- e.should be_kind_of(Conekta::CardError)
833
- "invalid_expiry_year".should eq(e.code)
834
- "exp_year".should eq(e.param)
835
- "Your card's expiration year is invalid".should eq(e.message)
270
+ charge = Conekta::Charge.find(1)
271
+ rescue Conekta::Error => e
272
+ e.class_name.should eq("ResourceNotFoundError")
836
273
  end
837
-
838
- Conekta.mock_rest_client = nil
274
+ end
275
+ end
276
+ describe :event_tests do
277
+ p "event tests"
278
+ it "test succesful where" do
279
+ events = Conekta::Event.where
280
+ events.class_name.should eq("ConektaObject")
281
+ events[0].class_name.should eq("Event")
282
+ end
283
+ end
284
+ describe :token_tests do
285
+ p "token tests"
286
+ it "test succesful where" do
287
+ token = Conekta::Token.find("tok_test_visa_4242")
288
+ token.class_name.should eq("Token")
289
+ end
290
+ end
291
+ describe :plan_tests do
292
+ p "plan tests"
293
+ it "test succesful get plan" do
294
+ plans = Conekta::Plan.where
295
+ p = plans.first;
296
+ plan = Conekta::Plan.find(p.id)
297
+ plan.class_name.should eq("Plan")
298
+ end
299
+ it "test succesful where" do
300
+ plans = Conekta::Plan.where
301
+ plans.class_name.should eq("ConektaObject")
302
+ plans.first.class_name.should eq("Plan")
303
+ end
304
+ it "test succesful create plan" do
305
+ plans = Conekta::Plan.where
306
+ plan = Conekta::Plan.create({
307
+ id: "gold-plan#{plans.count}",
308
+ name: "Gold Plan",
309
+ amount: 10000,
310
+ currency: "MXN",
311
+ interval: "month",
312
+ frequency: 10,
313
+ trial_period_days: 15,
314
+ expiry_count: 12
315
+ }
316
+ )
317
+ plan.class_name.should eq("Plan")
318
+ end
319
+ it "test update plan" do
320
+ plans = Conekta::Plan.where
321
+ plan = plans.first
322
+ plan.update({name: "Silver Plan"})
323
+ plan.name.should eq("Silver Plan")
324
+ end
325
+ it "test delete plan" do
326
+ plans = Conekta::Plan.where
327
+ plan = plans.first
328
+ plan.delete
329
+ plan.deleted.should eq(true)
839
330
  end
840
331
  end
841
332
  end