invoicexpress 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG.md +0 -0
  2. data/README.md +322 -0
  3. data/Rakefile +19 -0
  4. data/invoicexpress.gemspec +26 -0
  5. data/lib/faraday/response/parse_xml.rb +23 -0
  6. data/lib/faraday/response/raise_invoicexpress_errors.rb +20 -0
  7. data/lib/invoicexpress.rb +26 -0
  8. data/lib/invoicexpress/authentication.rb +15 -0
  9. data/lib/invoicexpress/client.rb +56 -0
  10. data/lib/invoicexpress/client/cash_invoices.rb +110 -0
  11. data/lib/invoicexpress/client/charts.rb +57 -0
  12. data/lib/invoicexpress/client/clients.rb +215 -0
  13. data/lib/invoicexpress/client/credit_notes.rb +128 -0
  14. data/lib/invoicexpress/client/debit_notes.rb +129 -0
  15. data/lib/invoicexpress/client/invoices.rb +107 -0
  16. data/lib/invoicexpress/client/items.rb +82 -0
  17. data/lib/invoicexpress/client/purchase_orders.rb +126 -0
  18. data/lib/invoicexpress/client/schedules.rb +110 -0
  19. data/lib/invoicexpress/client/sequences.rb +71 -0
  20. data/lib/invoicexpress/client/simplified_invoices.rb +130 -0
  21. data/lib/invoicexpress/client/taxes.rb +82 -0
  22. data/lib/invoicexpress/client/users.rb +48 -0
  23. data/lib/invoicexpress/configuration.rb +51 -0
  24. data/lib/invoicexpress/connection.rb +40 -0
  25. data/lib/invoicexpress/error.rb +68 -0
  26. data/lib/invoicexpress/models.rb +29 -0
  27. data/lib/invoicexpress/models/chart.rb +41 -0
  28. data/lib/invoicexpress/models/client.rb +24 -0
  29. data/lib/invoicexpress/models/filter.rb +60 -0
  30. data/lib/invoicexpress/models/invoice.rb +235 -0
  31. data/lib/invoicexpress/models/purchase_order.rb +72 -0
  32. data/lib/invoicexpress/models/quarterly_result.rb +45 -0
  33. data/lib/invoicexpress/models/schedule.rb +87 -0
  34. data/lib/invoicexpress/models/sequence.rb +17 -0
  35. data/lib/invoicexpress/models/supplier.rb +17 -0
  36. data/lib/invoicexpress/models/top_client.rb +15 -0
  37. data/lib/invoicexpress/models/top_debtor.rb +14 -0
  38. data/lib/invoicexpress/models/user.rb +31 -0
  39. data/lib/invoicexpress/request.rb +63 -0
  40. data/lib/invoicexpress/version.rb +3 -0
  41. data/spec/fixtures/charts.invoicing.xml +21 -0
  42. data/spec/fixtures/charts.quarterly-results.xml +25 -0
  43. data/spec/fixtures/charts.top-clients.xml +10 -0
  44. data/spec/fixtures/charts.top-debtors.xml +10 -0
  45. data/spec/fixtures/charts.treasury.xml +49 -0
  46. data/spec/fixtures/clients.create.xml +6 -0
  47. data/spec/fixtures/clients.get.xml +21 -0
  48. data/spec/fixtures/clients.invoices.xml +11 -0
  49. data/spec/fixtures/clients.list.xml +18 -0
  50. data/spec/fixtures/clients.update.xml +1 -0
  51. data/spec/fixtures/credit_notes.create.xml +53 -0
  52. data/spec/fixtures/credit_notes.email_document.xml +9 -0
  53. data/spec/fixtures/credit_notes.list.xml +114 -0
  54. data/spec/fixtures/credit_notes.update_state.xml +7 -0
  55. data/spec/fixtures/invoices.create.xml +37 -0
  56. data/spec/fixtures/invoices.get.xml +50 -0
  57. data/spec/fixtures/invoices.list.xml +537 -0
  58. data/spec/fixtures/invoices.update_state.xml +7 -0
  59. data/spec/fixtures/ok.xml +0 -0
  60. data/spec/fixtures/po.create.xml +42 -0
  61. data/spec/fixtures/po.email_document.xml +0 -0
  62. data/spec/fixtures/po.get.xml +42 -0
  63. data/spec/fixtures/po.list.xml +44 -0
  64. data/spec/fixtures/po.update_state.xml +7 -0
  65. data/spec/fixtures/schedules.create.xml +48 -0
  66. data/spec/fixtures/schedules.get.xml +57 -0
  67. data/spec/fixtures/schedules.list.xml +40 -0
  68. data/spec/fixtures/sequences.create.xml +9 -0
  69. data/spec/fixtures/sequences.get.xml +10 -0
  70. data/spec/fixtures/sequences.list.xml +12 -0
  71. data/spec/fixtures/sequences.update.xml +10 -0
  72. data/spec/fixtures/simplified_invoices.create.xml +53 -0
  73. data/spec/fixtures/simplified_invoices.email_document.xml +9 -0
  74. data/spec/fixtures/simplified_invoices.get.xml +74 -0
  75. data/spec/fixtures/simplified_invoices.list.xml +114 -0
  76. data/spec/fixtures/simplified_invoices.update.xml +0 -0
  77. data/spec/fixtures/simplified_invoices.update_state.xml +7 -0
  78. data/spec/fixtures/taxes.create.xml +7 -0
  79. data/spec/fixtures/taxes.list.xml +18 -0
  80. data/spec/fixtures/taxes.update.xml +7 -0
  81. data/spec/fixtures/users.accounts.xml +12 -0
  82. data/spec/fixtures/users.change-account.xml +0 -0
  83. data/spec/fixtures/users.login.xml +11 -0
  84. data/spec/helper.rb +62 -0
  85. data/spec/invoicexpress/client/charts_spec.rb +69 -0
  86. data/spec/invoicexpress/client/clients_spec.rb +108 -0
  87. data/spec/invoicexpress/client/credit_notes_spec.rb +104 -0
  88. data/spec/invoicexpress/client/invoices_spec.rb +110 -0
  89. data/spec/invoicexpress/client/purchase_orders_spec.rb +116 -0
  90. data/spec/invoicexpress/client/schedules_spec.rb +111 -0
  91. data/spec/invoicexpress/client/sequences_spec.rb +68 -0
  92. data/spec/invoicexpress/client/simplified_invoices_spec.rb +116 -0
  93. data/spec/invoicexpress/client/taxes_spec.rb +70 -0
  94. data/spec/invoicexpress/client/users_spec.rb +40 -0
  95. data/spec/invoicexpress/client_spec.rb +24 -0
  96. data/spec/invoicexpress_spec.rb +19 -0
  97. metadata +279 -0
