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
@@ -2,43 +2,203 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
4
  class CustomerTest < Test::Unit::TestCase
5
- should "customers should be listable" do
6
- @mock.expects(:get).once.returns(test_response(test_customer_array))
7
- c = Paid::Customer.all.data
8
- assert c.kind_of? Array
9
- assert c[0].kind_of? Paid::Customer
5
+ setup do
6
+ @customer_url = "#{Paid.api_base}/v0/customers"
10
7
  end
11
8
 
12
- should "customers should be deletable" do
13
- @mock.expects(:delete).once.returns(test_response(test_customer({:deleted => true})))
14
- c = Paid::Customer.new("test_customer")
15
- c.delete
16
- assert c.deleted
9
+ context 'Customer class' do
10
+ should 'be retrieveable' do
11
+ id = "customer_id"
12
+ @mock.expects(:get).once.with("#{@customer_url}/#{id}", anything, anything).returns(test_response(test_customer))
13
+ customer = Paid::Customer.retrieve(id)
14
+ assert(customer.is_a?(Paid::Customer))
15
+ end
16
+
17
+ should 'be retrieveable by alias' do
18
+ al = "alias_for_cust"
19
+ @mock.expects(:get).once.with("#{Paid.api_base}/v0/aliases/#{al}", anything, anything).returns(test_response(test_customer))
20
+ customer = Paid::Customer.by_alias(al)
21
+ assert(customer.is_a?(Paid::Customer))
22
+ end
23
+
24
+ should 'be retrieveable by external_id' do
25
+ external_id = "external_id_for_cust"
26
+ @mock.expects(:get).once.with("#{@customer_url}/by_external_id/#{external_id}", anything, anything).returns(test_response(test_customer))
27
+ customer = Paid::Customer.by_external_id(external_id)
28
+ assert(customer.is_a?(Paid::Customer))
29
+ end
30
+
31
+ should 'be createable' do
32
+ @mock.expects(:post).once.with(@customer_url, anything, test_customer).returns(test_response(test_customer))
33
+ customer = Paid::Customer.create(test_customer)
34
+ assert(customer.is_a?(Paid::Customer))
35
+ assert_equal(test_customer[:id], customer.id)
36
+ end
37
+
38
+ should 'be listable' do
39
+ @mock.expects(:get).once.returns(test_response(test_customer_list))
40
+
41
+ customers = Paid::Customer.all
42
+
43
+ assert(customers.is_a?(Paid::APIList))
44
+ customers.each do |customer|
45
+ assert(customer.is_a?(Paid::Customer))
46
+ end
47
+ end
17
48
  end
18
49
 
19
- should "customers should be updateable" do
20
- @mock.expects(:get).once.returns(test_response(test_customer({:mnemonic => "foo"})))
21
- @mock.expects(:post).once.returns(test_response(test_customer({:mnemonic => "bar"})))
22
- c = Paid::Customer.new("test_customer").refresh
23
- assert_equal "foo", c.mnemonic
24
- c.mnemonic = "bar"
25
- c.save
26
- assert_equal "bar", c.mnemonic
50
+ context 'Customer instance' do
51
+ should 'be refreshable' do
52
+ @mock.expects(:get).once.with("#{@customer_url}/#{test_customer[:id]}", anything, anything).returns(test_response(test_customer))
53
+ customer = Paid::Customer.new(test_customer[:id])
54
+ customer.refresh
55
+ assert_equal(test_customer[:name], customer.name)
56
+ end
57
+
58
+ should 'be updateable' do
59
+ customer = Paid::Customer.new(test_customer)
60
+ customer.name = "new name"
61
+ customer.email = "new_email@domain.com"
62
+
63
+ @mock.expects(:put).once.with do |url, headers, params|
64
+ params == customer.changed_attributes && url == "#{@customer_url}/#{customer.id}"
65
+ end.returns(test_response(test_customer))
66
+
67
+ # This should update this instance with test_customer since it was returned
68
+ customer.save
69
+ assert_equal(test_customer[:name], customer.name)
70
+ assert_equal(test_customer[:email], customer.email)
71
+ end
72
+
73
+ should 'be able to generate an invoice' do
74
+ customer = Paid::Customer.new(test_customer)
75
+ @mock.expects(:post).once.with("#{@customer_url}/#{customer.id}/generate_invoice", anything, anything).returns(test_response(test_invoice))
76
+
77
+ invoice = customer.generate_invoice
78
+ assert(invoice.is_a?(Paid::Invoice))
79
+ end
80
+
81
+ should 'be able to list invoices' do
82
+ customer = Paid::Customer.new(test_customer)
83
+ @mock.expects(:get).once.with("#{Paid.api_base}#{Paid::Invoice.path}?customer=#{customer.id}", anything, anything).returns(test_response(test_invoice_list))
84
+
85
+ invoices = customer.invoices
86
+ assert(invoices.is_a?(Paid::APIList))
87
+ invoices.each do |invoice|
88
+ assert(invoice.is_a?(Paid::Invoice))
89
+ end
90
+ end
91
+
92
+ should 'be able to list transactions' do
93
+ customer = Paid::Customer.new(test_customer)
94
+ @mock.expects(:get).once.with("#{Paid.api_base}#{Paid::Transaction.path}?customer=#{customer.id}", anything, anything).returns(test_response(test_transaction_list))
95
+
96
+ transactions = customer.transactions
97
+ assert(transactions.is_a?(Paid::APIList))
98
+ transactions.each do |transaction|
99
+ assert(transaction.is_a?(Paid::Transaction))
100
+ end
101
+ end
27
102
  end
