paid 0.1.0 → 1.0.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/.travis.yml +16 -0
  4. data/History.txt +4 -0
  5. data/README.md +58 -0
  6. data/Rakefile +9 -29
  7. data/VERSION +1 -0
  8. data/bin/paid-console +7 -0
  9. data/gemfiles/default-with-activesupport.gemfile +10 -0
  10. data/gemfiles/json.gemfile +12 -0
  11. data/gemfiles/yajl.gemfile +12 -0
  12. data/lib/paid.rb +129 -177
  13. data/lib/paid/account.rb +14 -1
  14. data/lib/paid/api_class.rb +336 -0
  15. data/lib/paid/api_list.rb +47 -0
  16. data/lib/paid/api_resource.rb +8 -25
  17. data/lib/paid/api_singleton.rb +5 -0
  18. data/lib/paid/customer.rb +36 -21
  19. data/lib/paid/errors/api_error.rb +6 -0
  20. data/lib/paid/event.rb +22 -1
  21. data/lib/paid/invoice.rb +16 -21
  22. data/lib/paid/plan.rb +18 -2
  23. data/lib/paid/subscription.rb +17 -11
  24. data/lib/paid/transaction.rb +19 -12
  25. data/lib/paid/util.rb +53 -106
  26. data/lib/paid/version.rb +1 -1
  27. data/paid.gemspec +10 -11
  28. data/tasks/api_test.rb +187 -0
  29. data/test/mock_resource.rb +69 -0
  30. data/test/paid/account_test.rb +41 -4
  31. data/test/paid/api_class_test.rb +412 -0
  32. data/test/paid/api_list_test.rb +17 -0
  33. data/test/paid/api_resource_test.rb +13 -343
  34. data/test/paid/api_singleton_test.rb +12 -0
  35. data/test/paid/authentication_test.rb +50 -0
  36. data/test/paid/customer_test.rb +189 -29
  37. data/test/paid/event_test.rb +74 -0
  38. data/test/paid/invoice_test.rb +101 -20
  39. data/test/paid/plan_test.rb +84 -8
  40. data/test/paid/status_codes_test.rb +63 -0
  41. data/test/paid/subscription_test.rb +100 -20
  42. data/test/paid/transaction_test.rb +110 -37
  43. data/test/paid/util_test.rb +15 -24
  44. data/test/test_data.rb +144 -93
  45. data/test/test_helper.rb +6 -4
  46. metadata +32 -26
  47. data/Gemfile.lock +0 -54
  48. data/README.rdoc +0 -35
  49. data/lib/data/ca-certificates.crt +0 -0
  50. data/lib/paid/alias.rb +0 -16
  51. data/lib/paid/api_operations/create.rb +0 -17
  52. data/lib/paid/api_operations/delete.rb +0 -11
  53. data/lib/paid/api_operations/list.rb +0 -17
  54. data/lib/paid/api_operations/update.rb +0 -57
  55. data/lib/paid/certificate_blacklist.rb +0 -55
  56. data/lib/paid/list_object.rb +0 -37
  57. data/lib/paid/paid_object.rb +0 -187
  58. data/lib/paid/singleton_api_resource.rb +0 -20
  59. data/lib/tasks/paid_tasks.rake +0 -4
  60. data/test/paid/alias_test.rb +0 -22
  61. data/test/paid/certificate_blacklist_test.rb +0 -18
  62. data/test/paid/list_object_test.rb +0 -16
  63. data/test/paid/paid_object_test.rb +0 -27
  64. data/test/paid/properties_test.rb +0 -103
