cheddargetter_client_ruby 0.3.1 → 0.3.2

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cheddargetter_client_ruby}
8
- s.version = "0.3.1"
8
+ s.version = "0.3.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Expected Behavior"]
12
- s.date = %q{2011-02-02}
12
+ s.date = %q{2011-05-16}
13
13
  s.description = %q{A CheddarGetter API wrapper for Ruby}
14
14
  s.email = %q{support@expectedbehavior.com}
15
15
  s.extra_rdoc_files = [
@@ -33,19 +33,22 @@ Gem::Specification.new do |s|
33
33
  "lib/cheddar_getter/response_exception.rb",
34
34
  "lib/cheddargetter_client_ruby.rb",
35
35
  "test/helper.rb",
36
- "test/test_cheddargetter_client_ruby.rb"
36
+ "test/test_cheddargetter_client_ruby.rb",
37
+ "test/working_tests.rb"
37
38
  ]
38
39
  s.homepage = %q{http://github.com/expectedbehavior/cheddargetter_client_ruby}
39
40
  s.licenses = ["MIT"]
40
41
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.4.2}
42
+ s.rubygems_version = %q{1.3.7}
42
43
  s.summary = %q{A CheddarGetter API wrapper for Ruby}
43
44
  s.test_files = [
44
45
  "test/helper.rb",
45
- "test/test_cheddargetter_client_ruby.rb"
46
+ "test/test_cheddargetter_client_ruby.rb",
47
+ "test/working_tests.rb"
46
48
  ]
47
49
 
48
50
  if s.respond_to? :specification_version then
51
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
52
  s.specification_version = 3
50
53
 
51
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -57,8 +57,31 @@ module CheddarGetter
57
57
  # :search => Tcustomer name, company, email address and last four digits of credit card.
58
58
  #}
59
59
  def get_customers(data = nil)
60
+ warn 'Deprecation Warning: get_customers method is deprecated. Use get_customer_list instead'
60
61
  do_request(:item => :customers, :action => :get, :data => data)
61
62
  end
63
+
64
+ #https://cheddargetter.com/developers#all-customers
65
+ #
66
+ #Any, all, or none of this data hash can be given.
67
+ #It just filters the returned customers
68
+ #
69
+ #data:
70
+ #
71
+ #{
72
+ # :subscriptionStatus => "activeOnly" or "canceledOnly",
73
+ # :planCode => plan_code, #can take an array of plan codes
74
+ # :createdAfterDate => date,
75
+ # :createdBeforeDate => date,
76
+ # :canceledAfterDate => date,
77
+ # :canceledBeforeDate => date,
78
+ # :orderBy => "name" (default), "company", "plan", "billingDatetime" or "createdDatetime"
79
+ # :orderByDirection => "asc" (default) or "desc"
80
+ # :search => Tcustomer name, company, email address and last four digits of credit card.
81
+ #}
82
+ def get_customer_list(data = nil)
83
+ do_request(:item => :customers, :action => :list, :data => data)
84
+ end
62
85
 
63
86
  #https://cheddargetter.com/developers#single-customer
64
87
  #
@@ -322,7 +345,43 @@ module CheddarGetter
322
345
  def add_charge(id_hash = { }, data = { })
323
346
  do_request(:item => :customers, :action => "add-charge", :id_hash => id_hash, :data => data)
324
347
  end
325
-
348
+
349
+ #https://cheddargetter.com/developers#delete-charge
350
+ #
351
+ #id_hash: {:code => customer_code} OR {:id => customer_id}
352
+ #
353
+ #data:
354
+ #
355
+ #{
356
+ # :chargeId => required,
357
+ #}
358
+ def delete_charge(id_hash = { }, data = { })
359
+ do_request(:item => :customers, :action => "delete-charge", :id_hash => id_hash, :data => data)
360
+ end
361
+
362
+ # https://cheddargetter.com/developers#one-time-invoice
363
+ #
364
+ # id_hash: {:code => customer_code} OR {:id => customer_id}
365
+ #
366
+ # data:
367
+ # :charges =>
368
+ # {"0" => {
369
+ # :chargeCode,
370
+ # :quantity,
371
+ # :eachAmount
372
+ # :description
373
+ # },
374
+ # {"1" => {
375
+ # :chargeCode,
376
+ # :quantity,
377
+ # :eachAmount
378
+ # :description
379
+ # }
380
+ # etc
381
+ def add_one_time_invoice(id_hash = {}, data = {})
382
+ do_request(:item => :invoices, :action => 'new', :id_hash => id_hash, :data => data)
383
+ end
384
+
326
385
  #http://support.cheddargetter.com/faqs/marketing-metrics/marketing-metrics