28
103
 
29
- should "create should return a new customer" do
30
- @mock.expects(:post).once.returns(test_response(test_customer))
31
- c = Paid::Customer.create
32
- assert_equal "cus_test_customer", c.id
104
+
105
+ context 'Retrieved Paid::Customer instance' do
106
+ setup do
107
+ @mock.expects(:get).once.returns(test_response(test_customer))
108
+ @customer = Paid::Customer.retrieve('customer_id')
109
+ end
110
+
111
+ should 'have the id attribute' do
112
+ assert_equal(test_customer[:id], @customer.id)
113
+ end
114
+
115
+ should 'have the object attribute' do
116
+ assert_equal(test_customer[:object], @customer.object)
117
+ end
118
+
119
+ should 'have the name attribute' do
120
+ assert_equal(test_customer[:name], @customer.name)
121
+ end
122
+
123
+ should 'have the email attribute' do
124
+ assert_equal(test_customer[:email], @customer.email)
125
+ end
126
+
127
+ should 'have the description attribute' do
128
+ assert_equal(test_customer[:description], @customer.description)
129
+ end
130
+
131
+ should 'have the phone attribute' do
132
+ assert_equal(test_customer[:phone], @customer.phone)
133
+ end
134
+
135
+ should 'have the address_line1 attribute' do
136
+ assert_equal(test_customer[:address_line1], @customer.address_line1)
137
+ end
138
+
139
+ should 'have the address_line2 attribute' do
140
+ assert_equal(test_customer[:address_line2], @customer.address_line2)
141
+ end
142
+
143
+ should 'have the address_city attribute' do
144
+ assert_equal(test_customer[:address_city], @customer.address_city)
145
+ end
146
+
147
+ should 'have the address_state attribute' do
148
+ assert_equal(test_customer[:address_state], @customer.address_state)
149
+ end
150
+
151
+ should 'have the address_zip attribute' do
152
+ assert_equal(test_customer[:address_zip], @customer.address_zip)
153
+ end
154
+
155
+ should 'have the allow_ach attribute' do
156
+ assert_equal(test_customer[:allow_ach], @customer.allow_ach)
157
+ end
158
+
159
+ should 'have the allow_wire attribute' do
160
+ assert_equal(test_customer[:allow_wire], @customer.allow_wire)
161
+ end
162
+
163
+ should 'have the allow_check attribute' do
164
+ assert_equal(test_customer[:allow_check], @customer.allow_check)
165
+ end
166
+
167
+ should 'have the allow_credit_card attribute' do
168
+ assert_equal(test_customer[:allow_credit_card], @customer.allow_credit_card)
169
+ end
170
+
171
+ should 'have the terms attribute' do
172
+ assert_equal(test_customer[:terms], @customer.terms)
173
+ end
174
+
175
+ should 'have the billing_type attribute' do
176
+ assert_equal(test_customer[:billing_type], @customer.billing_type)
177
+ end
178
+
179
+ should 'have the billing_cycle attribute' do
180
+ assert_equal(test_customer[:billing_cycle], @customer.billing_cycle)
181
+ end
182
+
183
+ should 'have the stripe_customer_id attribute' do
184
+ assert_equal(test_customer[:stripe_customer_id], @customer.stripe_customer_id)
185
+ end
186
+
187
+ should 'have the external_id attribute' do
188
+ assert_equal(test_customer[:external_id], @customer.external_id)
189
+ end
190
+
191
+ should 'have & convert the aliases attribute' do
192
+ assert(@customer.aliases.is_a?(Paid::APIList))
193
+ assert_equal(test_customer[:aliases][:data], @customer.aliases.data)
194
+ end
195
+
33
196
  end
