invoicexpress 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +0 -0
- data/README.md +322 -0
- data/Rakefile +19 -0
- data/invoicexpress.gemspec +26 -0
- data/lib/faraday/response/parse_xml.rb +23 -0
- data/lib/faraday/response/raise_invoicexpress_errors.rb +20 -0
- data/lib/invoicexpress.rb +26 -0
- data/lib/invoicexpress/authentication.rb +15 -0
- data/lib/invoicexpress/client.rb +56 -0
- data/lib/invoicexpress/client/cash_invoices.rb +110 -0
- data/lib/invoicexpress/client/charts.rb +57 -0
- data/lib/invoicexpress/client/clients.rb +215 -0
- data/lib/invoicexpress/client/credit_notes.rb +128 -0
- data/lib/invoicexpress/client/debit_notes.rb +129 -0
- data/lib/invoicexpress/client/invoices.rb +107 -0
- data/lib/invoicexpress/client/items.rb +82 -0
- data/lib/invoicexpress/client/purchase_orders.rb +126 -0
- data/lib/invoicexpress/client/schedules.rb +110 -0
- data/lib/invoicexpress/client/sequences.rb +71 -0
- data/lib/invoicexpress/client/simplified_invoices.rb +130 -0
- data/lib/invoicexpress/client/taxes.rb +82 -0
- data/lib/invoicexpress/client/users.rb +48 -0
- data/lib/invoicexpress/configuration.rb +51 -0
- data/lib/invoicexpress/connection.rb +40 -0
- data/lib/invoicexpress/error.rb +68 -0
- data/lib/invoicexpress/models.rb +29 -0
- data/lib/invoicexpress/models/chart.rb +41 -0
- data/lib/invoicexpress/models/client.rb +24 -0
- data/lib/invoicexpress/models/filter.rb +60 -0
- data/lib/invoicexpress/models/invoice.rb +235 -0
- data/lib/invoicexpress/models/purchase_order.rb +72 -0
- data/lib/invoicexpress/models/quarterly_result.rb +45 -0
- data/lib/invoicexpress/models/schedule.rb +87 -0
- data/lib/invoicexpress/models/sequence.rb +17 -0
- data/lib/invoicexpress/models/supplier.rb +17 -0
- data/lib/invoicexpress/models/top_client.rb +15 -0
- data/lib/invoicexpress/models/top_debtor.rb +14 -0
- data/lib/invoicexpress/models/user.rb +31 -0
- data/lib/invoicexpress/request.rb +63 -0
- data/lib/invoicexpress/version.rb +3 -0
- data/spec/fixtures/charts.invoicing.xml +21 -0
- data/spec/fixtures/charts.quarterly-results.xml +25 -0
- data/spec/fixtures/charts.top-clients.xml +10 -0
- data/spec/fixtures/charts.top-debtors.xml +10 -0
- data/spec/fixtures/charts.treasury.xml +49 -0
- data/spec/fixtures/clients.create.xml +6 -0
- data/spec/fixtures/clients.get.xml +21 -0
- data/spec/fixtures/clients.invoices.xml +11 -0
- data/spec/fixtures/clients.list.xml +18 -0
- data/spec/fixtures/clients.update.xml +1 -0
- data/spec/fixtures/credit_notes.create.xml +53 -0
- data/spec/fixtures/credit_notes.email_document.xml +9 -0
- data/spec/fixtures/credit_notes.list.xml +114 -0
- data/spec/fixtures/credit_notes.update_state.xml +7 -0
- data/spec/fixtures/invoices.create.xml +37 -0
- data/spec/fixtures/invoices.get.xml +50 -0
- data/spec/fixtures/invoices.list.xml +537 -0
- data/spec/fixtures/invoices.update_state.xml +7 -0
- data/spec/fixtures/ok.xml +0 -0
- data/spec/fixtures/po.create.xml +42 -0
- data/spec/fixtures/po.email_document.xml +0 -0
- data/spec/fixtures/po.get.xml +42 -0
- data/spec/fixtures/po.list.xml +44 -0
- data/spec/fixtures/po.update_state.xml +7 -0
- data/spec/fixtures/schedules.create.xml +48 -0
- data/spec/fixtures/schedules.get.xml +57 -0
- data/spec/fixtures/schedules.list.xml +40 -0
- data/spec/fixtures/sequences.create.xml +9 -0
- data/spec/fixtures/sequences.get.xml +10 -0
- data/spec/fixtures/sequences.list.xml +12 -0
- data/spec/fixtures/sequences.update.xml +10 -0
- data/spec/fixtures/simplified_invoices.create.xml +53 -0
- data/spec/fixtures/simplified_invoices.email_document.xml +9 -0
- data/spec/fixtures/simplified_invoices.get.xml +74 -0
- data/spec/fixtures/simplified_invoices.list.xml +114 -0
- data/spec/fixtures/simplified_invoices.update.xml +0 -0
- data/spec/fixtures/simplified_invoices.update_state.xml +7 -0
- data/spec/fixtures/taxes.create.xml +7 -0
- data/spec/fixtures/taxes.list.xml +18 -0
- data/spec/fixtures/taxes.update.xml +7 -0
- data/spec/fixtures/users.accounts.xml +12 -0
- data/spec/fixtures/users.change-account.xml +0 -0
- data/spec/fixtures/users.login.xml +11 -0
- data/spec/helper.rb +62 -0
- data/spec/invoicexpress/client/charts_spec.rb +69 -0
- data/spec/invoicexpress/client/clients_spec.rb +108 -0
- data/spec/invoicexpress/client/credit_notes_spec.rb +104 -0
- data/spec/invoicexpress/client/invoices_spec.rb +110 -0
- data/spec/invoicexpress/client/purchase_orders_spec.rb +116 -0
- data/spec/invoicexpress/client/schedules_spec.rb +111 -0
- data/spec/invoicexpress/client/sequences_spec.rb +68 -0
- data/spec/invoicexpress/client/simplified_invoices_spec.rb +116 -0
- data/spec/invoicexpress/client/taxes_spec.rb +70 -0
- data/spec/invoicexpress/client/users_spec.rb +40 -0
- data/spec/invoicexpress/client_spec.rb +24 -0
- data/spec/invoicexpress_spec.rb +19 -0
- metadata +279 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Invoicexpress::Client::Invoices do
|
4
|
+
before do
|
5
|
+
@client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".invoices" do
|
9
|
+
it "Returns all the invoice" do
|
10
|
+
stub_get("/invoices.xml?page=1").
|
11
|
+
to_return(xml_response("invoices.list.xml"))
|
12
|
+
|
13
|
+
items = @client.invoices
|
14
|
+
items.invoices.count.should == 10
|
15
|
+
items.current_page==1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".create_invoice" do
|
20
|
+
it "creates a new invoice" do
|
21
|
+
stub_post("/invoices.xml").
|
22
|
+
to_return(xml_response("invoices.create.xml"))
|
23
|
+
|
24
|
+
|
25
|
+
object = Invoicexpress::Models::Invoice.new(
|
26
|
+
:date => Date.new(2013, 6, 18),
|
27
|
+
:due_date => Date.new(2013, 6, 18),
|
28
|
+
:tax_exemption => "M01",
|
29
|
+
:client => Invoicexpress::Models::Client.new(
|
30
|
+
:name => "Ruben Fonseca"
|
31
|
+
),
|
32
|
+
:items => [
|
33
|
+
Invoicexpress::Models::Item.new(
|
34
|
+
:name => "Item 1",
|
35
|
+
:unit_price => 30,
|
36
|
+
:quantity => 1,
|
37
|
+
:unit => "unit",
|
38
|
+
)
|
39
|
+
]
|
40
|
+
)
|
41
|
+
|
42
|
+
item = @client.create_invoice(object)
|
43
|
+
item.id.should == 1503698
|
44
|
+
item.status == "draft"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe ".invoice" do
|
49
|
+
it "gets a invoice" do
|
50
|
+
stub_get("/invoices/1503698.xml").
|
51
|
+
to_return(xml_response("invoices.get.xml"))
|
52
|
+
|
53
|
+
item = @client.invoice(1503698)
|
54
|
+
item.status.should == "draft"
|
55
|
+
item.client.id.should == 501854
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe ".update_invoice" do
|
60
|
+
it "updates the invoice" do
|
61
|
+
stub_put("/invoices/1503698.xml").
|
62
|
+
to_return(xml_response("ok.xml"))
|
63
|
+
|
64
|
+
model = Invoicexpress::Models::Invoice.new(:id => 1503698)
|
65
|
+
expect { @client.update_invoice(model) }.to_not raise_error
|
66
|
+
end
|
67
|
+
|
68
|
+
it "raises if no invoice is passed" do
|
69
|
+
expect {
|
70
|
+
@client.update_invoice(nil)
|
71
|
+
}.to raise_error(ArgumentError)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises if the simplified invoice to update has no id" do
|
75
|
+
stub_put("/invoices/.xml").
|
76
|
+
to_return(xml_response("ok.xml"))
|
77
|
+
expect {
|
78
|
+
@client.update_invoice(Invoicexpress::Models::SimplifiedInvoice.new)
|
79
|
+
}.to raise_error(ArgumentError)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe ".update_invoice_state" do
|
84
|
+
it "updates the state" do
|
85
|
+
stub_put("/invoices/1503698/change-state.xml").
|
86
|
+
to_return(xml_response("invoices.update_state.xml"))
|
87
|
+
|
88
|
+
state = Invoicexpress::Models::InvoiceState.new(
|
89
|
+
:state => "finalized"
|
90
|
+
)
|
91
|
+
expect { @client.update_invoice_state(1503698, state) }.to_not raise_error
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe ".invoice_mail" do
|
96
|
+
it "sends the invoice through email" do
|
97
|
+
stub_put("/invoices/1503698/email-invoice.xml").
|
98
|
+
to_return(xml_response("ok.xml"))
|
99
|
+
message = Invoicexpress::Models::Message.new(
|
100
|
+
:subject => "Hello world",
|
101
|
+
:body => "Here is the invoice.",
|
102
|
+
:client => Invoicexpress::Models::Client.new(
|
103
|
+
:name => "Pedro Sousa",
|
104
|
+
:email=> 'info@thinkorange.pt'
|
105
|
+
)
|
106
|
+
)
|
107
|
+
expect { @client.invoice_mail(1503698, message) }.to_not raise_error
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Invoicexpress::Client::PurchaseOrders do
|
4
|
+
before do
|
5
|
+
@client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".purchase_orders" do
|
9
|
+
it "Returns all the purchase orders" do
|
10
|
+
stub_get("/purchase_orders.xml?page=1").
|
11
|
+
to_return(xml_response("po.list.xml"))
|
12
|
+
|
13
|
+
items = @client.purchase_orders
|
14
|
+
items.count.should == 1
|
15
|
+
items.first.id == 1430276
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".create_purchase_order" do
|
20
|
+
it "creates a new purchase order" do
|
21
|
+
stub_post("/purchase_orders.xml").
|
22
|
+
to_return(xml_response("po.create.xml"))
|
23
|
+
|
24
|
+
object = Invoicexpress::Models::PurchaseOrder.new(
|
25
|
+
:date => Date.new(2013, 5, 30),
|
26
|
+
:due_date => Date.new(2013, 8, 8),
|
27
|
+
:loaded_at => Date.new(2013, 5, 30),
|
28
|
+
:delivery_site=>'LX Factory',
|
29
|
+
:supplier => Invoicexpress::Models::Supplier.new(
|
30
|
+
:name => "Pedro Sousa",
|
31
|
+
),
|
32
|
+
:items => [
|
33
|
+
Invoicexpress::Models::Item.new(
|
34
|
+
:name => "Item 1",
|
35
|
+
:unit_price => 60,
|
36
|
+
:quantity => 2,
|
37
|
+
:unit => "unit",
|
38
|
+
:tax=> Invoicexpress::Models::Tax.new(
|
39
|
+
:name=>'IVA23'
|
40
|
+
)
|
41
|
+
)
|
42
|
+
]
|
43
|
+
)
|
44
|
+
|
45
|
+
item = @client.create_purchase_order(object)
|
46
|
+
item.id.should == 1430276
|
47
|
+
item.delivery_site.should == "LX Factory"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".purchase_order" do
|
52
|
+
it "gets a purchase order" do
|
53
|
+
stub_get("/purchase_orders/1430276.xml").
|
54
|
+
to_return(xml_response("po.get.xml"))
|
55
|
+
|
56
|
+
item = @client.purchase_order(1430276)
|
57
|
+
item.status.should == "draft"
|
58
|
+
item.delivery_site.should == "LX Factory"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".update_purchase_order" do
|
63
|
+
it "updates the purchase order" do
|
64
|
+
stub_put("/purchase_orders/1430276.xml").
|
65
|
+
to_return(xml_response("clients.update.xml"))
|
66
|
+
|
67
|
+
model = Invoicexpress::Models::PurchaseOrder.new(:id => 1430276)
|
68
|
+
expect { @client.update_purchase_order(model) }.to_not raise_error
|
69
|
+
end
|
70
|
+
|
71
|
+
it "raises if no purchase is passed" do
|
72
|
+
expect {
|
73
|
+
@client.update_purchase_order(nil)
|
74
|
+
}.to raise_error(ArgumentError)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "raises if the purchase order update has no id" do
|
78
|
+
stub_put("/purchase_orders/.xml").
|
79
|
+
to_return(xml_response("ok.xml"))
|
80
|
+
expect {
|
81
|
+
@client.update_purchase_order(Invoicexpress::Models::PurchaseOrder.new)
|
82
|
+
}.to raise_error(ArgumentError)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
describe ".update_purchase_order_state" do
|
88
|
+
it "updates the state" do
|
89
|
+
stub_put("/purchase_orders/1430338/change-state.xml").
|
90
|
+
to_return(xml_response("po.update_state.xml"))
|
91
|
+
|
92
|
+
state = Invoicexpress::Models::InvoiceState.new(
|
93
|
+
:state => "finalized"
|
94
|
+
)
|
95
|
+
|
96
|
+
expect { item = @client.update_purchase_order_state(1430338, state) }.to_not raise_error
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe ".simplified_invoice_mail" do
|
101
|
+
it "sends the invoice through email" do
|
102
|
+
stub_put("/purchase_orders/1430338/email-document.xml").
|
103
|
+
to_return(xml_response("po.email_document.xml"))
|
104
|
+
|
105
|
+
message = Invoicexpress::Models::Message.new(
|
106
|
+
:subject => "Hello world",
|
107
|
+
:body => "Here is the invoice.",
|
108
|
+
:client => Invoicexpress::Models::Client.new(
|
109
|
+
:name => "Pedro Sousa",
|
110
|
+
:email=> 'psousa@thinkorange.pt'
|
111
|
+
)
|
112
|
+
)
|
113
|
+
expect {item = @client.purchase_order_mail(1430338, message) }.to_not raise_error
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Invoicexpress::Client::Schedules do
|
4
|
+
before do
|
5
|
+
@client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".schedules" do
|
9
|
+
it "Returns all the schedules" do
|
10
|
+
stub_get("/schedules.xml").
|
11
|
+
to_return(xml_response("schedules.list.xml"))
|
12
|
+
|
13
|
+
list = @client.schedules
|
14
|
+
list.count.should == 1
|
15
|
+
list.first.client.id==439232
|
16
|
+
list.first.items.size==1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".schedule" do
|
21
|
+
it "gets a schedule" do
|
22
|
+
stub_get("/schedules/4462.xml").
|
23
|
+
to_return(xml_response("schedules.get.xml"))
|
24
|
+
|
25
|
+
c = @client.schedule(4462)
|
26
|
+
c.id.should == 4462
|
27
|
+
c.sum.should == 360.0
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".update_schedule" do
|
32
|
+
it "updates the schedule" do
|
33
|
+
stub_put("/schedules/4462.xml").
|
34
|
+
to_return(xml_response("ok.xml"))
|
35
|
+
|
36
|
+
model = Invoicexpress::Models::Schedule.new(
|
37
|
+
:id=>4462,
|
38
|
+
:start_date => Date.new(2013, 6, 16),
|
39
|
+
:end_date => Date.new(2013, 8, 18),
|
40
|
+
:create_back => "Yes",
|
41
|
+
:schedule_type => "Monthly",
|
42
|
+
:interval => 2,
|
43
|
+
:send_to_client => "No",
|
44
|
+
:description=> "created from API.",
|
45
|
+
:invoice_template=> Invoicexpress::Models::InvoiceTemplate.new(
|
46
|
+
:due_days=>1,
|
47
|
+
:client => Invoicexpress::Models::Client.new(
|
48
|
+
:name => "Chuck Norris",
|
49
|
+
:email=>'chuck@thinkorange.pt'
|
50
|
+
),
|
51
|
+
:items => [
|
52
|
+
Invoicexpress::Models::Item.new(
|
53
|
+
:name => "Item 1",
|
54
|
+
:unit_price => 30,
|
55
|
+
:quantity => 2,
|
56
|
+
:unit => "unit",
|
57
|
+
:tax=>Invoicexpress::Models::Tax.new(
|
58
|
+
:name => "IVA23",
|
59
|
+
)
|
60
|
+
),
|
61
|
+
Invoicexpress::Models::Item.new(
|
62
|
+
:name => "Item 2",
|
63
|
+
:unit_price => 60,
|
64
|
+
:quantity => 5,
|
65
|
+
:unit => "unit",
|
66
|
+
:tax=>Invoicexpress::Models::Tax.new(
|
67
|
+
:name => "IVA23",
|
68
|
+
)
|
69
|
+
)
|
70
|
+
]
|
71
|
+
)
|
72
|
+
)
|
73
|
+
|
74
|
+
expect { @client.update_schedule(model) }.to_not raise_error
|
75
|
+
end
|
76
|
+
|
77
|
+
it "raises if no schedule is passed" do
|
78
|
+
expect {
|
79
|
+
@client.update_schedule(nil)
|
80
|
+
}.to raise_error(ArgumentError)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "raises if the schedule to update has no id" do
|
84
|
+
stub_put("/schedules/.xml").
|
85
|
+
to_return(xml_response("ok.xml"))
|
86
|
+
expect {
|
87
|
+
@client.update_schedule(Invoicexpress::Models::Schedule.new)
|
88
|
+
}.to raise_error(ArgumentError)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe ".activate_schedule" do
|
93
|
+
it "activates the schedule" do
|
94
|
+
stub_put("/schedules/4462/activate").
|
95
|
+
to_return(xml_response("ok.xml"))
|
96
|
+
model = Invoicexpress::Models::Schedule.new(:id=>4462)
|
97
|
+
expect { item = @client.activate_schedule(model) }.to_not raise_error
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe ".deactivate_schedule" do
|
102
|
+
it "deactivates the schedule" do
|
103
|
+
stub_put("/schedules/4462/deactivate").
|
104
|
+
to_return(xml_response("ok.xml"))
|
105
|
+
model = Invoicexpress::Models::Schedule.new(:id=>4462)
|
106
|
+
expect { item = @client.deactivate_schedule(model) }.to_not raise_error
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Invoicexpress::Client::Sequences do
|
4
|
+
before do
|
5
|
+
@client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".sequences" do
|
9
|
+
it "Returns all the sequences" do
|
10
|
+
stub_get("/sequences.xml").
|
11
|
+
to_return(xml_response("sequences.list.xml"))
|
12
|
+
|
13
|
+
list = @client.sequences
|
14
|
+
list.count.should == 1
|
15
|
+
list.first.id == 230568
|
16
|
+
list.first.current_invoice_number==1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".sequence" do
|
21
|
+
it "gets a sequence" do
|
22
|
+
stub_get("/sequences/230568.xml").
|
23
|
+
to_return(xml_response("sequences.get.xml"))
|
24
|
+
|
25
|
+
c = @client.sequence(230568)
|
26
|
+
c.id.should == "230568"
|
27
|
+
c.serie.should == "2013"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".create_sequence" do
|
32
|
+
it "creates a new sequence" do
|
33
|
+
stub_post("/sequences.xml").
|
34
|
+
to_return(xml_response("sequences.create.xml"))
|
35
|
+
|
36
|
+
seq = Invoicexpress::Models::Sequence.new({
|
37
|
+
:serie => "2099",
|
38
|
+
:current_invoice_number => 100,
|
39
|
+
:current_credit_note_number => 200,
|
40
|
+
:current_debit_note_number => 300,
|
41
|
+
:default_sequence => 0
|
42
|
+
})
|
43
|
+
|
44
|
+
new_object = @client.create_sequence(seq)
|
45
|
+
new_object.serie.should == "2099"
|
46
|
+
new_object.current_invoice_number.should == 100
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".update_sequence" do
|
51
|
+
it "updates the sequence" do
|
52
|
+
stub_put("/sequences/266500.xml").
|
53
|
+
to_return(xml_response("sequences.update.xml"))
|
54
|
+
|
55
|
+
model = Invoicexpress::Models::Sequence.new({
|
56
|
+
:id=>'266500',
|
57
|
+
:serie => "2098",
|
58
|
+
:current_invoice_number => 100,
|
59
|
+
:current_credit_note_number => 200,
|
60
|
+
:current_debit_note_number => 300,
|
61
|
+
:default_sequence => 0
|
62
|
+
})
|
63
|
+
|
64
|
+
expect { @client.update_sequence(model) }.to_not raise_error
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Invoicexpress::Client::SimplifiedInvoices do
|
4
|
+
before do
|
5
|
+
@client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".simplified_invoices" do
|
9
|
+
it "Returns all the simplified invoices" do
|
10
|
+
stub_get("/simplified_invoices.xml?page=1").
|
11
|
+
to_return(xml_response("simplified_invoices.list.xml"))
|
12
|
+
|
13
|
+
items = @client.simplified_invoices
|
14
|
+
items.count.should == 2
|
15
|
+
items.first.id == 1425061
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".create_simplified_invoice" do
|
20
|
+
it "creates a new simplified invoice" do
|
21
|
+
stub_post("/simplified_invoices.xml").
|
22
|
+
to_return(xml_response("simplified_invoices.create.xml"))
|
23
|
+
|
24
|
+
|
25
|
+
object = Invoicexpress::Models::SimplifiedInvoice.new(
|
26
|
+
:date => Date.new(2013, 5, 1),
|
27
|
+
:due_date => Date.new(2013, 6, 1),
|
28
|
+
:tax_exemption => "M01",
|
29
|
+
:client => Invoicexpress::Models::Client.new(
|
30
|
+
:name => "Pedro Sousa"
|
31
|
+
),
|
32
|
+
:items => [
|
33
|
+
Invoicexpress::Models::Item.new(
|
34
|
+
:name => "Item 1",
|
35
|
+
:unit_price => 60,
|
36
|
+
:quantity => 2,
|
37
|
+
:unit => "unit",
|
38
|
+
),
|
39
|
+
Invoicexpress::Models::Item.new(
|
40
|
+
:name => "Item 2",
|
41
|
+
:unit_price => 50,
|
42
|
+
:quantity => 1,
|
43
|
+
:unit => "unit",
|
44
|
+
)
|
45
|
+
]
|
46
|
+
)
|
47
|
+
|
48
|
+
item = @client.create_simplified_invoice(object)
|
49
|
+
item.id.should == 1425061
|
50
|
+
item.status == "draft"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".simplified_invoice" do
|
55
|
+
it "gets a simplified invoice" do
|
56
|
+
stub_get("/simplified_invoices/1425061.xml").
|
57
|
+
to_return(xml_response("simplified_invoices.get.xml"))
|
58
|
+
|
59
|
+
item = @client.simplified_invoice(1425061)
|
60
|
+
item.status.should == "settled"
|
61
|
+
item.sequence_number.should == "1/2013"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ".update_simplified_invoice" do
|
66
|
+
it "updates the simplified invoice" do
|
67
|
+
stub_put("/simplified_invoices/1425061.xml").
|
68
|
+
to_return(xml_response("clients.update.xml"))
|
69
|
+
|
70
|
+
model = Invoicexpress::Models::SimplifiedInvoice.new(:id => 1425061)
|
71
|
+
expect { @client.update_simplified_invoice(model) }.to_not raise_error
|
72
|
+
end
|
73
|
+
it "raises if no simplified invoice is passed" do
|
74
|
+
expect {
|
75
|
+
@client.update_simplified_invoice(nil)
|
76
|
+
}.to raise_error(ArgumentError)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "raises if the simplified invoice to update has no id" do
|
80
|
+
stub_put("/schedules/.xml").
|
81
|
+
to_return(xml_response("ok.xml"))
|
82
|
+
expect {
|
83
|
+
@client.update_simplified_invoice(Invoicexpress::Models::SimplifiedInvoice.new)
|
84
|
+
}.to raise_error(ArgumentError)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe ".update_simplified_invoice_state" do
|
89
|
+
it "updates the state" do
|
90
|
+
stub_put("/simplified_invoices/1425061/change-state.xml").
|
91
|
+
to_return(xml_response("simplified_invoices.update_state.xml"))
|
92
|
+
|
93
|
+
state = Invoicexpress::Models::InvoiceState.new(
|
94
|
+
:state => "finalized"
|
95
|
+
)
|
96
|
+
expect { item = @client.update_simplified_invoice_state(1425061, state) }.to_not raise_error
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe ".simplified_invoice_mail" do
|
101
|
+
it "sends the invoice through email" do
|
102
|
+
stub_put("/simplified_invoices/1425061/email-document.xml").
|
103
|
+
to_return(xml_response("simplified_invoices.email_document.xml"))
|
104
|
+
|
105
|
+
message = Invoicexpress::Models::Message.new(
|
106
|
+
:subject => "Hello world",
|
107
|
+
:body => "Here is the invoice.",
|
108
|
+
:client => Invoicexpress::Models::Client.new(
|
109
|
+
:name => "Pedro Sousa",
|
110
|
+
:email=> 'psousa@thinkorange.pt'
|
111
|
+
)
|
112
|
+
)
|
113
|
+
expect {item = @client.simplified_invoice_mail(1425061, message) }.to_not raise_error
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|