@@ -0,0 +1,63 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path('../../test_helper', __FILE__)
3
+
4
+ module Paid
5
+ class StatusCodesTest < Test::Unit::TestCase
6
+
7
+ context 'InvalidRequestError' do
8
+ should 'be raised when HTTP status code is 400' do
9
+ response = test_response(test_missing_id_error, 400)
10
+ @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 404))
11
+ begin
12
+ MockResource.retrieve('bad_id')
13
+ rescue Paid::InvalidRequestError => e
14
+ assert_equal(400, e.http_status)
15
+ assert(!!e.http_body)
16
+ assert(e.json_body.is_a?(Hash))
17
+ end
18
+ end
19
+
20
+ should 'be raised when HTTP status code is 404' do
21
+ response = test_response(test_missing_id_error, 404)
22
+ @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 404))
23
+ assert_raises
24
+ begin
25
+ MockResource.retrieve('foo')
26
+ rescue Paid::InvalidRequestError => e
27
+ rescued = true
28
+ assert_equal(404, e.http_status)
29
+ assert_equal(true, !!e.http_body)
30
+ assert_equal(true, e.json_body.is_a?(Hash))
31
+ end
32
+ assert(rescued)
33
+ end
34
+ end
35
+
36
+ context 'APIError' do
37
+ should 'be raised when HTTP status code is 5XX' do
38
+ response = test_response(test_api_error, 500)
39
+ @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 500))
40
+
41
+ begin
42
+ MockResource.new('fake_id').refresh
43
+ rescue Paid::APIError => e
44
+ rescued = true
45
+ assert(e.is_a?(Paid::APIError))
46
+ end
47
+ assert(rescued)
48
+ end
49
+ end
50
+
51
+ context 'AuthenticationError' do
52
+ should 'be raised when HTTP status code is 401 (invalid credentials)' do
53
+ Paid.api_key = 'invalid'
54
+ response = test_response(test_invalid_api_key_error, 401)
55
+ assert_raises(Paid::AuthenticationError) do
56
+ @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 401))
57
+ MockResource.retrieve('failing')
58
+ end
59
+ end
60
+ end
61
+
62
+ end
63
+ end
@@ -1,31 +1,111 @@
1
1
  require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
- # SubscriptionTest
5
4
  class SubscriptionTest < Test::Unit::TestCase
6
- should 'retrieve should retrieve subscriptions' do
7
- @mock.expects(:get).once.returns(test_response(test_subscription))
8
- i = Paid::Subscription.retrieve('in_test_subscription')
9
- assert_equal 'sub_test_subscription', i.id
5
+ setup do
6
+ @subscription_url = "#{Paid.api_base}/v0/subscriptions"
10
7
  end
11
8
 
12
- should 'create should create a new subscription' do
13
- @mock.expects(:post).once.returns(test_response(test_subscription))
14
- i = Paid::Subscription.create
15
- assert_equal 'sub_test_subscription', i.id
9
+ context 'Subscription class' do
10
+ should 'be retrieveable' do
11
+ id = "subscription_id"
12
+ @mock.expects(:get).once.with("#{@subscription_url}/#{id}", anything, anything).returns(test_response(test_subscription))
13
+ subscription = Paid::Subscription.retrieve(id)
14
+ assert(subscription.is_a?(Paid::Subscription))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@subscription_url, anything, test_subscription).returns(test_response(test_subscription))
19
+ subscription = Paid::Subscription.create(test_subscription)
20
+ assert(subscription.is_a?(Paid::Subscription))
21
+ assert_equal(test_subscription[:id], subscription.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_subscription_list))
26
+
27
+ subscriptions = Paid::Subscription.all
28
+
29
+ assert(subscriptions.is_a?(Paid::APIList))
30
+ subscriptions.each do |subscription|
31
+ assert(subscription.is_a?(Paid::Subscription))
32
+ end
33
+ end
16
34
  end
17
35
 
18
- should 'subscriptions should be cancellable' do
19
- @mock.expects(:get).never
20
- @mock.expects(:post).once.returns(
21
- test_response(
22
- id: 'sub_test_subscription',
23
- cancelled_at: 123_456_789
24
- )
25
- )
26
- s = Paid::Subscription.new('test_subscription')
27
- s.cancel
28
- assert !s.cancelled_at.nil?
36
+ context 'Subscription instance' do
37
+ setup do
38
+ @subscription = Paid::Subscription.new(test_subscription[:id])
39
+ end
40
+
41
+ should 'be refreshable' do
42
+ @mock.expects(:get).once.with("#{@subscription_url}/#{@subscription.id}", anything, anything).returns(test_response(test_subscription))
43
+ @subscription.refresh
44
+ assert_equal(test_subscription[:customer], @subscription.customer)
45
+ end
46
+
47
+ should 'be cancellable' do
48
+ response = test_response(test_subscription.merge(:cancelled_at => 1425494198))
49
+ @mock.expects(:post).once.with("#{@subscription_url}/#{@subscription.id}/cancel", anything, anything).returns(response)
50
+
51
+ @subscription.cancel
52
+ assert_equal(1425494198, @subscription.cancelled_at)
53
+ end
29
54
  end