34
197
 
35
- should "be able to generate invoice" do
36
- @mock.expects(:get).never
37
- @mock.expects(:post).once.returns(test_response(test_customer))
38
- c = Paid::Customer.create
39
- @mock.expects(:post).once.returns(test_response(test_invoice))
40
- i = c.generate_invoice
41
- assert i.kind_of?(Paid::Invoice)
198
+ should 'be registered' do
199
+ assert(APIClass.subclasses.include?(Paid::Customer))
200
+ assert_equal(Paid::Customer, APIClass.subclass_fetch("customer"))
42
201
  end
202
+
43
203
  end
44
204
  end
@@ -0,0 +1,74 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Paid
4
+ class EventTest < Test::Unit::TestCase
5
+ setup do
6
+ @event_url = "#{Paid.api_base}/v0/events"
7
+ end
8
+
9
+ context 'Event class' do
10
+ should 'be retrieveable' do
11
+ id = "event_id"
12
+ @mock.expects(:get).once.with("#{@event_url}/#{id}", anything, anything).returns(test_response(test_event))
13
+ event = Paid::Event.retrieve(id)
14
+ assert(event.is_a?(Paid::Event))
15
+ end
16
+
17
+ should 'be listable' do
18
+ @mock.expects(:get).once.returns(test_response(test_event_list))
19
+
20
+ events = Paid::Event.all
21
+
22
+ assert(events.is_a?(Paid::APIList))
23
+ events.each do |event|
24
+ assert(event.is_a?(Paid::Event))
25
+ end
26
+ end
27
+ end
28
+
29
+ context 'Event instance' do
30
+ should 'be refreshable' do
31
+ @mock.expects(:get).once.with("#{@event_url}/#{test_event[:id]}", anything, anything).returns(test_response(test_event))
32
+ event = Paid::Event.new(test_event[:id])
33
+ event.refresh
34
+ assert_equal(test_event[:type], event.type)
35
+ end
36
+ end
37
+
38
+ context 'Retrieved Paid::Event instance' do
39
+ setup do
40
+ @mock.expects(:get).once.returns(test_response(test_event))
41
+ @event = Paid::Event.retrieve('event_id')
42
+ end
43
+
44
+ should 'have the id attribute' do
45
+ assert_equal(test_event[:id], @event.id)
46
+ end
47
+
48
+ should 'have the object attribute' do
49
+ assert_equal(test_event[:object], @event.object)
50
+ end
51
+
52
+ should 'have the created_at attribute' do
53
+ assert_equal(test_event[:created_at], @event.created_at)
54
+ end
55
+
56
+ should 'have the type attribute' do
57
+ assert_equal(test_event[:type], @event.type)
58
+ end
59
+
60
+ should 'have & convert the data attribute' do
61
+ assert(@event.data.is_a?(Paid::APIClass))
62
+ event2 = Paid::Event.new(test_event(test_invoice))
63
+ assert(event2.data.is_a?(Paid::Invoice))
64
+ end
65
+
66
+ end
67
+
68
+ should 'be registered' do
69
+ assert(APIClass.subclasses.include?(Paid::Event))
70
+ assert_equal(Paid::Event, APIClass.subclass_fetch("event"))
71
+ end
72
+
73
+ end
74
+ end
@@ -2,32 +2,113 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
4
  class InvoiceTest < Test::Unit::TestCase
5
- should "retrieve should retrieve invoices" do
6
- @mock.expects(:get).once.returns(test_response(test_invoice))
7
- i = Paid::Invoice.retrieve('in_test_invoice')
8
- assert_equal 'inv_test_invoice', i.id
5
+ setup do
6
+ @invoice_url = "#{Paid.api_base}/v0/invoices"
9
7
  end
