turingstudio-freshbooks-rb 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/README.rdoc +65 -0
- data/Rakefile +20 -0
- data/lib/freshbooks.rb +41 -0
- data/lib/freshbooks/base.rb +286 -0
- data/lib/freshbooks/category.rb +11 -0
- data/lib/freshbooks/client.rb +32 -0
- data/lib/freshbooks/estimate.rb +30 -0
- data/lib/freshbooks/expense.rb +16 -0
- data/lib/freshbooks/invoice.rb +34 -0
- data/lib/freshbooks/item.rb +12 -0
- data/lib/freshbooks/line.rb +13 -0
- data/lib/freshbooks/payment.rb +22 -0
- data/lib/freshbooks/project.rb +39 -0
- data/lib/freshbooks/recurring.rb +51 -0
- data/lib/freshbooks/response.rb +25 -0
- data/lib/freshbooks/staff.rb +24 -0
- data/lib/freshbooks/task.rb +11 -0
- data/lib/freshbooks/time_entry.rb +13 -0
- data/lib/freshbooks/version.rb +6 -0
- data/spec/lib/freshbooks/base_spec.rb +385 -0
- data/spec/lib/freshbooks/category_spec.rb +64 -0
- data/spec/lib/freshbooks/client_spec.rb +91 -0
- data/spec/lib/freshbooks/estimate_spec.rb +80 -0
- data/spec/lib/freshbooks/expense_spec.rb +86 -0
- data/spec/lib/freshbooks/invoice_spec.rb +89 -0
- data/spec/lib/freshbooks/item_spec.rb +75 -0
- data/spec/lib/freshbooks/payment_spec.rb +77 -0
- data/spec/lib/freshbooks/project_spec.rb +83 -0
- data/spec/lib/freshbooks/recurring_spec.rb +82 -0
- data/spec/lib/freshbooks/staff_spec.rb +21 -0
- data/spec/lib/freshbooks/task_spec.rb +61 -0
- data/spec/lib/freshbooks/time_entry_spec.rb +94 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- data/tasks/rspec.rake +33 -0
- metadata +109 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe FreshBooks::Category do
|
4
|
+
before(:each) do
|
5
|
+
@attributes = {
|
6
|
+
:name => 'Test',
|
7
|
+
:tax1 => 0
|
8
|
+
}
|
9
|
+
@category = FreshBooks::Category.new(@attributes)
|
10
|
+
@category.create
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
@category.delete rescue nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should list all categorys" do
|
18
|
+
FreshBooks::Category.list.size.should > 0
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should find category by id" do
|
22
|
+
category = FreshBooks::Category.get(@category.category_id)
|
23
|
+
category.should_not be_nil
|
24
|
+
@attributes.each do |field, value|
|
25
|
+
category.send(field).should == @category.send(field)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should create a new category" do
|
30
|
+
categorys = FreshBooks::Category.list
|
31
|
+
|
32
|
+
category = FreshBooks::Category.new(@attributes.update(:name => 'Test2'))
|
33
|
+
category.create.should_not be_nil
|
34
|
+
|
35
|
+
FreshBooks::Category.list.size.should == categorys.size + 1
|
36
|
+
|
37
|
+
category.delete
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should update an existing category" do
|
41
|
+
categorys = FreshBooks::Category.list
|
42
|
+
@category.name = 'Test2'
|
43
|
+
@category.update.should be_true
|
44
|
+
FreshBooks::Category.get(@category.category_id).name.should == 'Test2'
|
45
|
+
FreshBooks::Category.list.size.should == categorys.size
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should delete category" do
|
49
|
+
categorys = FreshBooks::Category.list
|
50
|
+
@category.delete.should be_true
|
51
|
+
FreshBooks::Category.list.size.should == categorys.size - 1
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should delete category by id" do
|
55
|
+
categorys = FreshBooks::Category.list
|
56
|
+
FreshBooks::Category.delete(@category.category_id).should be_true
|
57
|
+
FreshBooks::Category.list.size.should == categorys.size - 1
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should have many expenses" do
|
61
|
+
FreshBooks::Expense.should_receive(:list).with({ 'category_id' => @category.category_id, 'name' => 'value' }).and_return([])
|
62
|
+
@category.expenses('name' => 'value').should == []
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe FreshBooks::Client do
|
4
|
+
before(:each) do
|
5
|
+
@attributes = {
|
6
|
+
:first_name => 'Test',
|
7
|
+
:last_name => 'Test',
|
8
|
+
:email => 'test@test.com',
|
9
|
+
:organization => 'FlatsourcingTest'
|
10
|
+
}
|
11
|
+
@client = FreshBooks::Client.new(@attributes)
|
12
|
+
@client.create
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
@client.delete rescue nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should list all clients" do
|
20
|
+
FreshBooks::Client.list.size.should == 1
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should find client by id" do
|
24
|
+
client = FreshBooks::Client.get(@client.client_id)
|
25
|
+
client.should_not be_nil
|
26
|
+
@attributes.each do |field, value|
|
27
|
+
client.send(field).should == @client.send(field)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should create a new client" do
|
32
|
+
clients = FreshBooks::Client.list
|
33
|
+
|
34
|
+
client = FreshBooks::Client.new(@attributes.update(:email => 'test1@test.com'))
|
35
|
+
client.create.should_not be_nil
|
36
|
+
|
37
|
+
FreshBooks::Client.list.size.should == clients.size + 1
|
38
|
+
|
39
|
+
client.delete
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should update an existing client" do
|
43
|
+
clients = FreshBooks::Client.list
|
44
|
+
@client.first_name = 'Client'
|
45
|
+
@client.update.should be_true
|
46
|
+
FreshBooks::Client.get(@client.client_id).first_name.should == 'Client'
|
47
|
+
FreshBooks::Client.list.size.should == clients.size
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should delete client" do
|
51
|
+
clients = FreshBooks::Client.list
|
52
|
+
@client.delete.should be_true
|
53
|
+
FreshBooks::Client.list.size.should == clients.size - 1
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should delete client by id" do
|
57
|
+
clients = FreshBooks::Client.list
|
58
|
+
FreshBooks::Client.delete(@client.client_id).should be_true
|
59
|
+
FreshBooks::Client.list.size.should == clients.size - 1
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should have many expenses" do
|
63
|
+
FreshBooks::Expense.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
64
|
+
@client.expenses('name' => 'value').should == []
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should have many estimates" do
|
68
|
+
FreshBooks::Estimate.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
69
|
+
@client.estimates('name' => 'value').should == []
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should have many invoices" do
|
73
|
+
FreshBooks::Invoice.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
74
|
+
@client.invoices('name' => 'value').should == []
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should have many payments" do
|
78
|
+
FreshBooks::Payment.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
79
|
+
@client.payments('name' => 'value').should == []
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should have many projects" do
|
83
|
+
FreshBooks::Project.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
84
|
+
@client.projects('name' => 'value').should == []
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should have many recurrings" do
|
88
|
+
FreshBooks::Recurring.should_receive(:list).with({ 'client_id' => @client.client_id, 'name' => 'value' }).and_return([])
|
89
|
+
@client.recurrings('name' => 'value').should == []
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe FreshBooks::Estimate do
|
4
|
+
before(:all) do
|
5
|
+
@client = FreshBooks::Client.new(
|
6
|
+
:first_name => 'Test',
|
7
|
+
:last_name => 'Test',
|
8
|
+
:email => 'test@test.com',
|
9
|
+
:organization => 'FlatsourcingTest'
|
10
|
+
)
|
11
|
+
@client.create
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
@client.delete
|
16
|
+
end
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
@attributes = {
|
20
|
+
:client_id => @client.client_id,
|
21
|
+
:first_name => 'Test',
|
22
|
+
:last_name => 'Test',
|
23
|
+
:organization => 'FlatsourcingTest'
|
24
|
+
}
|
25
|
+
@estimate = FreshBooks::Estimate.new(@attributes)
|
26
|
+
@estimate.create
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:each) do
|
30
|
+
@estimate.delete rescue nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should list all estimates" do
|
34
|
+
FreshBooks::Estimate.list.size.should == 1
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should find estimate by id" do
|
38
|
+
estimate = FreshBooks::Estimate.get(@estimate.estimate_id)
|
39
|
+
estimate.should_not be_nil
|
40
|
+
@attributes.each do |field, value|
|
41
|
+
estimate.send(field).should == @estimate.send(field)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create a new estimate" do
|
46
|
+
estimates = FreshBooks::Estimate.list
|
47
|
+
|
48
|
+
estimate = FreshBooks::Estimate.new(@attributes)
|
49
|
+
estimate.create.should_not be_nil
|
50
|
+
|
51
|
+
FreshBooks::Estimate.list.size.should == estimates.size + 1
|
52
|
+
|
53
|
+
estimate.delete
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should update an existing estimate" do
|
57
|
+
estimates = FreshBooks::Estimate.list
|
58
|
+
@estimate.first_name = 'Estimate'
|
59
|
+
@estimate.update.should be_true
|
60
|
+
FreshBooks::Estimate.get(@estimate.estimate_id).first_name.should == 'Estimate'
|
61
|
+
FreshBooks::Estimate.list.size.should == estimates.size
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should delete estimate" do
|
65
|
+
estimates = FreshBooks::Estimate.list
|
66
|
+
@estimate.delete.should be_true
|
67
|
+
FreshBooks::Estimate.list.size.should == estimates.size - 1
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should delete estimate by id" do
|
71
|
+
estimates = FreshBooks::Estimate.list
|
72
|
+
FreshBooks::Estimate.delete(@estimate.estimate_id).should be_true
|
73
|
+
FreshBooks::Estimate.list.size.should == estimates.size - 1
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should belong to client" do
|
77
|
+
FreshBooks::Client.should_receive(:get).with(@estimate.client_id).and_return(@client)
|
78
|
+
@estimate.client.should == @client
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe FreshBooks::Expense do
|
4
|
+
before(:all) do
|
5
|
+
@client = FreshBooks::Client.new(
|
6
|
+
:first_name => 'Test',
|
7
|
+
:last_name => 'Test',
|
8
|
+
:email => 'test@test.com',
|
9
|
+
:organization => 'FlatsourcingTest'
|
10
|
+
)
|
11
|
+
@client.create
|
12
|
+
|
13
|
+
@staff = FreshBooks::Staff.list[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:all) do
|
17
|
+
@client.delete
|
18
|
+
end
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@attributes = {
|
22
|
+
:client_id => @client.client_id,
|
23
|
+
:staff_id => @staff.staff_id,
|
24
|
+
:amount => 100
|
25
|
+
}
|
26
|
+
@expense = FreshBooks::Expense.new(@attributes)
|
27
|
+
@expense.create
|
28
|
+
end
|
29
|
+
|
30
|
+
after(:each) do
|
31
|
+
@expense.delete rescue nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should list all expenses" do
|
35
|
+
FreshBooks::Expense.list.size.should == 1
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should find expense by id" do
|
39
|
+
expense = FreshBooks::Expense.get(@expense.expense_id)
|
40
|
+
expense.should_not be_nil
|
41
|
+
@attributes.each do |field, value|
|
42
|
+
expense.send(field).should == @expense.send(field)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should create a new expense" do
|
47
|
+
expenses = FreshBooks::Expense.list
|
48
|
+
|
49
|
+
expense = FreshBooks::Expense.new(@attributes)
|
50
|
+
expense.create.should_not be_nil
|
51
|
+
|
52
|
+
FreshBooks::Expense.list.size.should == expenses.size + 1
|
53
|
+
|
54
|
+
expense.delete
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should update an existing expense" do
|
58
|
+
expenses = FreshBooks::Expense.list
|
59
|
+
@expense.amount = 150
|
60
|
+
@expense.update.should be_true
|
61
|
+
FreshBooks::Expense.get(@expense.expense_id).amount.should == 150
|
62
|
+
FreshBooks::Expense.list.size.should == expenses.size
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should delete expense" do
|
66
|
+
expenses = FreshBooks::Expense.list
|
67
|
+
@expense.delete.should be_true
|
68
|
+
FreshBooks::Expense.list.size.should == expenses.size - 1
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should delete expense by id" do
|
72
|
+
expenses = FreshBooks::Expense.list
|
73
|
+
FreshBooks::Expense.delete(@expense.expense_id).should be_true
|
74
|
+
FreshBooks::Expense.list.size.should == expenses.size - 1
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should belong to client" do
|
78
|
+
FreshBooks::Client.should_receive(:get).with(@expense.client_id).and_return(@client)
|
79
|
+
@expense.client.should == @client
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should belong to staff member" do
|
83
|
+
FreshBooks::Staff.should_receive(:get).with(@expense.staff_id).and_return(@staff)
|
84
|
+
@expense.staff.should == @staff
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe FreshBooks::Invoice do
|
4
|
+
before(:all) do
|
5
|
+
@client = FreshBooks::Client.new(
|
6
|
+
:first_name => 'Test',
|
7
|
+
:last_name => 'Test',
|
8
|
+
:email => 'test@test.com',
|
9
|
+
:organization => 'FlatsourcingTest'
|
10
|
+
)
|
11
|
+
@client.create
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
@client.delete
|
16
|
+
end
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
@attributes = {
|
20
|
+
:client_id => @client.client_id,
|
21
|
+
:first_name => 'Test',
|
22
|
+
:last_name => 'Test',
|
23
|
+
:organization => 'FlatsourcingTest'
|
24
|
+
}
|
25
|
+
@invoice = FreshBooks::Invoice.new(@attributes)
|
26
|
+
@invoice.create
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:each) do
|
30
|
+
@invoice.delete rescue nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should set up lines array" do
|
34
|
+
@invoice.lines.should == []
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should list all invoices" do
|
38
|
+
FreshBooks::Invoice.list.size.should > 0
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should find invoice by id" do
|
42
|
+
invoice = FreshBooks::Invoice.get(@invoice.invoice_id)
|
43
|
+
invoice.should_not be_nil
|
44
|
+
@attributes.each do |field, value|
|
45
|
+
invoice.send(field).should == @invoice.send(field)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should create a new invoice" do
|
50
|
+
invoices = FreshBooks::Invoice.list
|
51
|
+
|
52
|
+
invoice = FreshBooks::Invoice.new(@attributes)
|
53
|
+
invoice.create.should_not be_nil
|
54
|
+
|
55
|
+
FreshBooks::Invoice.list.size.should == invoices.size + 1
|
56
|
+
|
57
|
+
invoice.delete
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should update an existing invoice" do
|
61
|
+
invoices = FreshBooks::Invoice.list
|
62
|
+
@invoice.first_name = 'Invoice'
|
63
|
+
@invoice.update.should be_true
|
64
|
+
FreshBooks::Invoice.get(@invoice.invoice_id).first_name.should == 'Invoice'
|
65
|
+
FreshBooks::Invoice.list.size.should == invoices.size
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should delete invoice" do
|
69
|
+
invoices = FreshBooks::Invoice.list
|
70
|
+
@invoice.delete.should be_true
|
71
|
+
FreshBooks::Invoice.list.size.should == invoices.size - 1
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should delete invoice by id" do
|
75
|
+
invoices = FreshBooks::Invoice.list
|
76
|
+
FreshBooks::Invoice.delete(@invoice.invoice_id).should be_true
|
77
|
+
FreshBooks::Invoice.list.size.should == invoices.size - 1
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should belong to client" do
|
81
|
+
FreshBooks::Client.should_receive(:get).with(@invoice.client_id).and_return(@client)
|
82
|
+
@invoice.client.should == @client
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should have many payments" do
|
86
|
+
FreshBooks::Payment.should_receive(:list).with({ 'invoice_id' => @invoice.invoice_id, 'name' => 'value' }).and_return([])
|
87
|
+
@invoice.payments('name' => 'value').should == []
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
class Sequence
|
4
|
+
def initialize(prefix = 'seq')
|
5
|
+
@prefix = prefix
|
6
|
+
@index = Time.now.to_i
|
7
|
+
end
|
8
|
+
|
9
|
+
def next
|
10
|
+
@index += 1
|
11
|
+
"#{@prefix}#{@index}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe FreshBooks::Item do
|
16
|
+
before(:all) do
|
17
|
+
@seq = Sequence.new('item')
|
18
|
+
end
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@attributes = {
|
22
|
+
:name => @seq.next
|
23
|
+
}
|
24
|
+
@item = FreshBooks::Item.new(@attributes)
|
25
|
+
@item.create
|
26
|
+
end
|
27
|
+
|
28
|
+
after(:each) do
|
29
|
+
@item.delete rescue nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should list all items" do
|
33
|
+
FreshBooks::Item.list.size.should > 0
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should find item by id" do
|
37
|
+
item = FreshBooks::Item.get(@item.item_id)
|
38
|
+
item.should_not be_nil
|
39
|
+
@attributes.each do |field, value|
|
40
|
+
item.send(field).should == @item.send(field)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should create a new item" do
|
45
|
+
items = FreshBooks::Item.list
|
46
|
+
|
47
|
+
item = FreshBooks::Item.new(@attributes.update(:name => @seq.next))
|
48
|
+
item.create.should_not be_nil
|
49
|
+
|
50
|
+
FreshBooks::Item.list.size.should == items.size + 1
|
51
|
+
|
52
|
+
item.delete
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should update an existing item" do
|
56
|
+
items = FreshBooks::Item.list
|
57
|
+
name = @seq.next
|
58
|
+
@item.name = name
|
59
|
+
@item.update.should be_true
|
60
|
+
FreshBooks::Item.get(@item.item_id).name.should == name
|
61
|
+
FreshBooks::Item.list.size.should == items.size
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should delete item" do
|
65
|
+
items = FreshBooks::Item.list
|
66
|
+
@item.delete.should be_true
|
67
|
+
FreshBooks::Item.list.size.should == items.size - 1
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should delete item by id" do
|
71
|
+
items = FreshBooks::Item.list
|
72
|
+
FreshBooks::Item.delete(@item.item_id).should be_true
|
73
|
+
FreshBooks::Item.list.size.should == items.size - 1
|
74
|
+
end
|
75
|
+
end
|