55
+
56
+ context 'Retrieved Paid::Subscription instance' do
57
+ setup do
58
+ @mock.expects(:get).once.returns(test_response(test_subscription))
59
+ @subscription = Paid::Subscription.retrieve('subscription_id')
60
+ end
61
+
62
+ should 'have the id attribute' do
63
+ assert_equal(test_subscription[:id], @subscription.id)
64
+ end
65
+
66
+ should 'have the object attribute' do
67
+ assert_equal(test_subscription[:object], @subscription.object)
68
+ end
69
+
70
+ should 'have the created_at attribute' do
71
+ assert_equal(test_subscription[:created_at], @subscription.created_at)
72
+ end
73
+
74
+ should 'have the starts_on attribute' do
75
+ assert_equal(test_subscription[:starts_on], @subscription.starts_on)
76
+ end
77
+
78
+ should 'have the next_transaction_on attribute' do
79
+ assert_equal(test_subscription[:next_transaction_on], @subscription.next_transaction_on)
80
+ end
81
+
82
+ should 'have & convert the plan attribute' do
83
+ assert_equal(test_subscription[:plan][:id], @subscription.plan.id)
84
+ assert(@subscription.plan.is_a?(Paid::Plan))
85
+ end
86
+
87
+ should 'have the customer attribute' do
88
+ assert_equal(test_subscription[:customer], @subscription.customer)
89
+ end
90
+
91
+ should 'have the started_at attribute' do
92
+ assert_equal(test_subscription[:started_at], @subscription.started_at)
93
+ end
94
+
95
+ should 'have the ended_at attribute' do
96
+ assert_equal(test_subscription[:ended_at], @subscription.ended_at)
97
+ end
98
+
99
+ should 'have the cancelled_at attribute' do
100
+ assert_equal(test_subscription[:cancelled_at], @subscription.cancelled_at)
101
+ end
102
+
103
+ end
104
+
105
+ should 'be registered' do
106
+ assert(APIClass.subclasses.include?(Paid::Subscription))
107
+ assert_equal(Paid::Subscription, APIClass.subclass_fetch("subscription"))
108
+ end
109
+
30
110
  end
31
111
  end
@@ -2,54 +2,127 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
4
  class TransactionTest < Test::Unit::TestCase
5
- should 'transactions should be listable' do
6
- @mock.expects(:get).once.returns(test_response(test_transaction_array))
7
- c = Paid::Transaction.all
8
- assert c.data.is_a? Array
9
- c.each do |transaction|
10
- assert transaction.is_a?(Paid::Transaction)
11
- end
5
+ setup do
6
+ @transaction_url = "#{Paid.api_base}/v0/transactions"
12
7
  end
13
8
 
14
- should 'transactions should not be deletable' do
15
- assert_raises NoMethodError do
16
- @mock.expects(:get).once.returns(test_response(test_transaction))
17
- c = Paid::Transaction.retrieve('test_transaction')
18
- c.delete
9
+ context 'Transaction class' do
10
+ should 'be retrieveable' do
11
+ id = "transaction_id"
12
+ @mock.expects(:get).once.with("#{@transaction_url}/#{id}", anything, anything).returns(test_response(test_transaction))
13
+ transaction = Paid::Transaction.retrieve(id)
14
+ assert(transaction.is_a?(Paid::Transaction))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@transaction_url, anything, test_transaction).returns(test_response(test_transaction))
19
+ transaction = Paid::Transaction.create(test_transaction)
20
+ assert(transaction.is_a?(Paid::Transaction))
21
+ assert_equal(test_transaction[:id], transaction.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_transaction_list))
26
+
27
+ transactions = Paid::Transaction.all
28
+
29
+ assert(transactions.is_a?(Paid::APIList))
30
+ transactions.each do |transaction|
31
+ assert(transaction.is_a?(Paid::Transaction))
32
+ end
19
33
  end
20
34
  end
21
35
 