327
386
  #
328
387
  #Convenience wrapper of setcookie() for setting a persistent cookie
@@ -109,6 +109,10 @@ module CheddarGetter
109
109
  (customer_subscriptions(code) || []).first
110
110
  end
111
111
 
112
+ def customer_paypal_preapproval_url(code = nil)
113
+ customer_subscription[:redirectUrl] || ""
114
+ end
115
+
112
116
  #Returns all the subscriptions for the given customer.
113
117
  #Only the first one is active, the rest is historical.
114
118
  #
@@ -157,6 +161,9 @@ module CheddarGetter
157
161
  customer_invoices(code).map{ |s| s[:transactions] || [] }.flatten
158
162
  end
159
163
 
164
+ def customer_one_time_invoices(code = nil)
165
+ customer_invoices(code).select{ |s| s[:type] == 'one-time' }
166
+ end
160
167
  #Returns the last transaction for the given customer.
161
168
  #
162
169
  #nil if there are no transactions.
@@ -233,6 +240,29 @@ module CheddarGetter
233
240
  sub ? !!sub[:canceledDatetime] : nil
234
241
  end
235
242
 
243
+ # Get an array representation of a single customer's current subscription
244
+ # @throws CheddarGetter_Response_Exception if the response type is incompatible or if a $code
245
+ # is not provided and the response contains more than one customer
246
+ # @return array
247
+ def customer_active?(code = nil)
248
+ subscription = customer_subscription(code)
249
+ if subscription[:canceledDatetime] && subscription[:canceledDatetime] <= Time.now
250
+ false
251
+ else
252
+ true
253
+ end
254
+ end
255
+
256
+ # Is this customer's account pending paypal preapproval confirmation?
257
+ def customer_waiting_for_paypal?(code = nil)
258
+ subscription = customer_subscription(code)
259
+ if subscription[:canceledDatetime] && subscription[:canceledDatetime] <= Time.now && subscription[:cancelType] == 'paypal-wait'
260
+ true
261
+ else
262
+ false
263
+ end
264
+ end
265
+
236
266
  #access the root keys of the response directly, such as
237
267
  #:customers, :plans, or :errors
238
268
  def [](value)
@@ -18,7 +18,11 @@ require 'cheddargetter_client_ruby'
18
18
  class Test::Unit::TestCase
19
19
  end
20
20
 
21
- CG = CheddarGetter::Client.new(:product_code => "GEM_TEST",
22
- :username => "michael@expectedbehavior.com",
23
- :password => "DROlOAeQpWey6J2cqTyEzH")
24
-
21
+ CGEmail = "michael@expectedbehavior.com"
22
+ CGProductCode = 'GEM_TEST'
23
+ CGPassword = 'DROlOAeQpWey6J2cqTyEzH'
24
+ CGFreePlanId = "fe96b9e6-53a2-102e-b098-40402145ee8b"
25
+
26
+ CG = CheddarGetter::Client.new(:product_code => CGProductCode,
27
+ :username => CGEmail,
28
+ :password => CGPassword)
@@ -53,6 +53,24 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
53
53
  }
54
54
  end
55
55
 
56
+ def paypal_new_user_hash(id, cc_error = nil)
57
+ {
58
+ :code => id,
59
+ :firstName => "First",
60
+ :lastName => "Last",
61
+ :email => "buyer_1304894377_per@gmail.com",
62
+ :firstContactDatetime => Time.now,
63
+ :subscription => {
64
+ :planCode => "TEST_PLAN_2",
65
+ :ccFirstName => "ccFirst",
66
+ :ccLastName => "ccLast",
67
+ :method => 'paypal',
68
+ :returnUrl => 'http://mywebapp.com/login?paypalAccepted',
69
+ :cancelUrl => 'http://mywebapp.com/login?paypalCanceled'
70
+ },
71
+ }
72
+ end
73
+
56
74
  should "check various client init exceptions" do
