invoiced 0.14.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +2 -1
- data/lib/invoiced/coupon.rb +10 -0
- data/lib/invoiced/credit_note.rb +8 -0
- data/lib/invoiced/customer.rb +29 -0
- data/lib/invoiced/estimate.rb +8 -0
- data/lib/invoiced/invoice.rb +31 -1
- data/lib/invoiced/letter.rb +5 -0
- data/lib/invoiced/note.rb +10 -0
- data/lib/invoiced/subscription.rb +6 -0
- data/lib/invoiced/task.rb +10 -0
- data/lib/invoiced/tax_rate.rb +10 -0
- data/lib/invoiced/text_message.rb +5 -0
- data/lib/invoiced/transaction.rb +6 -0
- data/lib/invoiced/version.rb +1 -1
- data/lib/invoiced.rb +11 -1
- data/test/invoiced/coupon_test.rb +90 -0
- data/test/invoiced/credit_note_test.rb +14 -0
- data/test/invoiced/customer_test.rb +71 -2
- data/test/invoiced/estimate_test.rb +14 -0
- data/test/invoiced/invoice_test.rb +69 -1
- data/test/invoiced/note_test.rb +90 -0
- data/test/invoiced/subscription_test.rb +13 -0
- data/test/invoiced/task_test.rb +90 -0
- data/test/invoiced/tax_rate_test.rb +90 -0
- data/test/invoiced/transaction_test.rb +15 -0
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 70ebd92f8b1b9caeb8ae322330450c69419c767181a9d69dcf58d780fcd61073
|
4
|
+
data.tar.gz: 682b5d3ae99ba0b0a1d9b84549e05caee01ca16e697a6b6b9359e5e6b62251c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be0b700fb8a50060abc54b3d347240919096f3040c9c2079957a436487478c384a275518c69dcf6196294d171f98d6e0811197945a6adc5d8b009fc52aca193b
|
7
|
+
data.tar.gz: b969af7e6fcc78554e592fb7859dea19741954fc36fb002232c39d4fca76242165368dce9be296ec4ac7e184e39a5e01534a6d118ac007477ee7d76693aaf056
|
data/.gitignore
CHANGED
data/lib/invoiced/credit_note.rb
CHANGED
@@ -35,5 +35,13 @@ module Invoiced
|
|
35
35
|
|
36
36
|
return attachments, metadata
|
37
37
|
end
|
38
|
+
|
39
|
+
def void()
|
40
|
+
response = @client.request(:post, "#{self.endpoint()}/void", {})
|
41
|
+
|
42
|
+
refresh_from(response[:body].dup.merge({:id => self.id}))
|
43
|
+
|
44
|
+
return response[:code] == 200
|
45
|
+
end
|
38
46
|
end
|
39
47
|
end
|
data/lib/invoiced/customer.rb
CHANGED
@@ -15,6 +15,22 @@ module Invoiced
|
|
15
15
|
Util.build_objects(email, response[:body])
|
16
16
|
end
|
17
17
|
|
18
|
+
def send_statement_sms(params={}, opts={})
|
19
|
+
response = @client.request(:post, "#{self.endpoint()}/text_messages", params, opts)
|
20
|
+
|
21
|
+
# build text message objects
|
22
|
+
text_message = TextMessage.new(@client)
|
23
|
+
Util.build_objects(text_message, response[:body])
|
24
|
+
end
|
25
|
+
|
26
|
+
def send_statement_letter(params={}, opts={})
|
27
|
+
response = @client.request(:post, "#{self.endpoint()}/letters", params, opts)
|
28
|
+
|
29
|
+
# build letter objects
|
30
|
+
letter = Letter.new(@client)
|
31
|
+
Util.build_objects(letter, response[:body])
|
32
|
+
end
|
33
|
+
|
18
34
|
def balance
|
19
35
|
response = @client.request(:get, "#{self.endpoint()}/balance")
|
20
36
|
|
@@ -31,6 +47,11 @@ module Invoiced
|
|
31
47
|
line.set_endpoint_base(self.endpoint())
|
32
48
|
end
|
33
49
|
|
50
|
+
def list_notes()
|
51
|
+
note = Note.new(@client)
|
52
|
+
note.set_endpoint_base(self.endpoint())
|
53
|
+
end
|
54
|
+
|
34
55
|
def invoice(params={}, opts={})
|
35
56
|
response = @client.request(:post, "#{self.endpoint()}/invoices", params, opts)
|
36
57
|
|
@@ -38,5 +59,13 @@ module Invoiced
|
|
38
59
|
invoice = Invoice.new(@client)
|
39
60
|
Util.convert_to_object(invoice, response[:body])
|
40
61
|
end
|
62
|
+
|
63
|
+
def consolidate_invoices(params={})
|
64
|
+
response = @client.request(:post, "#{self.endpoint()}/consolidate_invoices", params)
|
65
|
+
|
66
|
+
# build invoice object
|
67
|
+
invoice = Invoice.new(@client)
|
68
|
+
Util.convert_to_object(invoice, response[:body])
|
69
|
+
end
|
41
70
|
end
|
42
71
|
end
|
data/lib/invoiced/estimate.rb
CHANGED
@@ -43,5 +43,13 @@ module Invoiced
|
|
43
43
|
|
44
44
|
return attachments, metadata
|
45
45
|
end
|
46
|
+
|
47
|
+
def void()
|
48
|
+
response = @client.request(:post, "#{self.endpoint()}/void", {})
|
49
|
+
|
50
|
+
refresh_from(response[:body].dup.merge({:id => self.id}))
|
51
|
+
|
52
|
+
return response[:code] == 200
|
53
|
+
end
|
46
54
|
end
|
47
55
|
end
|
data/lib/invoiced/invoice.rb
CHANGED
@@ -15,6 +15,23 @@ module Invoiced
|
|
15
15
|
Util.build_objects(email, response[:body])
|
16
16
|
end
|
17
17
|
|
18
|
+
def send_sms(params={}, opts={})
|
19
|
+
response = @client.request(:post, "#{self.endpoint()}/text_messages", params, opts)
|
20
|
+
|
21
|
+
# build text message objects
|
22
|
+
text_message = TextMessage.new(@client)
|
23
|
+
Util.build_objects(text_message, response[:body])
|
24
|
+
end
|
25
|
+
|
26
|
+
def send_letter(params={}, opts={})
|
27
|
+
response = @client.request(:post, "#{self.endpoint()}/letters", params, opts)
|
28
|
+
|
29
|
+
# build letter objects
|
30
|
+
|
31
|
+
letter = Letter.new(@client)
|
32
|
+
Util.build_objects(letter, response[:body])
|
33
|
+
end
|
34
|
+
|
18
35
|
def pay(opts={})
|
19
36
|
response = @client.request(:post, "#{self.endpoint()}/pay", {}, opts)
|
20
37
|
|
@@ -33,7 +50,7 @@ module Invoiced
|
|
33
50
|
if !attachment.has_key?(:id)
|
34
51
|
attachment[:id] = attachment[:file][:id]
|
35
52
|
end
|
36
|
-
|
53
|
+
end
|
37
54
|
|
38
55
|
# build objects
|
39
56
|
attachment = Attachment.new(@client)
|
@@ -49,5 +66,18 @@ module Invoiced
|
|
49
66
|
paymentPlan = PaymentPlan.new(@client)
|
50
67
|
paymentPlan.set_endpoint_base(self.endpoint())
|
51
68
|
end
|
69
|
+
|
70
|
+
def notes()
|
71
|
+
note = Note.new(@client)
|
72
|
+
note.set_endpoint_base(self.endpoint())
|
73
|
+
end
|
74
|
+
|
75
|
+
def void()
|
76
|
+
response = @client.request(:post, "#{self.endpoint()}/void", {})
|
77
|
+
|
78
|
+
refresh_from(response[:body].dup.merge({:id => self.id}))
|
79
|
+
|
80
|
+
return response[:code] == 200
|
81
|
+
end
|
52
82
|
end
|
53
83
|
end
|
data/lib/invoiced/transaction.rb
CHANGED
@@ -20,5 +20,11 @@ module Invoiced
|
|
20
20
|
|
21
21
|
Util.convert_to_object(self, response[:body])
|
22
22
|
end
|
23
|
+
|
24
|
+
def initiate_charge(params={}, opts={})
|
25
|
+
response = @client.request(:post, "/charges", params, opts)
|
26
|
+
|
27
|
+
Util.convert_to_object(self, response[:body])
|
28
|
+
end
|
23
29
|
end
|
24
30
|
end
|
data/lib/invoiced/version.rb
CHANGED
data/lib/invoiced.rb
CHANGED
@@ -21,6 +21,7 @@ require 'invoiced/object'
|
|
21
21
|
require 'invoiced/attachment'
|
22
22
|
require 'invoiced/catalog_item'
|
23
23
|
require 'invoiced/contact'
|
24
|
+
require 'invoiced/coupon'
|
24
25
|
require 'invoiced/credit_note'
|
25
26
|
require 'invoiced/customer'
|
26
27
|
require 'invoiced/email'
|
@@ -28,10 +29,15 @@ require 'invoiced/estimate'
|
|
28
29
|
require 'invoiced/event'
|
29
30
|
require 'invoiced/file'
|
30
31
|
require 'invoiced/invoice'
|
32
|
+
require 'invoiced/letter'
|
31
33
|
require 'invoiced/line_item'
|
34
|
+
require 'invoiced/note'
|
32
35
|
require 'invoiced/payment_plan'
|
33
36
|
require 'invoiced/plan'
|
34
37
|
require 'invoiced/subscription'
|
38
|
+
require 'invoiced/task'
|
39
|
+
require 'invoiced/tax_rate'
|
40
|
+
require 'invoiced/text_message'
|
35
41
|
require 'invoiced/transaction'
|
36
42
|
|
37
43
|
module Invoiced
|
@@ -43,7 +49,7 @@ module Invoiced
|
|
43
49
|
ReadTimeout = 80
|
44
50
|
|
45
51
|
attr_reader :api_key, :api_url, :sandbox, :sso_key
|
46
|
-
attr_reader :CatalogItem, :CreditNote, :Customer, :Estimate, :Event, :File, :Invoice, :Plan, :Subscription, :Transaction
|
52
|
+
attr_reader :CatalogItem, :Coupon, :CreditNote, :Customer, :Estimate, :Event, :File, :Invoice, :Note, :Plan, :Subscription, :Task, :TaxRate, :Transaction
|
47
53
|
|
48
54
|
def initialize(api_key, sandbox=false, sso_key=false)
|
49
55
|
@api_key = api_key
|
@@ -53,14 +59,18 @@ module Invoiced
|
|
53
59
|
|
54
60
|
# Object endpoints
|
55
61
|
@CatalogItem = Invoiced::CatalogItem.new(self)
|
62
|
+
@Coupon = Invoiced::Coupon.new(self)
|
56
63
|
@CreditNote = Invoiced::CreditNote.new(self)
|
57
64
|
@Customer = Invoiced::Customer.new(self)
|
58
65
|
@Estimate = Invoiced::Estimate.new(self)
|
59
66
|
@Event = Invoiced::Event.new(self)
|
60
67
|
@File = Invoiced::File.new(self)
|
61
68
|
@Invoice = Invoiced::Invoice.new(self)
|
69
|
+
@Note = Invoiced::Note.new(self)
|
62
70
|
@Plan = Invoiced::Plan.new(self)
|
63
71
|
@Subscription = Invoiced::Subscription.new(self)
|
72
|
+
@Task = Invoiced::Task.new(self)
|
73
|
+
@TaxRate = Invoiced::TaxRate.new(self)
|
64
74
|
@Transaction = Invoiced::Transaction.new(self)
|
65
75
|
end
|
66
76
|
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Invoiced
|
4
|
+
class CouponTest < Test::Unit::TestCase
|
5
|
+
should "return the api endpoint" do
|
6
|
+
coupon = Coupon.new(@client, "test")
|
7
|
+
assert_equal('/coupons/test', coupon.endpoint())
|
8
|
+
end
|
9
|
+
|
10
|
+
should "create a coupon" do
|
11
|
+
mockResponse = mock('RestClient::Response')
|
12
|
+
mockResponse.stubs(:code).returns(201)
|
13
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test Coupon"}')
|
14
|
+
mockResponse.stubs(:headers).returns({})
|
15
|
+
|
16
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
17
|
+
|
18
|
+
coupon = @client.Coupon.create({:name => "Test Coupon"})
|
19
|
+
|
20
|
+
assert_instance_of(Invoiced::Coupon, coupon)
|
21
|
+
assert_equal("test", coupon.id)
|
22
|
+
assert_equal('Test Coupon', coupon.name)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "retrieve a coupon" do
|
26
|
+
mockResponse = mock('RestClient::Response')
|
27
|
+
mockResponse.stubs(:code).returns(200)
|
28
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test Coupon"}')
|
29
|
+
mockResponse.stubs(:headers).returns({})
|
30
|
+
|
31
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
32
|
+
|
33
|
+
coupon = @client.Coupon.retrieve("test")
|
34
|
+
|
35
|
+
assert_instance_of(Invoiced::Coupon, coupon)
|
36
|
+
assert_equal("test", coupon.id)
|
37
|
+
assert_equal('Test Coupon', coupon.name)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "not update a coupon when no params" do
|
41
|
+
coupon = Coupon.new(@client, "test")
|
42
|
+
assert_false(coupon.save)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "update a coupon" do
|
46
|
+
mockResponse = mock('RestClient::Response')
|
47
|
+
mockResponse.stubs(:code).returns(200)
|
48
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Testing Coupon"}')
|
49
|
+
mockResponse.stubs(:headers).returns({})
|
50
|
+
|
51
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
52
|
+
|
53
|
+
coupon = Coupon.new(@client, "test")
|
54
|
+
coupon.name = "Testing Coupon"
|
55
|
+
assert_true(coupon.save)
|
56
|
+
|
57
|
+
assert_equal(coupon.name, "Testing Coupon")
|
58
|
+
end
|
59
|
+
|
60
|
+
should "list all coupons" do
|
61
|
+
mockResponse = mock('RestClient::Response')
|
62
|
+
mockResponse.stubs(:code).returns(200)
|
63
|
+
mockResponse.stubs(:body).returns('[{"id":"test","name":"Test Coupon"}]')
|
64
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/catalog_items?per_page=25&page=1>; rel="self", <https://api.invoiced.com/catalog_items?per_page=25&page=1>; rel="first", <https://api.invoiced.com/catalog_items?per_page=25&page=1>; rel="last"')
|
65
|
+
|
66
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
67
|
+
|
68
|
+
coupons, metadata = @client.Coupon.list
|
69
|
+
|
70
|
+
assert_instance_of(Array, coupons)
|
71
|
+
assert_equal(1, coupons.length)
|
72
|
+
assert_equal("test", coupons[0].id)
|
73
|
+
|
74
|
+
assert_instance_of(Invoiced::List, metadata)
|
75
|
+
assert_equal(15, metadata.total_count)
|
76
|
+
end
|
77
|
+
|
78
|
+
should "delete a coupon" do
|
79
|
+
mockResponse = mock('RestClient::Response')
|
80
|
+
mockResponse.stubs(:code).returns(204)
|
81
|
+
mockResponse.stubs(:body).returns('')
|
82
|
+
mockResponse.stubs(:headers).returns({})
|
83
|
+
|
84
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
85
|
+
|
86
|
+
coupon = Coupon.new(@client, "test")
|
87
|
+
assert_true(coupon.delete)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -122,5 +122,19 @@ module Invoiced
|
|
122
122
|
assert_instance_of(Invoiced::List, metadata)
|
123
123
|
assert_equal(10, metadata.total_count)
|
124
124
|
end
|
125
|
+
|
126
|
+
should "void a credit note" do
|
127
|
+
mockResponse = mock('RestClient::Response')
|
128
|
+
mockResponse.stubs(:code).returns(200)
|
129
|
+
mockResponse.stubs(:body).returns('{"id":123,"status":"voided"}')
|
130
|
+
mockResponse.stubs(:headers).returns({})
|
131
|
+
|
132
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
133
|
+
|
134
|
+
credit_note = CreditNote.new(@client, 123)
|
135
|
+
assert_true(credit_note.void)
|
136
|
+
|
137
|
+
assert_equal(credit_note.status, 'voided')
|
138
|
+
end
|
125
139
|
end
|
126
140
|
end
|
@@ -87,7 +87,7 @@ module Invoiced
|
|
87
87
|
assert_true(customer.delete)
|
88
88
|
end
|
89
89
|
|
90
|
-
should "send an account statement" do
|
90
|
+
should "send an account statement by email" do
|
91
91
|
mockResponse = mock('RestClient::Response')
|
92
92
|
mockResponse.stubs(:code).returns(201)
|
93
93
|
mockResponse.stubs(:body).returns('[{"id":4567,"email":"test@example.com"}]')
|
@@ -104,6 +104,40 @@ module Invoiced
|
|
104
104
|
assert_equal(4567, emails[0].id)
|
105
105
|
end
|
106
106
|
|
107
|
+
should "send an account statement by text message" do
|
108
|
+
mockResponse = mock('RestClient::Response')
|
109
|
+
mockResponse.stubs(:code).returns(201)
|
110
|
+
mockResponse.stubs(:body).returns('[{"id":5678,"state":"sent"}]')
|
111
|
+
mockResponse.stubs(:headers).returns({})
|
112
|
+
|
113
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
114
|
+
|
115
|
+
customer = Customer.new(@client, 123)
|
116
|
+
text_messages = customer.send_statement_sms(:type => "open_item", :message => "example")
|
117
|
+
|
118
|
+
assert_instance_of(Array, text_messages)
|
119
|
+
assert_equal(1, text_messages.length)
|
120
|
+
assert_instance_of(Invoiced::TextMessage, text_messages[0])
|
121
|
+
assert_equal(5678, text_messages[0].id)
|
122
|
+
end
|
123
|
+
|
124
|
+
should "send an account statement by letter" do
|
125
|
+
mockResponse = mock('RestClient::Response')
|
126
|
+
mockResponse.stubs(:code).returns(201)
|
127
|
+
mockResponse.stubs(:body).returns('[{"id":6789,"state":"queued"}]')
|
128
|
+
mockResponse.stubs(:headers).returns({})
|
129
|
+
|
130
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
131
|
+
|
132
|
+
customer = Customer.new(@client, 123)
|
133
|
+
letters = customer.send_statement_letter(:type => "open_item")
|
134
|
+
|
135
|
+
assert_instance_of(Array, letters)
|
136
|
+
assert_equal(1, letters.length)
|
137
|
+
assert_instance_of(Invoiced::Letter, letters[0])
|
138
|
+
assert_equal(6789, letters[0].id)
|
139
|
+
end
|
140
|
+
|
107
141
|
should "retrieve a customer's balance" do
|
108
142
|
mockResponse = mock('RestClient::Response')
|
109
143
|
mockResponse.stubs(:code).returns(200)
|
@@ -141,7 +175,7 @@ module Invoiced
|
|
141
175
|
assert_equal('/customers/456/contacts/123', contact.endpoint())
|
142
176
|
end
|
143
177
|
|
144
|
-
should "list all of the customer's
|
178
|
+
should "list all of the customer's contacts" do
|
145
179
|
mockResponse = mock('RestClient::Response')
|
146
180
|
mockResponse.stubs(:code).returns(200)
|
147
181
|
mockResponse.stubs(:body).returns('[{"id":123,"name":"Nancy"}]')
|
@@ -246,5 +280,40 @@ module Invoiced
|
|
246
280
|
assert_instance_of(Invoiced::Invoice, invoice)
|
247
281
|
assert_equal(4567, invoice.id)
|
248
282
|
end
|
283
|
+
|
284
|
+
should "list all the customer's notes" do
|
285
|
+
mockResponse = mock('RestClient::Response')
|
286
|
+
mockResponse.stubs(:code).returns(200)
|
287
|
+
mockResponse.stubs(:body).returns('[{"id":1212,"notes":"example"}]')
|
288
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="self", <https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="first", <https://api.invoiced.com/customers/123/notes?per_page=25&page=1>; rel="last"')
|
289
|
+
|
290
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
291
|
+
|
292
|
+
customer = Customer.new(@client, 123)
|
293
|
+
notes, metadata = customer.list_notes.list
|
294
|
+
|
295
|
+
assert_instance_of(Array, notes)
|
296
|
+
assert_equal(1, notes.length)
|
297
|
+
assert_equal(1212, notes[0].id)
|
298
|
+
assert_equal('/customers/123/notes/1212', notes[0].endpoint())
|
299
|
+
|
300
|
+
assert_instance_of(Invoiced::List, metadata)
|
301
|
+
assert_equal(15, metadata.total_count)
|
302
|
+
end
|
303
|
+
|
304
|
+
should "create a consolidated invoice" do
|
305
|
+
mockResponse = mock('RestClient::Response')
|
306
|
+
mockResponse.stubs(:code).returns(201)
|
307
|
+
mockResponse.stubs(:body).returns('{"id": 999,"total":1000}')
|
308
|
+
mockResponse.stubs(:headers).returns({})
|
309
|
+
|
310
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
311
|
+
|
312
|
+
customer = Customer.new(@client, 123)
|
313
|
+
invoice = customer.consolidate_invoices
|
314
|
+
|
315
|
+
assert_instance_of(Invoiced::Invoice, invoice)
|
316
|
+
assert_equal(invoice.id, 999)
|
317
|
+
end
|
249
318
|
end
|
250
319
|
end
|
@@ -137,5 +137,19 @@ module Invoiced
|
|
137
137
|
assert_instance_of(Invoiced::List, metadata)
|
138
138
|
assert_equal(10, metadata.total_count)
|
139
139
|
end
|
140
|
+
|
141
|
+
should "void an estimate" do
|
142
|
+
mockResponse = mock('RestClient::Response')
|
143
|
+
mockResponse.stubs(:code).returns(200)
|
144
|
+
mockResponse.stubs(:body).returns('{"id":123,"status":"voided"}')
|
145
|
+
mockResponse.stubs(:headers).returns({})
|
146
|
+
|
147
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
148
|
+
|
149
|
+
estimate = Estimate.new(@client, 123)
|
150
|
+
assert_true(estimate.void)
|
151
|
+
|
152
|
+
assert_equal(estimate.status, 'voided')
|
153
|
+
end
|
140
154
|
end
|
141
155
|
end
|
@@ -87,7 +87,7 @@ module Invoiced
|
|
87
87
|
assert_true(invoice.delete)
|
88
88
|
end
|
89
89
|
|
90
|
-
should "send an invoice" do
|
90
|
+
should "send an invoice by email" do
|
91
91
|
mockResponse = mock('RestClient::Response')
|
92
92
|
mockResponse.stubs(:code).returns(201)
|
93
93
|
mockResponse.stubs(:body).returns('[{"id":4567,"email":"test@example.com"}]')
|
@@ -104,6 +104,40 @@ module Invoiced
|
|
104
104
|
assert_equal(4567, emails[0].id)
|
105
105
|
end
|
106
106
|
|
107
|
+
should "send an invoice by text message" do
|
108
|
+
mockResponse = mock('RestClient::Response')
|
109
|
+
mockResponse.stubs(:code).returns(201)
|
110
|
+
mockResponse.stubs(:body).returns('[{"id":5678,"state":"sent"}]')
|
111
|
+
mockResponse.stubs(:headers).returns({})
|
112
|
+
|
113
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
114
|
+
|
115
|
+
invoice = Invoice.new(@client, 1234)
|
116
|
+
text_messages = invoice.send_sms(:message => "example")
|
117
|
+
|
118
|
+
assert_instance_of(Array, text_messages)
|
119
|
+
assert_equal(1, text_messages.length)
|
120
|
+
assert_instance_of(Invoiced::TextMessage, text_messages[0])
|
121
|
+
assert_equal(5678, text_messages[0].id)
|
122
|
+
end
|
123
|
+
|
124
|
+
should "send an invoice by letter" do
|
125
|
+
mockResponse = mock('RestClient::Response')
|
126
|
+
mockResponse.stubs(:code).returns(201)
|
127
|
+
mockResponse.stubs(:body).returns('[{"id":6789,"state":"queued"}]')
|
128
|
+
mockResponse.stubs(:headers).returns({})
|
129
|
+
|
130
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
131
|
+
|
132
|
+
invoice = Invoice.new(@client, 1234)
|
133
|
+
letters = invoice.send_letter
|
134
|
+
|
135
|
+
assert_instance_of(Array, letters)
|
136
|
+
assert_equal(1, letters.length)
|
137
|
+
assert_instance_of(Invoiced::Letter, letters[0])
|
138
|
+
assert_equal(6789, letters[0].id)
|
139
|
+
end
|
140
|
+
|
107
141
|
should "pay an invoice" do
|
108
142
|
mockResponse = mock('RestClient::Response')
|
109
143
|
mockResponse.stubs(:code).returns(200)
|
@@ -170,5 +204,39 @@ module Invoiced
|
|
170
204
|
assert_equal("active", payment_plan.status)
|
171
205
|
assert_equal('/invoices/456/payment_plan', payment_plan.endpoint())
|
172
206
|
end
|
207
|
+
|
208
|
+
should "list all notes associated with invoice" do
|
209
|
+
mockResponse = mock('RestClient::Response')
|
210
|
+
mockResponse.stubs(:code).returns(200)
|
211
|
+
mockResponse.stubs(:body).returns('[{"id":1212,"notes":"example"}]')
|
212
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/invoices/1234/notes?per_page=25&page=1>; rel="self", <https://api.invoiced.com/invoices/1234/notes?per_page=25&page=1>; rel="first", <https://api.invoiced.com/invoices/1234/notes?per_page=25&page=1>; rel="last"')
|
213
|
+
|
214
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
215
|
+
|
216
|
+
invoice = Invoice.new(@client, 1234)
|
217
|
+
notes, metadata = invoice.notes.list
|
218
|
+
|
219
|
+
assert_instance_of(Array, notes)
|
220
|
+
assert_equal(1, notes.length)
|
221
|
+
assert_equal(1212, notes[0].id)
|
222
|
+
assert_equal('/invoices/1234/notes/1212', notes[0].endpoint())
|
223
|
+
|
224
|
+
assert_instance_of(Invoiced::List, metadata)
|
225
|
+
assert_equal(15, metadata.total_count)
|
226
|
+
end
|
227
|
+
|
228
|
+
should "void an invoice" do
|
229
|
+
mockResponse = mock('RestClient::Response')
|
230
|
+
mockResponse.stubs(:code).returns(200)
|
231
|
+
mockResponse.stubs(:body).returns('{"id":123,"status":"voided"}')
|
232
|
+
mockResponse.stubs(:headers).returns({})
|
233
|
+
|
234
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
235
|
+
|
236
|
+
invoice = Invoice.new(@client, 123)
|
237
|
+
assert_true(invoice.void)
|
238
|
+
|
239
|
+
assert_equal(invoice.status, 'voided')
|
240
|
+
end
|
173
241
|
end
|
174
242
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Invoiced
|
4
|
+
class NoteTest < Test::Unit::TestCase
|
5
|
+
should "return the api endpoint" do
|
6
|
+
note = Note.new(@client, "test")
|
7
|
+
assert_equal('/notes/test', note.endpoint())
|
8
|
+
end
|
9
|
+
|
10
|
+
should "create a note" do
|
11
|
+
mockResponse = mock('RestClient::Response')
|
12
|
+
mockResponse.stubs(:code).returns(201)
|
13
|
+
mockResponse.stubs(:body).returns('{"id":"test","notes":"Test Note"}')
|
14
|
+
mockResponse.stubs(:headers).returns({})
|
15
|
+
|
16
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
17
|
+
|
18
|
+
note = @client.Note.create({:notes => "Test Note"})
|
19
|
+
|
20
|
+
assert_instance_of(Invoiced::Note, note)
|
21
|
+
assert_equal("test", note.id)
|
22
|
+
assert_equal('Test Note', note.notes)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "retrieve a note" do
|
26
|
+
mockResponse = mock('RestClient::Response')
|
27
|
+
mockResponse.stubs(:code).returns(200)
|
28
|
+
mockResponse.stubs(:body).returns('{"id":"test","notes":"Test Note"}')
|
29
|
+
mockResponse.stubs(:headers).returns({})
|
30
|
+
|
31
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
32
|
+
|
33
|
+
note = @client.Note.retrieve("test")
|
34
|
+
|
35
|
+
assert_instance_of(Invoiced::Note, note)
|
36
|
+
assert_equal("test", note.id)
|
37
|
+
assert_equal('Test Note', note.notes)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "not update a note when no params" do
|
41
|
+
note = Note.new(@client, "test")
|
42
|
+
assert_false(note.save)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "update a note" do
|
46
|
+
mockResponse = mock('RestClient::Response')
|
47
|
+
mockResponse.stubs(:code).returns(200)
|
48
|
+
mockResponse.stubs(:body).returns('{"id":"test","notes":"new contents"}')
|
49
|
+
mockResponse.stubs(:headers).returns({})
|
50
|
+
|
51
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
52
|
+
|
53
|
+
note = Note.new(@client, "test")
|
54
|
+
note.notes = "new contents"
|
55
|
+
assert_true(note.save)
|
56
|
+
|
57
|
+
assert_equal(note.notes, 'new contents')
|
58
|
+
end
|
59
|
+
|
60
|
+
should "list all notes" do
|
61
|
+
mockResponse = mock('RestClient::Response')
|
62
|
+
mockResponse.stubs(:code).returns(200)
|
63
|
+
mockResponse.stubs(:body).returns('[{"id":"test","notes":"Test Note"}]')
|
64
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/notes?per_page=25&page=1>; rel="self", <https://api.invoiced.com/notes?per_page=25&page=1>; rel="first", <https://api.invoiced.com/notes?per_page=25&page=1>; rel="last"')
|
65
|
+
|
66
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
67
|
+
|
68
|
+
notes, metadata = @client.Note.list
|
69
|
+
|
70
|
+
assert_instance_of(Array, notes)
|
71
|
+
assert_equal(1, notes.length)
|
72
|
+
assert_equal("test", notes[0].id)
|
73
|
+
|
74
|
+
assert_instance_of(Invoiced::List, metadata)
|
75
|
+
assert_equal(15, metadata.total_count)
|
76
|
+
end
|
77
|
+
|
78
|
+
should "delete a note" do
|
79
|
+
mockResponse = mock('RestClient::Response')
|
80
|
+
mockResponse.stubs(:code).returns(204)
|
81
|
+
mockResponse.stubs(:body).returns('')
|
82
|
+
mockResponse.stubs(:headers).returns({})
|
83
|
+
|
84
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
85
|
+
|
86
|
+
note = Note.new(@client, "test")
|
87
|
+
assert_true(note.delete)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -87,5 +87,18 @@ module Invoiced
|
|
87
87
|
assert_true(subscription.cancel)
|
88
88
|
assert_equal("canceled", subscription.status)
|
89
89
|
end
|
90
|
+
|
91
|
+
should "preview a subscription" do
|
92
|
+
mockResponse = mock('RestClient::Response')
|
93
|
+
mockResponse.stubs(:code).returns(200)
|
94
|
+
mockResponse.stubs(:body).returns('{"first_invoice": {"id": false}, "mrr": 9}')
|
95
|
+
mockResponse.stubs(:headers).returns({})
|
96
|
+
|
97
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
98
|
+
|
99
|
+
subscription = Subscription.new(@client, 123)
|
100
|
+
preview = subscription.preview(:customer => 1234, :plan => "enterprise")
|
101
|
+
assert_equal(preview[:first_invoice], {:id=>false})
|
102
|
+
end
|
90
103
|
end
|
91
104
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Invoiced
|
4
|
+
class TaskTest < Test::Unit::TestCase
|
5
|
+
should "return the api endpoint" do
|
6
|
+
task = Task.new(@client, "test")
|
7
|
+
assert_equal('/tasks/test', task.endpoint())
|
8
|
+
end
|
9
|
+
|
10
|
+
should "create a task" do
|
11
|
+
mockResponse = mock('RestClient::Response')
|
12
|
+
mockResponse.stubs(:code).returns(201)
|
13
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test Task"}')
|
14
|
+
mockResponse.stubs(:headers).returns({})
|
15
|
+
|
16
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
17
|
+
|
18
|
+
task = @client.Task.create({:name => "Test Task"})
|
19
|
+
|
20
|
+
assert_instance_of(Invoiced::Task, task)
|
21
|
+
assert_equal("test", task.id)
|
22
|
+
assert_equal('Test Task', task.name)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "retrieve a task" do
|
26
|
+
mockResponse = mock('RestClient::Response')
|
27
|
+
mockResponse.stubs(:code).returns(200)
|
28
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test Task"}')
|
29
|
+
mockResponse.stubs(:headers).returns({})
|
30
|
+
|
31
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
32
|
+
|
33
|
+
task = @client.Task.retrieve("test")
|
34
|
+
|
35
|
+
assert_instance_of(Invoiced::Task, task)
|
36
|
+
assert_equal("test", task.id)
|
37
|
+
assert_equal('Test Task', task.name)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "not update a task when no params" do
|
41
|
+
task = Task.new(@client, "test")
|
42
|
+
assert_false(task.save)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "update a task" do
|
46
|
+
mockResponse = mock('RestClient::Response')
|
47
|
+
mockResponse.stubs(:code).returns(200)
|
48
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"new contents"}')
|
49
|
+
mockResponse.stubs(:headers).returns({})
|
50
|
+
|
51
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
52
|
+
|
53
|
+
task = Task.new(@client, "test")
|
54
|
+
task.name = "new contents"
|
55
|
+
assert_true(task.save)
|
56
|
+
|
57
|
+
assert_equal(task.name, 'new contents')
|
58
|
+
end
|
59
|
+
|
60
|
+
should "list all tasks" do
|
61
|
+
mockResponse = mock('RestClient::Response')
|
62
|
+
mockResponse.stubs(:code).returns(200)
|
63
|
+
mockResponse.stubs(:body).returns('[{"id":"test","name":"Test Task"}]')
|
64
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/tasks?per_page=25&page=1>; rel="self", <https://api.invoiced.com/tasks?per_page=25&page=1>; rel="first", <https://api.invoiced.com/tasks?per_page=25&page=1>; rel="last"')
|
65
|
+
|
66
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
67
|
+
|
68
|
+
tasks, metadata = @client.Task.list
|
69
|
+
|
70
|
+
assert_instance_of(Array, tasks)
|
71
|
+
assert_equal(1, tasks.length)
|
72
|
+
assert_equal("test", tasks[0].id)
|
73
|
+
|
74
|
+
assert_instance_of(Invoiced::List, metadata)
|
75
|
+
assert_equal(15, metadata.total_count)
|
76
|
+
end
|
77
|
+
|
78
|
+
should "delete a task" do
|
79
|
+
mockResponse = mock('RestClient::Response')
|
80
|
+
mockResponse.stubs(:code).returns(204)
|
81
|
+
mockResponse.stubs(:body).returns('')
|
82
|
+
mockResponse.stubs(:headers).returns({})
|
83
|
+
|
84
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
85
|
+
|
86
|
+
task = Task.new(@client, "test")
|
87
|
+
assert_true(task.delete)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Invoiced
|
4
|
+
class TaxRateTest < Test::Unit::TestCase
|
5
|
+
should "return the api endpoint" do
|
6
|
+
tax_rate = TaxRate.new(@client, "test")
|
7
|
+
assert_equal('/tax_rates/test', tax_rate.endpoint())
|
8
|
+
end
|
9
|
+
|
10
|
+
should "create a tax rate" do
|
11
|
+
mockResponse = mock('RestClient::Response')
|
12
|
+
mockResponse.stubs(:code).returns(201)
|
13
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test TaxRate"}')
|
14
|
+
mockResponse.stubs(:headers).returns({})
|
15
|
+
|
16
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
17
|
+
|
18
|
+
tax_rate = @client.TaxRate.create({:name => "Test TaxRate"})
|
19
|
+
|
20
|
+
assert_instance_of(Invoiced::TaxRate, tax_rate)
|
21
|
+
assert_equal("test", tax_rate.id)
|
22
|
+
assert_equal('Test TaxRate', tax_rate.name)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "retrieve a tax rate" do
|
26
|
+
mockResponse = mock('RestClient::Response')
|
27
|
+
mockResponse.stubs(:code).returns(200)
|
28
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"Test TaxRate"}')
|
29
|
+
mockResponse.stubs(:headers).returns({})
|
30
|
+
|
31
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
32
|
+
|
33
|
+
tax_rate = @client.TaxRate.retrieve("test")
|
34
|
+
|
35
|
+
assert_instance_of(Invoiced::TaxRate, tax_rate)
|
36
|
+
assert_equal("test", tax_rate.id)
|
37
|
+
assert_equal('Test TaxRate', tax_rate.name)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "not update a tax rate when no params" do
|
41
|
+
tax_rate = TaxRate.new(@client, "test")
|
42
|
+
assert_false(tax_rate.save)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "update a tax rate" do
|
46
|
+
mockResponse = mock('RestClient::Response')
|
47
|
+
mockResponse.stubs(:code).returns(200)
|
48
|
+
mockResponse.stubs(:body).returns('{"id":"test","name":"new contents"}')
|
49
|
+
mockResponse.stubs(:headers).returns({})
|
50
|
+
|
51
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
52
|
+
|
53
|
+
tax_rate = TaxRate.new(@client, "test")
|
54
|
+
tax_rate.name = "new contents"
|
55
|
+
assert_true(tax_rate.save)
|
56
|
+
|
57
|
+
assert_equal(tax_rate.name, 'new contents')
|
58
|
+
end
|
59
|
+
|
60
|
+
should "list all tax rates" do
|
61
|
+
mockResponse = mock('RestClient::Response')
|
62
|
+
mockResponse.stubs(:code).returns(200)
|
63
|
+
mockResponse.stubs(:body).returns('[{"id":"test","name":"Test TaxRate"}]')
|
64
|
+
mockResponse.stubs(:headers).returns(:x_total_count => 15, :link => '<https://api.invoiced.com/tax_rates?per_page=25&page=1>; rel="self", <https://api.invoiced.com/tax_rates?per_page=25&page=1>; rel="first", <https://api.invoiced.com/tax_rates?per_page=25&page=1>; rel="last"')
|
65
|
+
|
66
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
67
|
+
|
68
|
+
tax_rates, metadata = @client.TaxRate.list
|
69
|
+
|
70
|
+
assert_instance_of(Array, tax_rates)
|
71
|
+
assert_equal(1, tax_rates.length)
|
72
|
+
assert_equal("test", tax_rates[0].id)
|
73
|
+
|
74
|
+
assert_instance_of(Invoiced::List, metadata)
|
75
|
+
assert_equal(15, metadata.total_count)
|
76
|
+
end
|
77
|
+
|
78
|
+
should "delete a tax rate" do
|
79
|
+
mockResponse = mock('RestClient::Response')
|
80
|
+
mockResponse.stubs(:code).returns(204)
|
81
|
+
mockResponse.stubs(:body).returns('')
|
82
|
+
mockResponse.stubs(:headers).returns({})
|
83
|
+
|
84
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
85
|
+
|
86
|
+
tax_rate = TaxRate.new(@client, "test")
|
87
|
+
assert_true(tax_rate.delete)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -118,5 +118,20 @@ module Invoiced
|
|
118
118
|
assert_instance_of(Invoiced::Transaction, refund)
|
119
119
|
assert_equal(456, refund.id)
|
120
120
|
end
|
121
|
+
|
122
|
+
should "initiate a charge" do
|
123
|
+
mockResponse = mock('RestClient::Response')
|
124
|
+
mockResponse.stubs(:code).returns(201)
|
125
|
+
mockResponse.stubs(:body).returns('{"id":"a1b2c3","amount":100,"object":"card"}')
|
126
|
+
mockResponse.stubs(:headers).returns({})
|
127
|
+
|
128
|
+
RestClient::Request.any_instance.expects(:execute).returns(mockResponse)
|
129
|
+
|
130
|
+
transaction = Transaction.new(@client, 1234)
|
131
|
+
charge = transaction.initiate_charge(:amount => 100, :payment_source_type => "card")
|
132
|
+
|
133
|
+
assert_instance_of(Invoiced::Transaction, charge)
|
134
|
+
assert_equal(charge.id, "a1b2c3")
|
135
|
+
end
|
121
136
|
end
|
122
137
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoiced
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared King
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/invoiced/attachment.rb
|
56
56
|
- lib/invoiced/catalog_item.rb
|
57
57
|
- lib/invoiced/contact.rb
|
58
|
+
- lib/invoiced/coupon.rb
|
58
59
|
- lib/invoiced/credit_note.rb
|
59
60
|
- lib/invoiced/customer.rb
|
60
61
|
- lib/invoiced/email.rb
|
@@ -68,8 +69,10 @@ files:
|
|
68
69
|
- lib/invoiced/event.rb
|
69
70
|
- lib/invoiced/file.rb
|
70
71
|
- lib/invoiced/invoice.rb
|
72
|
+
- lib/invoiced/letter.rb
|
71
73
|
- lib/invoiced/line_item.rb
|
72
74
|
- lib/invoiced/list.rb
|
75
|
+
- lib/invoiced/note.rb
|
73
76
|
- lib/invoiced/object.rb
|
74
77
|
- lib/invoiced/operations/create.rb
|
75
78
|
- lib/invoiced/operations/delete.rb
|
@@ -78,11 +81,15 @@ files:
|
|
78
81
|
- lib/invoiced/payment_plan.rb
|
79
82
|
- lib/invoiced/plan.rb
|
80
83
|
- lib/invoiced/subscription.rb
|
84
|
+
- lib/invoiced/task.rb
|
85
|
+
- lib/invoiced/tax_rate.rb
|
86
|
+
- lib/invoiced/text_message.rb
|
81
87
|
- lib/invoiced/transaction.rb
|
82
88
|
- lib/invoiced/util.rb
|
83
89
|
- lib/invoiced/version.rb
|
84
90
|
- test/invoiced/catalog_item_test.rb
|
85
91
|
- test/invoiced/contact_test.rb
|
92
|
+
- test/invoiced/coupon_test.rb
|
86
93
|
- test/invoiced/credit_note_test.rb
|
87
94
|
- test/invoiced/customer_test.rb
|
88
95
|
- test/invoiced/error_test.rb
|
@@ -92,10 +99,13 @@ files:
|
|
92
99
|
- test/invoiced/invoice_test.rb
|
93
100
|
- test/invoiced/invoiced_test.rb
|
94
101
|
- test/invoiced/line_item_test.rb
|
102
|
+
- test/invoiced/note_test.rb
|
95
103
|
- test/invoiced/object_test.rb
|
96
104
|
- test/invoiced/payment_plan_test.rb
|
97
105
|
- test/invoiced/plan_test.rb
|
98
106
|
- test/invoiced/subscription_test.rb
|
107
|
+
- test/invoiced/task_test.rb
|
108
|
+
- test/invoiced/tax_rate_test.rb
|
99
109
|
- test/invoiced/transaction_test.rb
|
100
110
|
- test/invoiced/util_test.rb
|
101
111
|
- test/test_helper.rb
|
@@ -118,14 +128,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
128
|
- !ruby/object:Gem::Version
|
119
129
|
version: '0'
|
120
130
|
requirements: []
|
121
|
-
|
122
|
-
rubygems_version: 2.2.2
|
131
|
+
rubygems_version: 3.0.6
|
123
132
|
signing_key:
|
124
133
|
specification_version: 4
|
125
134
|
summary: Ruby client library for the Invoiced API
|
126
135
|
test_files:
|
127
136
|
- test/invoiced/catalog_item_test.rb
|
128
137
|
- test/invoiced/contact_test.rb
|
138
|
+
- test/invoiced/coupon_test.rb
|
129
139
|
- test/invoiced/credit_note_test.rb
|
130
140
|
- test/invoiced/customer_test.rb
|
131
141
|
- test/invoiced/error_test.rb
|
@@ -135,10 +145,13 @@ test_files:
|
|
135
145
|
- test/invoiced/invoice_test.rb
|
136
146
|
- test/invoiced/invoiced_test.rb
|
137
147
|
- test/invoiced/line_item_test.rb
|
148
|
+
- test/invoiced/note_test.rb
|
138
149
|
- test/invoiced/object_test.rb
|
139
150
|
- test/invoiced/payment_plan_test.rb
|
140
151
|
- test/invoiced/plan_test.rb
|
141
152
|
- test/invoiced/subscription_test.rb
|
153
|
+
- test/invoiced/task_test.rb
|
154
|
+
- test/invoiced/tax_rate_test.rb
|
142
155
|
- test/invoiced/transaction_test.rb
|
143
156
|
- test/invoiced/util_test.rb
|
144
157
|
- test/test_helper.rb
|