22
- should 'transactions should be updateable' do
23
- @mock.expects(:get).once.returns(test_response(test_transaction))
24
- @mock.expects(:post).once.returns(test_response(test_transaction))
25
- c = Paid::Transaction.new('test_transaction')
26
- c.refresh
27
- c.mnemonic = 'New transaction description'
28
- c.save
36
+ context 'Transaction instance' do
37
+ setup do
38
+ @transaction = Paid::Transaction.new(test_transaction[:id])
39
+ end
40
+
41
+ should 'be refreshable' do
42
+ @mock.expects(:get).once.with("#{@transaction_url}/#{@transaction.id}", anything, anything).returns(test_response(test_transaction))
43
+ @transaction.refresh
44
+ assert_equal(test_transaction[:description], @transaction.description)
45
+ end
46
+
47
+ should 'be updateable' do
48
+ transaction = Paid::Transaction.new(test_transaction)
49
+ transaction.description = "new description"
50
+
51
+ @mock.expects(:put).once.with do |url, headers, params|
52
+ params == transaction.changed_attributes && url == "#{@transaction_url}/#{transaction.id}"
53
+ end.returns(test_response(test_transaction))
54
+
55
+ # This should update this instance with test_transaction since it was returned
56
+ transaction.save
57
+ assert_equal(test_transaction[:description], transaction.description)
58
+ end
59
+
60
+ should 'be able to mark as paid' do
61
+ paid_on = "2015-01-01"
62
+ response = test_response(test_invoice.merge(:paid => true, :paid_on => paid_on))
63
+ @mock.expects(:post).once.with("#{@transaction_url}/#{@transaction.id}/mark_as_paid", anything, { :paid_on => paid_on }).returns(response)
64
+
65
+ assert(!@transaction.paid)
66
+ @transaction.mark_as_paid(:paid_on => paid_on)
67
+ assert_equal(paid_on, @transaction.paid_on)
68
+ assert(@transaction.paid)
69
+ end
29
70
  end
30
71
 
31
- should 'execute should return a new, fully executed transaction when passed correct parameters' do
32
- @mock.expects(:post).with do |url, api_key, params|
33
- url == "#{Paid.api_base}/v0/transactions" && api_key.nil? && CGI.parse(params) == {
34
- 'amount' => ['100'],
35
- 'description' => ['a description'],
36
- 'customer' => ['cus_test_customer']
37
- }
38
- end.once.returns(test_response(test_transaction))
39
72
 
40
- c = Paid::Transaction.create(amount: 100,
41
- description: 'a description',
42
- customer: 'cus_test_customer')
73
+ context 'Retrieved Paid::Transaction instance' do
74
+ setup do
75
+ @mock.expects(:get).once.returns(test_response(test_transaction))
76
+ @transaction = Paid::Transaction.retrieve('transaction_id')
77
+ end
78
+
79
+ should 'have the id attribute' do
80
+ assert_equal(test_transaction[:id], @transaction.id)
81
+ end
82
+
83
+ should 'have the object attribute' do
84
+ assert_equal(test_transaction[:object], @transaction.object)
85
+ end
86
+
87
+ should 'have the amount attribute' do
88
+ assert_equal(test_transaction[:amount], @transaction.amount)
89
+ end
90
+
91
+ should 'have the description attribute' do
92
+ assert_equal(test_transaction[:description], @transaction.description)
93
+ end
94
+
95
+ should 'have the customer attribute' do
96
+ assert_equal(test_transaction[:customer], @transaction.customer)
97
+ end
98
+
99
+ should 'have the alias attribute' do
100
+ assert_equal(test_transaction[:alias], @transaction.alias)
101
+ end
102
+
103
+ should 'have the paid attribute' do
104
+ assert_equal(test_transaction[:paid], @transaction.paid)
105
+ end
106
+
107
+ should 'have the paid_on attribute' do
108
+ assert_equal(test_transaction[:paid_on], @transaction.paid_on)
109
+ end
110
+
111
+ should 'have the properties attribute' do
112
+ assert_equal(test_transaction[:properties], @transaction.properties)
113
+ end
114
+
115
+ should 'have the invoice attribute' do
116
+ assert_equal(test_transaction[:invoice], @transaction.invoice)
117
+ end
43
118
 
44
- assert !c.paid
45
119
  end
46
120
 
47
- should 'transactions should be able to be marked as paid' do
48
- @mock.expects(:get).never
49
- @mock.expects(:post).once.returns(test_response(id: 'tr_test_transaction', paid: true))
50
- t = Paid::Invoice.new('test_transaction')
51
- t.mark_as_paid
52
- assert t.paid
121
+ should 'be registered' do
122
+ assert(APIClass.subclasses.include?(Paid::Transaction))
123
+ assert_equal(Paid::Transaction, APIClass.subclass_fetch("transaction"))
53
124
  end