57
75
  assert_raises(CheddarGetter::ClientException) do
58
76
  CheddarGetter::Client.new(:product_code => "code", :password => "password")
@@ -82,7 +100,7 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
82
100
  cg.password = CG.password
83
101
  result = cg.get_plans
84
102
  assert_equal false, result.valid?
85
- assert_equal ["User michael@expectedbehavior.com does not have access to productCode=code"],
103
+ assert_equal ["User #{CGEmail} does not have access to productCode=code"],
86
104
  result.error_messages
87
105
 
88
106
  cg.product_code = ""
@@ -131,14 +149,14 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
131
149
  assert_raises(CheddarGetter::ResponseException){ result.customer }
132
150
  assert_equal true, result.valid?
133
151
 
134
- result = CG.get_plan(:id => "fe96b9e6-53a2-102e-b098-40402145ee8b")
152
+ result = CG.get_plan(:id => CGFreePlanId)
135
153
  assert_equal 1, result.plans.size
136
154
  assert_equal "Free Plan Test", result.plan("FREE_PLAN_TEST")[:name]
137
155
  assert_equal true, result.valid?
138
156
 
139
157
  result = CG.get_plan(:code => "NOT_A_PLAN")
140
158
  assert_equal false, result.valid?
141
- assert_equal ["Plan not found for code=NOT_A_PLAN within productCode=GEM_TEST"], result.error_messages
159
+ assert_equal ["Plan not found for code=NOT_A_PLAN within productCode=#{CGProductCode}"], result.error_messages
142
160
  end
143
161
 
144
162
  should "create a single free customer at cheddar getter" do
@@ -160,6 +178,23 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
160
178
  assert_equal 20, result.customer_invoice[:charges].first[:eachAmount]
161
179
  end
162
180
 
181
+ should 'create single paypal user' do
182
+ result = CG.delete_all_customers
183
+ assert_equal true, result.valid?
184
+
185
+ result = CG.new_customer(paypal_new_user_hash(1))
186
+ assert_equal true, result.valid?
187
+ assert_equal 1, result.customers.size
188
+ assert_equal "1", result.customer[:code]
189
+ assert_equal "Test Plan 2", result.customer_plan[:name]
190
+ assert_equal 20, result.customer_invoice[:charges].first[:eachAmount]
191
+ #paypal customer should be in cancelled in paypal-wait status
192
+ assert_equal true, result.customer_waiting_for_paypal?
193
+ #paypal customer subscription should include an approve paypal preapproval url
194
+ assert_equal true, result.customer_paypal_preapproval_url != nil
195
+ assert_equal true, result.customer_paypal_preapproval_url != ""
196
+ end
197
+
163
198
  should "try to create a customer with various errors" do
164
199
  result = CG.delete_all_customers
165
200
  assert_equal true, result.valid?
@@ -332,6 +367,28 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
332
367
  assert_raises(CheddarGetter::ResponseException){ result.customer_item_quantity_overage_cost }
333
368
  end
334
369
 
370
+ should "get customer list from cheddargetter" do
371
+ result = CG.delete_all_customers
372
+ assert_equal true, result.valid?
373
+
374
+ result = CG.new_customer(paid_new_user_hash(1))
375
+ assert_equal true, result.valid?
376
+
377
+ result = CG.new_customer(paid_new_user_hash(2))
378
+ assert_equal true, result.valid?
379
+
380
+ result = CG.new_customer(free_new_user_hash(3))
381
+ assert_equal true, result.valid?
382
+
383
+ result = CG.get_customer_list
384
+ assert_equal true, result.valid?
385
+ assert_equal 3, result.customers.count
386
+ assert_equal "1", result.customer(1)[:code]
387
+ assert_equal "2", result.customer(2)[:code]
388
+ assert_equal "3", result.customer(3)[:code]
389
+ assert_equal nil, result.customer(4)
390
+ end
391
+
335
392
  should "get a customer from cheddargetter" do
336
393
  result = CG.delete_all_customers
337
394
  assert_equal true, result.valid?
@@ -426,18 +483,44 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
426
483
  customer = CG.new_customer(paid_new_user_hash(1))
427
484
  assert_equal true, customer.valid?
428
485
  assert_equal false, customer.customer_canceled?