10
8
 
11
- should "create should create a new invoice" do
12
- @mock.expects(:post).once.returns(test_response(test_invoice))
13
- i = Paid::Invoice.create
14
- assert_equal "inv_test_invoice", i.id
9
+ context 'Invoice class' do
10
+ should 'be retrieveable' do
11
+ id = "invoice_id"
12
+ @mock.expects(:get).once.with("#{@invoice_url}/#{id}", anything, anything).returns(test_response(test_invoice))
13
+ invoice = Paid::Invoice.retrieve(id)
14
+ assert(invoice.is_a?(Paid::Invoice))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@invoice_url, anything, test_invoice).returns(test_response(test_invoice))
19
+ invoice = Paid::Invoice.create(test_invoice)
20
+ assert(invoice.is_a?(Paid::Invoice))
21
+ assert_equal(test_invoice[:id], invoice.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_invoice_list))
26
+
27
+ invoices = Paid::Invoice.all
28
+
29
+ assert(invoices.is_a?(Paid::APIList))
30
+ invoices.each do |invoice|
31
+ assert(invoice.is_a?(Paid::Invoice))
32
+ end
33
+ end
15
34
  end
16
35
 
17
- should "invoices should be issuable" do
18
- @mock.expects(:get).never
19
- @mock.expects(:post).once.returns(test_response({:id => "inv_test_invoice", :issued_at => 123467890}))
20
- i = Paid::Invoice.new("test_invoice")
21
- i.issue
22
- assert !i.issued_at.nil?
36
+ context 'Invoice instance' do
37
+ setup do
38
+ @invoice = Paid::Invoice.new(test_invoice[:id])
39
+ end
40
+
41
+ should 'be refreshable' do
42
+ @mock.expects(:get).once.with("#{@invoice_url}/#{@invoice.id}", anything, anything).returns(test_response(test_invoice))
43
+ @invoice.refresh
44
+ assert_equal(test_invoice[:summary], @invoice.summary)
45
+ end
46
+
47
+ should 'be able to mark as paid' do
48
+ via = :ach
49
+ @mock.expects(:post).once.with("#{@invoice_url}/#{@invoice.id}/mark_as_paid", anything, { :via => via }).returns(test_response(test_invoice))
50
+
51
+ @invoice.mark_as_paid(:via => via)
52
+ assert_equal(test_invoice[:summary], @invoice.summary)
53
+ end
54
+
55
+ should 'be issuable' do
56
+ @mock.expects(:post).once.with("#{@invoice_url}/#{@invoice.id}/issue", anything, anything).returns(test_response(test_invoice))
57
+
58
+ @invoice.issue
59
+ assert_equal(test_invoice[:summary], @invoice.summary)
60
+ end
23
61
  end
24
62
 
25
- should "invoices should be able to be marked as paid" do
26
- @mock.expects(:get).never
27
- @mock.expects(:post).once.returns(test_response({:id => "inv_test_invoice", :paid => true}))
28
- i = Paid::Invoice.new("test_invoice")
29
- i.mark_as_paid
30
- assert i.paid
63
+
64
+ context 'Retrieved Paid::Invoice instance' do
65
+ setup do
66
+ @mock.expects(:get).once.returns(test_response(test_invoice))
67
+ @invoice = Paid::Invoice.retrieve('invoice_id')
68
+ end
69
+
70
+ should 'have the id attribute' do
71
+ assert_equal(test_invoice[:id], @invoice.id)
72
+ end
73
+
74
+ should 'have the object attribute' do
75
+ assert_equal(test_invoice[:object], @invoice.object)
76
+ end
77
+
78
+ should 'have the summary attribute' do
79
+ assert_equal(test_invoice[:summary], @invoice.summary)
80
+ end
81
+
82
+ should 'have the chase_schedule attribute' do
83
+ assert_equal(test_invoice[:chase_schedule], @invoice.chase_schedule)
84
+ end
85
+
86
+ should 'have the next_chase_on attribute' do
87
+ assert_equal(test_invoice[:next_chase_on], @invoice.next_chase_on)
88
+ end
89
+
90
+ should 'have the customer attribute' do
91
+ assert_equal(test_invoice[:customer], @invoice.customer)
92
+ end
93
+
94
+ should 'have the issued_at attribute' do
95
+ assert_equal(test_invoice[:issued_at], @invoice.issued_at)
96
+ end
97
+
98
+ should 'have the terms attribute' do
99
+ assert_equal(test_invoice[:terms], @invoice.terms)
100
+ end
101
+
102
+ should 'have the url attribute' do
103
+ assert_equal(test_invoice[:url], @invoice.url)
104
+ end
105
+
31
106
  end