125
+
126
+
54
127
  end
55
128
  end
@@ -2,7 +2,7 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
4
  class UtilTest < Test::Unit::TestCase
5
- should "symbolize_names should convert names to symbols" do
5
+ should "symbolize_keys should convert keys to symbols" do
6
6
  start = {
7
7
  'foo' => 'bar',
8
8
  'array' => [{ 'foo' => 'bar' }],
@@ -22,38 +22,29 @@ module Paid
22
22
  }
23
23
  }
24
24
 
25
- symbolized = Paid::Util.symbolize_names(start)
25
+ symbolized = Paid::Util.symbolize_keys(start)
26
26
  assert_equal(finish, symbolized)
27
27
  end
28
28
 
29
- should "parse a nil opts argument" do
30
- api_key, headers = Paid::Util.parse_opts(nil)
31
- assert_equal({}, headers)
32
- assert_equal(nil, api_key)
33
- end
29
+ should 'query_array should convert { :a => "value" } to []' do
30
+ start = { :a => "value" }
31
+ finish = ["a=value"]
34
32
 
35
- should "parse a string opts argument" do
36
- api_key, headers = Paid::Util.parse_opts('foo')
37
- assert_equal({}, headers)
38
- assert_equal('foo', api_key)
33
+ assert_equal(finish, Paid::Util.query_array(start))
39
34
  end
40
35
 
41
- should "parse a hash opts argument with just api_key" do
42
- api_key, headers = Paid::Util.parse_opts({:api_key => 'foo'})
43
- assert_equal({}, headers)
44
- assert_equal('foo', api_key)
45
- end
36
+ should 'query_array should convert { :a => { :b => { :c => "cvalue" } } } to ["a[b][c]=cvalue"]' do
37
+ start = { :a => { :b => { :c => "cvalue" } } }
38
+ finish = ["a[b][c]=cvalue"]
46
39
 
47
- should "parse a hash opts argument with just idempotency_key" do
48
- api_key, headers = Paid::Util.parse_opts({:idempotency_key => 'foo'})
49
- assert_equal({:idempotency_key => 'foo'}, headers)
50
- assert_equal(nil, api_key)
40
+ assert_equal(finish, Paid::Util.query_array(start))
51
41
  end
52
42
 
53
- should "parse a hash opts argument both idempotency_key and api_key" do
54
- api_key, headers = Paid::Util.parse_opts({:api_key => 'bar', :idempotency_key => 'foo'})
55
- assert_equal({:idempotency_key => 'foo'}, headers)
56
- assert_equal('bar', api_key)
43
+ should 'query_array should convert { :a => [1, 2] } to ["a[]=1", "a[]=2"]' do
44
+ start = { :a => [1, 2] }
45
+ finish = ["a[]=1", "a[]=2"]
46
+
47
+ assert_equal(finish, Paid::Util.query_array(start))
57
48
  end
58
49
  end
59
50
  end
data/test/test_data.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module Paid
2
2
  module TestData
3
+
3
4
  def test_response(body, code=200)
4
5
  # When an exception is raised, restclient clobbers method_missing. Hence we
5
6
  # can't just use the stubs interface.
@@ -11,155 +12,205 @@ module Paid
11
12
  m
12
13
  end
13
14
 
14
- def test_alias(params={})
15
- id = params[:id] || 'al_test_alias'
15
+ def test_mock_resource
16
16
  {
17
- :object => "alias",
18
- :id => id,
19
- :name => 'test-alias',
20
- :customer => 'cus_test_customer'
21
- }.merge(params)
17
+ :id => 'test_mock_resource_id',
18
+ :object => 'mock_resource',
19
+ :name => 'test mr name',
20
+ :nested => {
21
+ :id => 'test_nested_id',
22
+ :object => 'nested_resource',
23
+ :price => 500
24
+ },
25
+ :thash => { :some_key => "some value" },
26
+ :tarray => ["abc", "xyz"]
27
+ }
22
28
  end
23
29
 