486
+ assert_equal true, customer.customer_active?
429
487
 
430
488
  result = CG.cancel_subscription(:code => customer.customer[:code])
431
489
  assert_equal true, result.valid?
432
490
  assert_equal true, result.customer_canceled?
491
+ assert_equal false, result.customer_active?
433
492
 
434
493
  customer = CG.new_customer(paid_new_user_hash(2))
435
494
  assert_equal true, customer.valid?
436
495
  assert_equal false, customer.customer_canceled?
496
+ assert_equal true, customer.customer_active?
437
497
 
438
498
  result = CG.cancel_subscription(:id => customer.customer[:id])
439
499
  assert_equal true, result.valid?
440
500
  assert_equal true, result.customer_canceled?
501
+ assert_equal false, result.customer_active?
502
+ end
503
+
504
+ should 'check waiting on paypal status' do
505
+ result = CG.delete_all_customers
506
+ assert_equal true, result.valid?
507
+
508
+
509
+ customer = CG.new_customer(paid_new_user_hash(1))
510
+ assert_equal true, customer.valid?
511
+ assert_equal false, customer.customer_canceled?
512
+ assert_equal true, customer.customer_active?
513
+ assert_equal false, customer.customer_waiting_for_paypal?
514
+
515
+ result = CG.cancel_subscription(:code => customer.customer[:code])
516
+ assert_equal true, result.valid?
517
+ assert_equal true, result.customer_canceled?
518
+ assert_equal false, result.customer_active?
519
+ assert_equal false, result.customer_waiting_for_paypal?
520
+
521
+ #formatting response to simulate paypal wait status
522
+ result[:customers]["1"][:subscriptions][0][:cancelType] = "paypal-wait"
523
+ assert_equal true, result.customer_waiting_for_paypal?
441
524
  end
442
525
 
443
526
  should "edit customer and subscription" do
@@ -460,10 +543,17 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
460
543
 
461
544
  result = CG.edit_customer(:code => customer[:code])
462
545
  assert_equal true, result.valid?
546
+
547
+ customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
548
+ customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
549
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
550
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
463
551
  assert_equal customer, result.customer
464
552
 
465
553
  result = CG.edit_customer(:id => customer[:id])
466
554
  assert_equal true, result.valid?
555
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
556
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
467
557
  assert_equal customer, result.customer
468
558
 