@@ -0,0 +1,114 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <simplified_invoices>
3
+ <results>
4
+ <current_page>1</current_page>
5
+ <entries>2</entries>
6
+ <total_entries>2</total_entries>
7
+ </results>
8
+ <simplified_invoice>
9
+ <id>1425061</id>
10
+ <status>settled</status>
11
+ <archived>false</archived>
12
+ <type>SimplifiedInvoice</type>
13
+ <sequence_number>1/2013</sequence_number>
14
+ <date>01/05/2013</date>
15
+ <reference></reference>
16
+ <observations>Artigo 16&#186; n&#186; 6 do CIVA. </observations>
17
+ <retention></retention>
18
+ <permalink>http://www.invoicexpress.net/documents/9c21e2aa2fd5a9f999673bc993407a562177fecb</permalink>
19
+ <client>
20
+ <id>550611</id>
21
+ <name>Pedro Sousa</name>
22
+ <email>psousa@thinkorange.pt</email>
23
+ <address>Rua Luisa de Cam&#245;es 18</address>
24
+ <postal_code>1231-123</postal_code>
25
+ <country>Portugal</country>
26
+ <fiscal_id>210533382</fiscal_id>
27
+ </client>
28
+ <currency>Euro</currency>
29
+ <items type="array">
30
+ <item>
31
+ <name>Item 1</name>
32
+ <description></description>
33
+ <unit_price>60.0</unit_price>
34
+ <unit>unit</unit>
35
+ <quantity>2.0</quantity>
36
+ <tax>
37
+ <name></name>
38
+ <value>0.0</value>
39
+ </tax>
40
+ <discount>0.0</discount>
41
+ </item>
42
+ <item>
43
+ <name>Item 2</name>
44
+ <description></description>
45
+ <unit_price>50.0</unit_price>
46
+ <unit>unit</unit>
47
+ <quantity>1.0</quantity>
48
+ <tax>
49
+ <name></name>
50
+ <value>0.0</value>
51
+ </tax>
52
+ <discount>0.0</discount>
53
+ </item>
54
+ </items>
55
+ <sum>170.0</sum>
56
+ <discount>0.0</discount>
57
+ <before_taxes>170.0</before_taxes>
58
+ <taxes>0.0</taxes>
59
+ <total>170.0</total>
60
+ </simplified_invoice>
61
+ <simplified_invoice>
62
+ <id>1425061</id>
63
+ <status>settled</status>
64
+ <archived>false</archived>
65
+ <type>SimplifiedInvoice</type>
66
+ <sequence_number>1/2013</sequence_number>
67
+ <date>01/05/2013</date>
68
+ <reference></reference>
69
+ <observations>Artigo 16&#186; n&#186; 6 do CIVA. </observations>
70
+ <retention></retention>
71
+ <permalink>http://www.invoicexpress.net/documents/9c21e2aa2fd5a9f999673bc993407a562177fecb</permalink>
72
+ <client>
73
+ <id>550611</id>
74
+ <name>Pedro Sousa</name>
75
+ <email>psousa@thinkorange.pt</email>
76
+ <address>Rua Luisa de Cam&#245;es 18</address>
77
+ <postal_code>1231-123</postal_code>
78
+ <country>Portugal</country>
79
+ <fiscal_id>210533382</fiscal_id>
80
+ </client>
81
+ <currency>Euro</currency>
82
+ <items type="array">
83
+ <item>
84
+ <name>Item 1</name>
85
+ <description></description>
86
+ <unit_price>60.0</unit_price>
87
+ <unit>unit</unit>
88
+ <quantity>2.0</quantity>
89
+ <tax>
90
+ <name></name>
91
+ <value>0.0</value>
92
+ </tax>
93
+ <discount>0.0</discount>
94
+ </item>
95
+ <item>
96
+ <name>Item 2</name>
97
+ <description></description>
98
+ <unit_price>50.0</unit_price>
99
+ <unit>unit</unit>
100
+ <quantity>1.0</quantity>
101
+ <tax>
102
+ <name></name>
103
+ <value>0.0</value>
104
+ </tax>
105
+ <discount>0.0</discount>
106
+ </item>
107
+ </items>
108
+ <sum>170.0</sum>
109
+ <discount>0.0</discount>
110
+ <before_taxes>170.0</before_taxes>
111
+ <taxes>0.0</taxes>
112
+ <total>170.0</total>
113
+ </simplified_invoice>
114
+ </simplified_invoices>
File without changes
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <simplified_invoice>
3
+ <id>1425061</id>
4
+ <type>SimplifiedInvoice</type>
5
+ <sequence_number>1/2013</sequence_number>
6
+ <state>settled</state>
7
+ </simplified_invoice>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tax>
3
+ <name>IVA19</name>
4
+ <value>19.0</value>
5
+ <region>PT</region>
6
+ <default_tax>1</default_tax>
7
+ </tax>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <taxes>
3
+ <tax>
4
+ <id>1</id>
5
+ <name>IVA20</name>
6
+ <value>20</value>
7
+ <region>PT</region>
8
+ <default_tax>1</default_tax>
9
+ <!-- default tax -->
10
+ </tax>
11
+ <tax>
12
+ <id>2</id>
13
+ <name>IVA21</name>
14
+ <value>21</value>
15
+ <region>PT</region>
16
+ <default_tax>0</default_tax>
17
+ </tax>
18
+ </taxes>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tax>
3
+ <name>IVA23</name>
4
+ <value>23.0</value>
5
+ <region>PT</region>
6
+ <default_tax>1</default_tax>
7
+ </tax>
@@ -0,0 +1,12 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <accounts>
3
+ <account>
4
+ <id>13233</id>
5
+ <name>thinkorangeteste</name>
6
+ <url>https://thinkorangeteste.invoicexpress.net</url>
7
+ <api_key>xptoxpto</api_key>
8
+ <country>Portugal</country>
9
+ <state>active</state>
10
+ <blocked>false</blocked>
11
+ </account>
12
+ </accounts>
File without changes
@@ -0,0 +1,11 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <accounts>
3
+ <account>
4
+ <id>13233</id>
5
+ <name>thinkorangeteste</name>
6
+ <url>https://thinkorangeteste.invoicexpress.net</url>
7
+ <api_key>xptoxpto</api_key>
8
+ <state>active</state>
9
+ <blocked>false</blocked>
10
+ </account>
11
+ </accounts>
data/spec/helper.rb ADDED
@@ -0,0 +1,62 @@
1
+ require 'simplecov'
2
+
3
+ if ENV['COVERAGE']
4
+ SimpleCov.start do
5
+ add_filter "/spec"
6
+ end
7
+ end
8
+
9
+ require 'invoicexpress'
10
+ require 'rspec'
11
+ require 'webmock/rspec'
12
+
13
+ def stub_get(url)
14
+ stub_request(:get, invoicexpress_url(url))
15
+ end
16
+
17
+ def stub_post(url)
18
+ stub_request(:post, invoicexpress_url(url))
19
+ end
20
+
21
+ def stub_put(url)
22
+ stub_request(:put, invoicexpress_url(url))
23
+ end
24
+
25
+ def stub_delete(url)
26
+ stub_request(:delete, invoicexpress_url(url))
27
+ end
28
+
29
+ def fixture_path
30
+ File.expand_path("../fixtures", __FILE__)
31
+ end
32
+
33
+ def fixture(file)
34
+ File.new(fixture_path + "/" + file)
35
+ end
36
+
37
+ def empty_xml_response
38
+ {
39
+ :body => "",
40
+ :headers => {
41
+ :content_type => "application/xml; charset=utf-8"
42
+ }
43
+ }
44
+ end
45
+
46
+ def xml_response(file)
47
+ {
48
+ :body => fixture(file),
49
+ :headers => {
50
+ :content_type => "application/xml; charset=utf-8"
51
+ }
52
+ }
53
+ end
54
+
55
+ def invoicexpress_url(url)
56
+ if url =~ /^http/
57
+ url
58
+ else
59
+ "https://thinkorangeteste.invoicexpress.net#{url}"
60
+ end
61
+ end
62
+
@@ -0,0 +1,69 @@
1
+ require 'helper'
2
+
3
+ describe Invoicexpress::Client::Charts do
4
+
5
+ before do
6
+ @client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
7
+ end
8
+
9
+ describe ".invoicing_chart" do
10
+ it "Returns the invoicing chart data." do
11
+ stub_get("/api/charts/invoicing.xml").
12
+ to_return(xml_response("charts.invoicing.xml"))
13
+
14
+ chart = @client.invoicing_chart
15
+ chart.series.values.count.should == 6
16
+ chart.graphs.first.values.count.should == 6
17
+ end
18
+ end
19
+
20
+ describe ".treasury_chart" do
21
+ it "Returns the treasury chart data." do
22
+ stub_get("/api/charts/treasury.xml").
23
+ to_return(xml_response("charts.treasury.xml"))
24
+
25
+ chart = @client.treasury_chart
26
+ #all there
27
+ chart.series.values.count.should == 7
28
+ #4 graphs
29
+ chart.graphs.count.should ==4
30
+ #count values
31
+ chart.graphs.first.values.count.should ==7
32
+
33
+ end
34
+ end
35
+
36
+ describe ".top_clients" do
37
+ it "Returns the top 5 clients." do
38
+ stub_get("/api/charts/top-clients.xml").
39
+ to_return(xml_response("charts.top-clients.xml"))
40
+
41
+ chart = @client.top_clients
42
+ chart.clients.first.name.should =="Ruben Fonseca"
43
+ chart.clients.size.should ==1
44
+ end
45
+ end
46
+
47
+ describe ".top_debtors" do
48
+ it "Returns the top 5 debtors." do
49
+ stub_get("/api/charts/top-debtors.xml").
50
+ to_return(xml_response("charts.top-debtors.xml"))
51
+
52
+ chart = @client.top_debtors
53
+ chart.clients.size.should ==1
54
+ chart.clients.first.name.should =="Ruben Fonseca"
55
+ end
56
+ end
57
+
58
+ describe ".quarterly_results" do
59
+ it "return all the quarterly results." do
60
+ stub_get("/api/charts/quarterly-results.xml?year=2010").
61
+ to_return(xml_response("charts.quarterly-results.xml"))
62
+
63
+ list = @client.quarterly_results(2010)
64
+ list.quarter01.invoicing.should ==60.0
65
+ list.year.should ==2010
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,108 @@
1
+ require 'helper'
2
+
3
+ describe Invoicexpress::Client::Clients do
4
+
5
+ before do
6
+ @client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
7
+ end
8
+
9
+ describe ".clients" do
10
+ it "returns all the clients" do
11
+ stub_get("/clients.xml?per_page=30&page=1").
12
+ to_return(xml_response("clients.list.xml"))
13
+
14
+ list = @client.clients
15
+ list.count.should == 1
16
+ list.first.name.should == "Ruben Fonseca"
17
+ list.first.email.should == "fonseka@gmail.com"
18
+ end
19
+ end
20
+
21
+ describe ".create_client" do
22
+ it "creates a new client" do
23
+ stub_post("/clients.xml").
24
+ to_return(xml_response("clients.create.xml"))
25
+
26
+ model_client = Invoicexpress::Models::Client.new({
27
+ :name => "Ruben Fonseca",
28
+ :email => "fonseka@gmail.com"
29
+ })
30
+
31
+ new_client = @client.create_client(model_client)
32
+ new_client.name.should == "Ruben Fonseca"
33
+ new_client.email.should == "fonseka@gmail.com"
34
+ end
35
+
36
+ it "raises if no client is passed" do
37
+ expect {
38
+ @client.create_client(nil)
39
+ }.to raise_error(ArgumentError)
40
+ end
41
+
42
+ it "raises if the client has no name" do
43
+ expect {
44
+ @client.create_client(Invoicexpress::Models::Client.new)
45
+ }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+
49
+ describe ".update_client" do
50
+ it "updates the client" do
51
+ stub_put("/clients/123.xml").
52
+ to_return(xml_response("clients.update.xml"))
53
+
54
+ model = Invoicexpress::Models::Client.new(:id => 123)
55
+
56
+ expect { @client.update_client(model) }.to_not raise_error
57
+ end
58
+
59
+ it "raises if no client is passed" do
60
+ expect {
61
+ @client.update_client(nil)
62
+ }.to raise_error(ArgumentError)
63
+ end
64
+
65
+ it "raises if the client to update has no id" do
66
+ expect {
67
+ @client.update_client(Invoicexpress::Models::Client.new)
68
+ }.to raise_error(ArgumentError)
69
+ end
70
+ end
71
+
72
+ describe ".client" do
73
+ it "gets a client" do
74
+ stub_get("/clients/1.xml").
75
+ to_return(xml_response("clients.get.xml"))
76
+
77
+ c = @client.client(1)
78
+ c.name.should == "Bruce Norris"
79
+ c.code.should == 1337
80
+ end
81
+ end
82
+
83
+ describe ".client_invoices" do
84
+ it "gets the client's invoices" do
85
+ stub_post("/clients/1/invoices.xml").
86
+ to_return(xml_response("clients.invoices.xml"))
87
+
88
+ invoices = @client.client_invoices(1)
89
+ invoices.results.entries.should == 0
90
+ invoices.results.total_entries == 0
91
+ end
92
+
93
+ it "gets the client's invoices with filters" do
94
+ filter = Invoicexpress::Models::Filter.new({
95
+ :status => [:draft, :final],
96
+ :by_type => ["Receipt"],
97
+ :archived => [:non_archived]
98
+ })
99
+
100
+ stub_post("/clients/1/invoices.xml").
101
+ to_return(xml_response("clients.invoices.xml"))
102
+
103
+ invoices = @client.client_invoices(1, filter)
104
+ invoices.results.entries.should == 0
105
+ end
106
+ end
107
+
108
+ end
@@ -0,0 +1,104 @@
1
+ require 'helper'
2
+
3
+ describe Invoicexpress::Client::CreditNotes do
4
+ before do
5
+ @client = Invoicexpress::Client.new(:screen_name => "thinkorangeteste")
6
+ end
7
+
8
+ describe ".credit_notes" do
9
+ it "Returns all the credit notes" do
10
+ stub_get("/credit_notes.xml?page=1").
11
+ to_return(xml_response("credit_notes.list.xml"))
12
+
13
+ credit_notes = @client.credit_notes
14
+ credit_notes.count.should == 2
15
+ credit_notes.first.id == 1415679
16
+ end
17
+ end
18
+
19
+ describe ".create_credit_note" do
20
+ it "creates a new credit note" do
21
+ stub_post("/credit_notes.xml").
22
+ to_return(xml_response("credit_notes.create.xml"))
23
+
24
+
25
+ cnote = Invoicexpress::Models::CreditNote.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
+ cnote = @client.create_credit_note(cnote)
49
+ cnote.id.should == 1423940
50
+ cnote.status == "draft"
51
+ end
52
+ end
53
+
54
+ describe ".update_credit_note" do
55
+ it "updates the credit note" do
56
+ stub_put("/credit_notes/1423940.xml").
57
+ to_return(xml_response("ok.xml"))
58
+
59
+ model = Invoicexpress::Models::CreditNote.new(:id => 1423940)
60
+ expect { @client.update_credit_note(model) }.to_not raise_error
61
+ end
62
+ it "raises if no credit note is passed" do
63
+ expect {
64
+ @client.update_credit_note(nil)
65
+ }.to raise_error(ArgumentError)
66
+ end
67
+ it "raises if the credit_note to update has no id" do
68
+ stub_put("/credit_notes/.xml").
69
+ to_return(xml_response("ok.xml"))
70
+ expect {
71
+ @client.update_credit_note(Invoicexpress::Models::CreditNote.new)
72
+ }.to raise_error(ArgumentError)
73
+ end
74
+ end
75
+
76
+ describe ".update_credit_note_state" do
77
+ it "updates the state" do
78
+ stub_put("/credit_notes/1423940/change-state.xml").
79
+ to_return(xml_response("credit_notes.update_state.xml"))
80
+
81
+ state = Invoicexpress::Models::InvoiceState.new(
82
+ :state => "finalized"
83
+ )
84
+ expect { cnote = @client.update_credit_note_state(1423940, state) }.to_not raise_error
85
+ end
86
+ end
87
+
88
+ describe ".credit_note_mail" do
89
+ it "sends the credit note through email" do
90
+ stub_put("/credit_notes/1423940/email-document.xml").
91
+ to_return(xml_response("credit_notes.email_document.xml"))
92
+
93
+ message = Invoicexpress::Models::Message.new(
94
+ :subject => "Hello world",
95
+ :body => "Here is the invoice.",
96
+ :client => Invoicexpress::Models::Client.new(
97
+ :name => "Pedro Sousa",
98
+ :email=> 'psousa@thinkorange.pt'
99
+ )
100
+ )
101
+ expect { cnote = @client.credit_note_mail(1423940, message) }.to_not raise_error
102
+ end
103
+ end
104
+ end