24
- def test_alias_array(params={})
30
+ def test_mock_resource_list
25
31
  {
26
- :data => [test_alias, test_alias, test_alias],
27
32
  :object => 'list',
28
- :url => '/v0/aliases'
33
+ :data => [test_mock_resource, test_mock_resource, test_mock_resource],
34
+ }
35
+ end
36
+
37
+ def test_account
38
+ {
39
+ :id => 'account_id',
40
+ :object => 'account',
41
+ :business_name => 'some co inc',
42
+ :business_url => 'http://www.somecoinc.com/',
43
+ :business_logo => 'http://www.somecoinc.com/logo.png'
29
44
  }
30
45
  end
31
46
 
32
- def test_customer(params={})
33
- id = params[:id] || 'cus_test_customer'
47
+ def test_customer
34
48
  {
35
- :transactions => [],
49
+ :id => "cus_DLjf9aDKE9fkdncz",
36
50
  :object => "customer",
37
- :id => id,
38
- :created => 1304114758
39
- }.merge(params)
51
+ :name => "Paid",
52
+ :email => "hello@paidapi.com",
53
+ :description => "Obviously this is just a description.",
54
+ :address_line1 => "2261 Market Street",
55
+ :address_line2 => "#567",
56
+ :address_city => "San Francisco",
57
+ :address_state => "CA",
58
+ :address_zip => "94114",
59
+ :phone => "4155069330",
60
+ :allow_ach => true,
61
+ :allow_check => true,
62
+ :allow_credit_card => true,
63
+ :allow_wire => true,
64
+ :terms => 30,
65
+ :billing_type => "invoice",
66
+ :billing_cycle => "manual",
67
+ :stripe_customer_id => nil,
68
+ :external_id => "customer_external_id",
69
+ :aliases => {
70
+ :object => "list",
71
+ :data => ["12345"]
72
+ }
73
+ }
40
74
  end
41
75
 
42
- def test_customer_array
76
+ def test_customer_list
43
77
  {
44
78
  :data => [test_customer, test_customer, test_customer],
45
- :object => 'list',
46
- :url => '/v0/customers'
79
+ :object => 'list'
47
80
  }
48
81
  end
49
82
 
50
- def test_transaction(params={})
51
- id = params[:id] || 'tr_test_transaction'
83
+ def test_invoice
52
84
  {
85
+ :object => "invoice",
86
+ :id => "inv_8KAu1BU4PiYnPE49XtN0A",
87
+ :summary => nil,
88
+ :chase_schedule => ["-7", "-1", "0", "1", "5", "10", "15", "20", "25", "30", "~1"],
89
+ :next_chase_on => nil,
90
+ :terms => 30,
91
+ :customer => "cus_XJuvZeQXQgKMrpUAzPbGA",
92
+ :issued_at => nil,
53
93
  :paid => false,
54
- :amount => 100,
55
- :id => id,
94
+ :url => "https://payments.paid.com/invoices/inv_8KAu1BU4PiYnPE49XtN0A"
95
+ }
96
+ end
97
+
98
+ def test_invoice_list
99
+ {
100
+ :data => [test_invoice, test_invoice, test_invoice],
101
+ :object => 'list'
102
+ }
103
+ end
104
+
105
+ def test_transaction
106
+ {
107
+ :id => 'tr_a09sd8a8s9df7asdf98',
56
108
  :object => "transaction",
109
+ :amount => 100,
57
110
  :description => 'a description',
58
- :created => 1304114826,
59
- :customer => 'cus_test_customer'
60
- }.merge(params)
111
+ :customer => 'cus_test_customer',
112
+ :paid => false,
113
+ :paid_on => nil,
114
+ :properties => {},
115
+ :invoice => 'inv_8KAu1BU4PiYnPE49XtN0A'
116
+ }
61
117
  end
62
118
 
63
- def test_transaction_array
119
+ def test_transaction_list
64
120
  {
65
121
  :data => [test_transaction, test_transaction, test_transaction],
66
- :object => 'list',
67
- :url => '/v0/transactions'
122
+ :object => 'list'
68
123
  }
69
124
  end
70
125
 