469
559
  result = CG.edit_customer({:code => customer[:code]}, {:firstName => "New",
@@ -477,6 +567,8 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
477
567
  result.customer[:subscriptions][0][:ccZip] = customer[:subscriptions][0][:ccZip]
478
568
  result.customer[:subscriptions][0][:invoices][0][:vatRate] = nil #not sure why this changes from nil to 0
479
569
  result.customer[:modifiedDatetime] = customer[:modifiedDatetime]
570
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
571
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
480
572
  assert_equal customer, result.customer
481
573
 
482
574
  result = CG.edit_customer({:code => customer[:code]},
@@ -507,11 +599,17 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
507
599
  assert_equal true, result.valid?
508
600
 
509
601
  result = CG.edit_customer_only(:code => customer[:code])
602
+ customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
603
+ customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
604
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
605
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
510
606
  assert_equal true, result.valid?
511
607
  assert_equal customer, result.customer
512
608
 
513
609
  result = CG.edit_customer_only(:id => customer[:id])
514
610
  assert_equal true, result.valid?
611
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
612
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
515
613
  assert_equal customer, result.customer
516
614
 
517
615
  result = CG.edit_customer({:code => customer[:code]}, {
@@ -526,6 +624,8 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
526
624
  result.customer[:company] = customer[:company]
527
625
  result.customer[:modifiedDatetime] = customer[:modifiedDatetime]
528
626
  result.customer[:subscriptions][0][:invoices][0][:vatRate] = nil #not sure why this changes from nil to 0
627
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
628
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
529
629
  assert_equal customer, result.customer
530
630
  end
531
631
 
@@ -545,14 +645,20 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
545
645
 
546
646
  result = CG.new_customer(free_new_user_hash(1))
547
647
  customer = result.customer
648
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
649
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
548
650
  assert_equal true, result.valid?
549
651
 
550
652
  result = CG.edit_subscription(:code => customer[:code])
551
653
  assert_equal true, result.valid?
654
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
655
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
552
656
  assert_equal customer, result.customer
553
657
 
554
658
  result = CG.edit_subscription(:id => customer[:id])
555
659
  assert_equal true, result.valid?
660
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
661
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
556
662
  assert_equal customer, result.customer
557
663
 
558
664
  result = CG.edit_subscription({:code => customer[:code]}, { :ccZip => "46268" })
@@ -563,6 +669,8 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
563
669
  result.customer[:subscriptions][0][:ccZip] = customer[:subscriptions][0][:ccZip]
564
670
  result.customer[:subscriptions][0][:invoices][0][:vatRate] = nil #not sure why this changes from nil to 0
565
671
  result.customer[:modifiedDatetime] = customer[:modifiedDatetime]
672
+ result.customer[:subscriptions].first[:plan].delete(:initialInvoiceBillingDatetime)
673
+ result.customer[:subscriptions].first[:plan].delete(:nextInvoiceBillingDatetime)
566
674
  assert_equal customer, result.customer
567
675
 
568
676
  result = CG.edit_subscription({:code => customer[:code]}, paid_new_user_hash(1)[:subscription] )
@@ -731,10 +839,25 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
731
839
  charge = result.customer_invoice[:charges].detect{ |c| c[:code] == "MY_CREDIT" }
732
840
  assert_equal 1, charge[:quantity]
733
841
  assert_equal -2, charge[:eachAmount]
734
- assert_equal "Whoops", charge[:description]
735
-
842
+ assert_equal "Whoops", charge[:description]
736
843
  end
737
844
 
845
+ should 'delete charge' do
846
+ result = CG.delete_all_customers
847
+ assert_equal true, result.valid?
848
+
849
+ result = CG.new_customer(paid_new_user_hash(1))
850
+ assert_equal true, result.valid?
851
+
852
+ result = CG.add_charge({:code => 1}, { :chargeCode => "MY_CHARGE", :quantity => 1, :eachAmount => 2 })
853
+ assert_equal true, result.valid?
854
+ charge = result.customer_invoice[:charges].detect{ |c| c[:code] == "MY_CHARGE" }
855
+
856
+ result = CG.delete_charge({:code => 1}, { :chargeId => charge[:id] })
857
+ charge = result.customer_invoice[:charges].detect{ |c| c[:code] == "MY_CHARGE" }
858
+ assert_equal nil, charge
859
+ end
860
+
738
861
  should "resubscribe after canceling" do
739
862
  result = CG.delete_all_customers
740
863
  assert_equal true, result.valid?
@@ -833,6 +956,86 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
833
956
  assert_equal ["No customers found."], result.error_messages
834
957
  end
835
958
 
959
+ should "test customer list get filtering" do
960
+ result = CG.delete_all_customers
961
+ assert_equal true, result.valid?
962
+
963
+ result = CG.new_customer(free_new_user_hash(1))
964
+ assert_equal true, result.valid?
965
+
966
+ result = CG.new_customer(free_new_user_hash(2))
967
+ assert_equal true, result.valid?
968
+ result = CG.cancel_subscription(:code => 2)
969
+ assert_equal true, result.valid?
970
+ assert_equal true, result.customer_canceled?
971
+
972
+
973
+ result = CG.new_customer(paid_new_user_hash(3))
974
+ assert_equal true, result.valid?
975
+
976
+ result = CG.new_customer(paid_new_user_hash(4))
977
+ assert_equal true, result.valid?
978
+ result = CG.cancel_subscription(:code => 4)
979
+ assert_equal true, result.valid?
980
+ assert_equal true, result.customer_canceled?
981
+
982
+ result = CG.get_customer_list
983
+ assert_equal true, result.valid?
984
+ assert_equal 4, result.customers.count
985
+ assert_equal "1", result.customer(1)[:code]
986
+ assert_equal "2", result.customer(2)[:code]
987
+ assert_equal "3", result.customer(3)[:code]
988
+ assert_equal "4", result.customer(4)[:code]
989
+
990
+ result = CG.get_customer_list(:subscriptionStatus => "activeOnly")
991
+ assert_equal true, result.valid?
992
+ assert_equal 2, result.customers.count
993
+ assert_equal "1", result.customer(1)[:code]
994
+ assert_equal nil, result.customer(2)
995
+ assert_equal "3", result.customer(3)[:code]
996
+ assert_equal nil, result.customer(4)
997
+
998
+ result = CG.get_customer_list(:subscriptionStatus => "canceledOnly")
999
+ assert_equal true, result.valid?
1000
+ assert_equal 2, result.customers.count
1001
+ assert_equal nil, result.customer(1)
1002
+ assert_equal "2", result.customer(2)[:code]
1003
+ assert_equal nil, result.customer(3)
1004
+ assert_equal "4", result.customer(4)[:code]
1005
+
1006
+ result = CG.get_customer_list(:planCode => "TEST_PLAN_1")
1007
+ assert_equal false, result.valid?
1008
+ assert_equal ["No customers found."], result.error_messages
1009
+
1010
+ result = CG.get_customer_list(:planCode => ["TEST_PLAN_1", "TEST_PLAN_2", "FREE_PLAN_TEST"])
1011
+ assert_equal true, result.valid?
1012
+ assert_equal 4, result.customers.count
1013
+
1014
+ result = CG.get_customer_list(:planCode => "FREE_PLAN_TEST")
1015
+ assert_equal true, result.valid?
1016
+ assert_equal 2, result.customers.count
1017
+
1018
+ result = CG.get_customer_list(:planCode => "FREE_PLAN_TEST", :subscriptionStatus => "canceledOnly")
1019
+ assert_equal true, result.valid?
1020
+ assert_equal 1, result.customers.count
1021
+
1022
+ result = CG.get_customer_list(:canceledAfterDate => Date.today)
1023
+ assert_equal true, result.valid?
1024
+ assert_equal 2, result.customers.count
1025
+
1026
+ result = CG.get_customer_list(:createdAfterDate => Date.today)
1027
+ assert_equal true, result.valid?
1028
+ assert_equal 4, result.customers.count
1029
+
1030
+ result = CG.get_customer_list(:search => "First")
1031
+ assert_equal true, result.valid?
1032
+ assert_equal 4, result.customers.count
1033
+
1034
+ result = CG.get_customer_list(:search => "NotFirst")
1035
+ assert_equal false, result.valid?
1036
+ assert_equal ["No customers found."], result.error_messages
1037
+ end
1038
+
836
1039
  should "get 100% code coverage :)" do
837
1040
  result = CG.delete_all_customers
838
1041
  assert_equal true, result.valid?
@@ -979,4 +1182,49 @@ class TestCheddargetterClientRuby < Test::Unit::TestCase
979
1182
  assert_equal 'correct', result.customer[:campaignTerm]
980
1183
  end
981
1184
 
1185
+ should "create one-time-invoices" do
1186
+ result = CG.delete_all_customers
1187
+ assert_equal true, result.valid?
1188
+
1189
+ assert_raises(CheddarGetter::ClientException){ CG.add_charge }
1190
+
1191
+ result = CG.add_one_time_invoice(:code => 1)
1192
+ assert_equal false, result.valid?
1193
+ assert_equal ["Customer not found"], result.error_messages
1194
+
1195
+ result = CG.add_one_time_invoice(:id => "not_a_valid_id")
1196
+ assert_equal false, result.valid?
1197
+ assert_equal ["Customer not found"], result.error_messages
1198
+
1199
+ result = CG.new_customer(paid_new_user_hash(1))
1200
+ assert_equal true, result.valid?
1201
+
1202
+ result = CG.add_one_time_invoice(:code => 1)
1203
+ assert_equal false, result.valid?
1204
+ assert_equal ["A value is required: charges[0][chargeCode]"], result.error_messages
1205
+
1206
+ result = CG.add_one_time_invoice({:code => 1}, :charges => {"0" => { :chargeCode => "MY_CHARGE" }})
1207
+ assert_equal false, result.valid?
1208
+ assert_equal ["A value is required: charges[0][quantity]"], result.error_messages
1209
+
1210
+ result = CG.add_one_time_invoice({:code => 1}, :charges => {"0" => { :chargeCode => "MY_CHARGE", :quantity => 1 }})
1211
+ assert_equal false, result.valid?
1212
+ assert_equal ["A value is required: charges[0][eachAmount]"], result.error_messages
1213
+
1214
+ result = CG.add_one_time_invoice({:code => 1}, :charges => {"0" => { :chargeCode => "MY_CHARGE", :quantity => 1, :eachAmount => 2 }})
1215
+ assert_equal true, result.valid?
1216
+ charge = result.customer_one_time_invoices.first[:charges].detect{ |c| c[:code] == "MY_CHARGE" }
1217
+ assert_equal 1, charge[:quantity]
1218
+ assert_equal 2, charge[:eachAmount]
1219
+ assert_equal nil, charge[:description]
1220
+
1221
+ result = CG.add_one_time_invoice({:code => 1}, :charges => { "0" =>
1222
+ { :chargeCode => "MY_CREDIT", :quantity => 1,
1223
+ :eachAmount => -2, :description => "Whoops" }})
1224
+ assert_equal true, result.valid?
1225
+ charge = result.customer_one_time_invoices.first[:charges].detect{ |c| c[:code] == "MY_CREDIT" }
1226
+ assert_equal 1, charge[:quantity]
1227
+ assert_equal -2, charge[:eachAmount]
1228
+ assert_equal "Whoops", charge[:description]
1229
+ end
982
1230
  end
@@ -0,0 +1,81 @@
1
+ # This file used to copy whatever test you are working on into
2
+ # to run individually. This is to make up for test unit's lack
3
+ # of ability to run individual tests!
4
+
5
+ require File.join(File.dirname(__FILE__), 'helper')
6
+
7
+ class TestCheddargetterClientRuby < Test::Unit::TestCase
8
+ ERROR_CODES = {
9
+ 1000 => "An unexpected error occured. Please try again later.",
10
+ 1001 => "The record already exists",
11
+ 1002 => "An unexpected error occured. Please try again later.",
12
+ 1003 => "An unexpected error occured. Please try again later.",
13
+ 2000 => "The local gateway configuration is incompatible",
14
+ 2001 => "The configuration at the gateway is incompatible",
15
+ 2002 => "Authentication to the gateway failed",
16
+ 2003 => "The gateway has denied access",
17
+ 3000 => "The response from the gateway was not recognized",
18
+ 4000 => "The connection to the gateway failed. Please try again later.",
19
+ 5000 => "There was an error processing the transaction",
20
+ 5001 => "Credit card number is invalid",
21
+ 5002 => "Expiration date is invalid",
22
+ 5003 => "Credit card type is not accepted",
23
+ 6000 => "The transaction was declined",
24
+ 6001 => "The transaction was declined due to AVS mismatch",
25
+ 6002 => "The transaction was declined due to card code verification failure",
26
+ 7000 => "The transaction failed for an unknown reason"
27
+ }
28
+
29
+ def free_new_user_hash(id)
30
+ {
31
+ :code => id,
32
+ :firstName => "First",
33
+ :lastName => "Last",
34
+ :email => "email@example.com",
35
+ :subscription => {
36
+ :planCode => "FREE_PLAN_TEST",
37
+ },
38
+ }
39
+ end
40
+
41
+ def paid_new_user_hash(id, cc_error = nil)
42
+ {
43
+ :code => id,
44
+ :firstName => "First",
45
+ :lastName => "Last",
46
+ :email => "email@example.com",
47
+ :firstContactDatetime => Time.now,
48
+ :subscription => {
49
+ :planCode => "TEST_PLAN_2",
50
+ :ccNumber => "4111111111111111",
51
+ :ccExpiration => Date.parse("08/2012"),
52
+ :ccCardCode => "123",
53
+ :ccFirstName => "ccFirst",
54
+ :ccLastName => "ccLast",
55
+ :ccZip => cc_error ? cc_error : "11361"
56
+ },
57
+ }
58
+ end
59
+
60
+ def paypal_new_user_hash(id, cc_error = nil)
61
+ {
62
+ :code => id,
63
+ :firstName => "First",
64
+ :lastName => "Last",
65
+ :email => "buyer_1304894377_per@gmail.com",
66
+ :firstContactDatetime => Time.now,
67
+ :subscription => {
68
+ :planCode => "TEST_PLAN_2",
69
+ :ccFirstName => "ccFirst",
70
+ :ccLastName => "ccLast",
71
+ :method => 'paypal',
72
+ :returnUrl => 'http://mywebapp.com/login?paypalAccepted',
73
+ :cancelUrl => 'http://mywebapp.com/login?paypalCanceled'
74
+ },
75
+ }
76
+ end
77
+
78
+ should '' do
79
+
80
+ end
81
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheddargetter_client_ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
4
+ hash: 23
5
+ prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 1
10
- version: 0.3.1
9
+ - 2
10
+ version: 0.3.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Expected Behavior
@@ -15,12 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-02 00:00:00 -05:00
18
+ date: 2011-05-16 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: httparty
22
+ type: :runtime
23
23
  prerelease: false
24
+ name: httparty
24
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
@@ -32,11 +33,11 @@ dependencies:
32
33
  - 4
33
34
  - 3
34
35
  version: 0.4.3
35
- type: :runtime
36
36
  requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: shoulda
38
+ type: :development
39
39
  prerelease: false
40
+ name: shoulda
40
41
  version_requirements: &id002 !ruby/object:Gem::Requirement
41
42
  none: false
42
43
  requirements:
@@ -46,11 +47,11 @@ dependencies:
46
47
  segments:
47
48
  - 0
48
49
  version: "0"
49
- type: :development
50
50
  requirement: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: bundler
52
+ type: :development
53
53
  prerelease: false
54
+ name: bundler
54
55
  version_requirements: &id003 !ruby/object:Gem::Requirement
55
56
  none: false
56
57
  requirements:
@@ -62,11 +63,11 @@ dependencies:
62
63
  - 0
63
64
  - 0
64
65
  version: 1.0.0
65
- type: :development
66
66
  requirement: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- name: jeweler
68
+ type: :development
69
69
  prerelease: false
70
+ name: jeweler
70
71
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
72
  none: false
72
73
  requirements:
@@ -78,11 +79,11 @@ dependencies:
78
79
  - 5
79
80
  - 1
80
81
  version: 1.5.1
81
- type: :development
82
82
  requirement: *id004
83
83
  - !ruby/object:Gem::Dependency
84
- name: rcov
84
+ type: :development
85
85
  prerelease: false
86
+ name: rcov
86
87
  version_requirements: &id005 !ruby/object:Gem::Requirement
87
88
  none: false
88
89
  requirements:
@@ -92,11 +93,11 @@ dependencies:
92
93
  segments:
93
94
  - 0
94
95
  version: "0"
95
- type: :development
96
96
  requirement: *id005
97
97
  - !ruby/object:Gem::Dependency
98
- name: ruby-debug
98
+ type: :development
99
99
  prerelease: false
100
+ name: ruby-debug
100
101
  version_requirements: &id006 !ruby/object:Gem::Requirement
101
102
  none: false
102
103
  requirements:
@@ -106,11 +107,11 @@ dependencies:
106
107
  segments:
107
108
  - 0
108
109
  version: "0"
109
- type: :development
110
110
  requirement: *id006
111
111
  - !ruby/object:Gem::Dependency
112
- name: httparty
112
+ type: :runtime
113
113
  prerelease: false
114
+ name: httparty
114
115
  version_requirements: &id007 !ruby/object:Gem::Requirement
115
116
  none: false
116
117
  requirements:
@@ -122,7 +123,6 @@ dependencies:
122
123
  - 4
123
124
  - 3
124
125
  version: 0.4.3
125
- type: :runtime
126
126
  requirement: *id007
127
127
  description: A CheddarGetter API wrapper for Ruby
128
128
  email: support@expectedbehavior.com
@@ -151,6 +151,7 @@ files:
151
151
  - lib/cheddargetter_client_ruby.rb
152
152
  - test/helper.rb
153
153
  - test/test_cheddargetter_client_ruby.rb
154
+ - test/working_tests.rb
154
155
  has_rdoc: true
155
156
  homepage: http://github.com/expectedbehavior/cheddargetter_client_ruby
156
157
  licenses:
@@ -181,10 +182,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  requirements: []
182
183
 
183
184
  rubyforge_project:
184
- rubygems_version: 1.4.2
185
+ rubygems_version: 1.3.7
185
186
  signing_key:
186
187
  specification_version: 3
187
188
  summary: A CheddarGetter API wrapper for Ruby
188
189
  test_files:
189
190
  - test/helper.rb
190
191
  - test/test_cheddargetter_client_ruby.rb
192
+ - test/working_tests.rb