107
+
108
+ should 'be registered' do
109
+ assert(APIClass.subclasses.include?(Paid::Invoice))
110
+ assert_equal(Paid::Invoice, APIClass.subclass_fetch("invoice"))
111
+ end
112
+
32
113
  end
33
114
  end
@@ -2,16 +2,92 @@ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  module Paid
4
4
  class PlanTest < Test::Unit::TestCase
5
- should "retrieve should retrieve plans" do
6
- @mock.expects(:get).once.returns(test_response(test_plan))
7
- i = Paid::Plan.retrieve('in_test_plan')
8
- assert_equal 'pl_test_plan', i.id
5
+ setup do
6
+ @plan_url = "#{Paid.api_base}/v0/plans"
9
7
  end
10
8
 
11
- should "create should create a new plan" do
12
- @mock.expects(:post).once.returns(test_response(test_plan))
13
- i = Paid::Plan.create
14
- assert_equal "pl_test_plan", i.id
9
+ context 'Plan class' do
10
+ should 'be retrieveable' do
11
+ id = "plan_id"
12
+ @mock.expects(:get).once.with("#{@plan_url}/#{id}", anything, anything).returns(test_response(test_plan))
13
+ plan = Paid::Plan.retrieve(id)
14
+ assert(plan.is_a?(Paid::Plan))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@plan_url, anything, test_plan).returns(test_response(test_plan))
19
+ plan = Paid::Plan.create(test_plan)
20
+ assert(plan.is_a?(Paid::Plan))
21
+ assert_equal(test_plan[:id], plan.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_plan_list))
26
+
27
+ plans = Paid::Plan.all
28
+
29
+ assert(plans.is_a?(Paid::APIList))
30
+ plans.each do |plan|
31
+ assert(plan.is_a?(Paid::Plan))
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'Plan instance' do
37
+ should 'be refreshable' do
38
+ @mock.expects(:get).once.with("#{@plan_url}/#{test_plan[:id]}", anything, anything).returns(test_response(test_plan))
39
+ plan = Paid::Plan.new(test_plan[:id])
40
+ plan.refresh
41
+ assert_equal(test_plan[:name], plan.name)
42
+ end
43
+ end
44
+
45
+
46
+ context 'Retrieved Paid::Plan instance' do
47
+ setup do
48
+ @mock.expects(:get).once.returns(test_response(test_plan))
49
+ @plan = Paid::Plan.retrieve('plan_id')
50
+ end
51
+
52
+ should 'have the id attribute' do
53
+ assert_equal(test_plan[:id], @plan.id)
54
+ end
55
+
56
+ should 'have the object attribute' do
57
+ assert_equal(test_plan[:object], @plan.object)
58
+ end
59
+
60
+ should 'have the created_at attribute' do
61
+ assert_equal(test_plan[:created_at], @plan.created_at)
62
+ end
63
+
64
+ should 'have the description attribute' do
65
+ assert_equal(test_plan[:description], @plan.description)
66
+ end
67
+
68
+ should 'have the name attribute' do
69
+ assert_equal(test_plan[:name], @plan.name)
70
+ end
71
+
72
+ should 'have the interval attribute' do
73
+ assert_equal(test_plan[:interval], @plan.interval)
74
+ end
75
+
76
+ should 'have the interval_count attribute' do
77
+ assert_equal(test_plan[:interval_count], @plan.interval_count)
78
+ end
79
+
80
+ should 'have the amount attribute' do
81
+ assert_equal(test_plan[:amount], @plan.amount)
82
+ end
83
+
84
+ end
85
+
86
+ should 'be registered' do
87
+ assert(APIClass.subclasses.include?(Paid::Plan))
88
+ assert_equal(Paid::Plan, APIClass.subclass_fetch("plan"))
15
89
  end
90
+
91
+
16
92
  end
17
93
  end