71
- def test_invoice
126
+ def test_plan
72
127
  {
73
- object: "invoice",
74
- id: "inv_test_invoice",
75
- summary: nil,
76
- chase_schedule: [
77
- "-7",
78
- "-1",
79
- "0",
80
- "1",
81
- "5",
82
- "10",
83
- "15",
84
- "20",
85
- "25",
86
- "30",
87
- "~1"
88
- ],
89
- next_chase_on: nil,
90
- terms: 30,
91
- due_date: nil,
92
- customer: "cus_test_customer",
93
- issued_at: nil
128
+ :object => "plan",
129
+ :id => "pl_F0h9MWFeZyXKVPHZ0bIcfQ",
130
+ :created_at => 1425494198,
131
+ :description => "Plan for testing stuff",
132
+ :name => "Test Plan",
133
+ :interval => "year",
134
+ :interval_count => 1,
135
+ :amount => 50000
94
136
  }
95
137
  end
96
138
 
97
- def test_invalid_api_key_error
139
+ def test_plan_list
98
140
  {
99
- :error => {
100
- :type => "invalid_request_error",
101
- :message => "Invalid API Key provided: invalid"
102
- }
141
+ :data => [test_plan, test_plan, test_plan],
142
+ :object => 'list'
103
143
  }
104
144
  end
105
145
 
106
- def test_missing_id_error
146
+ def test_event(data=test_invoice, type="invoice.generated")
107
147
  {
108
- :error => {
109
- :param => "id",
110
- :type => "invalid_request_error",
111
- :message => "Missing id"
112
- }
148
+ :id => "evt_b8DZtUtZs8sxs0EsCcMg",
149
+ :object => "event",
150
+ :created_at => 1421719697,
151
+ :type => type,
152
+ :data => data
113
153
  }
114
154
  end
115
155
 
116
- def test_api_error
156
+ def test_event_list
117
157
  {
118
- :error => {
119
- :type => "api_error"
120
- }
158
+ :data => [test_event, test_event(test_customer, "customer.created"), test_event(test_plan, "plan.created")],
159
+ :object => 'list'
121
160
  }
122
161
  end
123
162
 
124
- def test_plan(params={})
163
+ def test_subscription
125
164
  {
126
- :amount => 100,
127
- :id => 'pl_test_plan',
128
- :object => 'plan',
129
- :name => 'test-name',
130
- :description => 'a description',
131
- :interval => 'month',
132
- :interval_count => 3
133
- }.merge(params)
165
+ :id => "sub_IQSGpEv9mKr6NBkKTr4qfA",
166
+ :object => "subscription",
167
+ :created_at => 1425494242,
168
+ :starts_on => "2015-03-04",
169
+ :next_transaction_on => "2016-03-04",
170
+ :plan => test_plan,
171
+ :customer => "cus_VygTkKwTBgfjV3xo60wRRA",
172
+ :started_at => 1425494242,
173
+ :ended_at => 0,
174
+ :cancelled_at => 0
175
+ }
134
176
  end
135
177
 
136
- def test_plans_array(params={})
178
+ def test_subscription_list
137
179
  {
138
- :data => [test_plan, test_plan, test_plan],
139
- :object => 'list',
140
- :url => '/v0/plans'
180
+ :data => [test_subscription, test_subscription, test_subscription],
181
+ :object => 'list'
141
182
  }
142
183
  end
143
184
 
144
- def test_subscription(params={})
185
+
186
+
187
+ # Errors
188
+ def test_api_error
145
189
  {
146
- :amount => 100,
147
- :id => 'sub_test_subscription',
148
- :customer => 'cus_test_customer',
149
- :cancelled_at => nil,
150
- :ended_at => nil,
151
- :started_at => 123_456_789,
152
- :start_on => nil,
153
- :plan => 'pl_test_plan'
154
- }.merge(params)
190
+ :error => {
191
+ :type => "api_error"
192
+ }
193
+ }
155
194
  end
156
195
 
157
- def test_subscriptions_array(params={})
196
+ def test_invalid_api_key_error
158
197
  {
159
- :data => [test_subscription, test_subscription, test_subscription],
160
- :object => 'list',
161
- :url => '/v0/subscriptions'
198
+ :error => {
199
+ :type => "invalid_request_error",
200
+ :message => "Invalid API Key provided: invalid"
201
+ }
202
+ }
203
+ end
204
+
205
+ def test_missing_id_error
206
+ {
207
+ :error => {
208
+ :param => "id",
209
+ :type => "invalid_request_error",
210
+ :message => "Missing id"
211
+ }
162
212
  }
163
213
  end
214
+
164
215
  end
165
216
  end