freeagent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +1 -0
  3. data/CHANGELOG.rdoc +6 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +50 -0
  6. data/LICENSE +22 -0
  7. data/README.rdoc +27 -0
  8. data/Rakefile +28 -0
  9. data/freeagent.gemspec +27 -0
  10. data/lib/free_agent.rb +64 -0
  11. data/lib/free_agent/attachment.rb +21 -0
  12. data/lib/free_agent/bank_account.rb +7 -0
  13. data/lib/free_agent/base.rb +6 -0
  14. data/lib/free_agent/bill.rb +15 -0
  15. data/lib/free_agent/contact.rb +7 -0
  16. data/lib/free_agent/invoice.rb +7 -0
  17. data/lib/free_agent/invoice_item.rb +10 -0
  18. data/lib/free_agent/project.rb +7 -0
  19. data/lib/free_agent/version.rb +16 -0
  20. data/lib/freeagent.rb +1 -0
  21. data/spec/fixtures/attachments/all.xml +23 -0
  22. data/spec/fixtures/attachments/single.xml +11 -0
  23. data/spec/fixtures/bank_accounts/all.xml +35 -0
  24. data/spec/fixtures/bank_accounts/single.xml +15 -0
  25. data/spec/fixtures/bills/all.xml +37 -0
  26. data/spec/fixtures/bills/single.xml +18 -0
  27. data/spec/fixtures/contacts/all.xml +47 -0
  28. data/spec/fixtures/contacts/single.xml +23 -0
  29. data/spec/fixtures/invoice_items/all.xml +15 -0
  30. data/spec/fixtures/invoice_items/single.xml +13 -0
  31. data/spec/fixtures/invoices/all.xml +75 -0
  32. data/spec/fixtures/invoices/single.xml +37 -0
  33. data/spec/fixtures/projects/all.xml +25 -0
  34. data/spec/fixtures/projects/single.xml +23 -0
  35. data/spec/spec_helper.rb +33 -0
  36. data/spec/support/helper.rb +18 -0
  37. data/spec/support/mimic.rb +47 -0
  38. data/spec/unit/attachment_spec.rb +56 -0
  39. data/spec/unit/bank_account_spec.rb +56 -0
  40. data/spec/unit/base_spec.rb +9 -0
  41. data/spec/unit/bill_spec.rb +66 -0
  42. data/spec/unit/contact_spec.rb +56 -0
  43. data/spec/unit/freeagent_spec.rb +54 -0
  44. data/spec/unit/invoice_item_spec.rb +77 -0
  45. data/spec/unit/invoice_spec.rb +56 -0
  46. data/spec/unit/project_spec.rb +56 -0
  47. metadata +169 -0
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Attachment do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::Attachment.collection_path.should == '/attachments.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::Attachment.element_path(:first).should == '/attachments/first.xml'
16
+ FreeAgent::Attachment.element_path(100000).should == '/attachments/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ before(:each) do
23
+ @attachments = FreeAgent::Attachment.all
24
+ end
25
+
26
+ it "returns an array" do
27
+ @attachments.should be_a(Array)
28
+ end
29
+
30
+ it "returns the attachments" do
31
+ @attachments.should have(2).records
32
+ @attachments.first.should be_a(FreeAgent::Attachment)
33
+ end
34
+ end
35
+
36
+ describe ".find(id)" do
37
+ context "when the record exists" do
38
+ before(:each) do
39
+ @attachment = FreeAgent::Attachment.find(2)
40
+ end
41
+
42
+ it "returns an attachment" do
43
+ @attachment.should be_a(FreeAgent::Attachment)
44
+ end
45
+ end
46
+
47
+ context "when the record does not exist" do
48
+ it "raises a ResourceNotFound error" do
49
+ lambda do
50
+ FreeAgent::Attachment.find(1)
51
+ end.should raise_error(ActiveResource::ResourceNotFound)
52
+ end
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::BankAccount do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::BankAccount.collection_path.should == '/bank_accounts.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::BankAccount.element_path(:first).should == '/bank_accounts/first.xml'
16
+ FreeAgent::BankAccount.element_path(100000).should == '/bank_accounts/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ before(:each) do
23
+ @bank_accounts = FreeAgent::BankAccount.all
24
+ end
25
+
26
+ it "returns an array" do
27
+ @bank_accounts.should be_a(Array)
28
+ end
29
+
30
+ it "returns the bank accounts" do
31
+ @bank_accounts.should have(3).records
32
+ @bank_accounts.first.should be_a(FreeAgent::BankAccount)
33
+ end
34
+ end
35
+
36
+ describe ".find(id)" do
37
+ context "when the record exists" do
38
+ before(:each) do
39
+ @bank_account = FreeAgent::BankAccount.find(2)
40
+ end
41
+
42
+ it "returns a bank account" do
43
+ @bank_account.should be_a(FreeAgent::BankAccount)
44
+ end
45
+ end
46
+
47
+ context "when the record does not exist" do
48
+ it "raises a ResourceNotFound error" do
49
+ lambda do
50
+ FreeAgent::BankAccount.find(1)
51
+ end.should raise_error(ActiveResource::ResourceNotFound)
52
+ end
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Base do
4
+
5
+ it "extends ActiveResource::Base" do
6
+ klass.superclass.should == ActiveResource::Base
7
+ end
8
+
9
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Bill do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::Bill.collection_path.should == '/bills.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::Bill.element_path(:first).should == '/bills/first.xml'
16
+ FreeAgent::Bill.element_path(100000).should == '/bills/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ context "without period parameter" do
23
+ it "raises a BadRequest error" do
24
+ lambda do
25
+ FreeAgent::Bill.all
26
+ end.should raise_error(ActiveResource::BadRequest)
27
+ end
28
+ end
29
+
30
+ context "with period parameter" do
31
+ before(:each) do
32
+ @bills = FreeAgent::Bill.all(:params => { :period => '2011-01-01_2011-12-31' })
33
+ end
34
+
35
+ it "returns an array" do
36
+ @bills.should be_a(Array)
37
+ end
38
+
39
+ it "returns the bills" do
40
+ @bills.should have(2).records
41
+ @bills.first.should be_a(FreeAgent::Bill)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe ".find(id)" do
47
+ context "when the record exists" do
48
+ before(:each) do
49
+ @bill = FreeAgent::Bill.find(2)
50
+ end
51
+
52
+ it "returns a bill" do
53
+ @bill.should be_a(FreeAgent::Bill)
54
+ end
55
+ end
56
+
57
+ context "when the record does not exist" do
58
+ it "raises a ResourceNotFound error" do
59
+ lambda do
60
+ FreeAgent::Bill.find(1)
61
+ end.should raise_error(ActiveResource::ResourceNotFound)
62
+ end
63
+ end
64
+ end
65
+
66
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Contact do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::Contact.collection_path.should == '/contacts.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::Contact.element_path(:first).should == '/contacts/first.xml'
16
+ FreeAgent::Contact.element_path(100000).should == '/contacts/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ before(:each) do
23
+ @contacts = FreeAgent::Contact.all
24
+ end
25
+
26
+ it "returns an array" do
27
+ @contacts.should be_a(Array)
28
+ end
29
+
30
+ it "returns the contacts" do
31
+ @contacts.should have(2).records
32
+ @contacts.first.should be_a(FreeAgent::Contact)
33
+ end
34
+ end
35
+
36
+ describe ".find(id)" do
37
+ context "when the record exists" do
38
+ before(:each) do
39
+ @contacts = FreeAgent::Contact.find(2)
40
+ end
41
+
42
+ it "returns a contact" do
43
+ @contacts.should be_a(FreeAgent::Contact)
44
+ end
45
+ end
46
+
47
+ context "when the record does not exist" do
48
+ it "raises a ResourceNotFound error" do
49
+ lambda do
50
+ FreeAgent::Contact.find(1)
51
+ end.should raise_error(ActiveResource::ResourceNotFound)
52
+ end
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent do
4
+
5
+ before(:each) do
6
+ FreeAgent::Base.tap do |base|
7
+ base.site = base.user = base.password = nil
8
+ end
9
+ end
10
+
11
+ describe ".configured?" do
12
+ it "returns true when Base.user, Base.password, Base.site are configured" do
13
+ klass.configured?.should be_false
14
+
15
+ klass.username = "email@example.com"
16
+ klass.configured?.should be_false
17
+
18
+ klass.password = "letmein"
19
+ klass.configured?.should be_false
20
+
21
+ klass.subdomain = "example"
22
+ klass.configured?.should be_true
23
+ end
24
+ end
25
+
26
+ describe ".configure" do
27
+ context "without block" do
28
+ it "raises LocalJumpError" do
29
+ lambda do
30
+ klass.configure
31
+ end.should raise_error(LocalJumpError)
32
+ end
33
+ end
34
+
35
+ context "with block" do
36
+ it "yields self" do
37
+ klass.configure do |config|
38
+ config.should be(klass)
39
+ end
40
+ end
41
+
42
+ it "implements the configuration pattern" do
43
+ klass.configured?.should be_false
44
+ klass.configure do |config|
45
+ config.username = "email@example.com"
46
+ config.password = "letmein"
47
+ config.subdomain = "example"
48
+ end
49
+ klass.configured?.should be_true
50
+ end
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::InvoiceItem do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::InvoiceItem.collection_path(:invoice_id => 1).should == '/invoices/1/invoice_items.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::InvoiceItem.element_path(:first, :invoice_id => 1).should == '/invoices/1/invoice_items/first.xml'
16
+ FreeAgent::InvoiceItem.element_path(100000, :invoice_id => 1).should == '/invoices/1/invoice_items/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ context "when the invoice exists" do
22
+ describe ".all" do
23
+ before(:each) do
24
+ @invoice_items = FreeAgent::InvoiceItem.all(:params => { :invoice_id => 2 })
25
+ end
26
+
27
+ it "returns an array" do
28
+ @invoice_items.should be_a(Array)
29
+ end
30
+
31
+ it "returns the invoice items" do
32
+ @invoice_items.should have(1).records
33
+ @invoice_items.first.should be_a(FreeAgent::InvoiceItem)
34
+ end
35
+ end
36
+
37
+ describe ".find(id)" do
38
+ context "when the record exists" do
39
+ before(:each) do
40
+ @invoice_item = FreeAgent::InvoiceItem.find(2, :params => { :invoice_id => 2 })
41
+ end
42
+
43
+ it "returns an invoice" do
44
+ @invoice_item.should be_a(FreeAgent::InvoiceItem)
45
+ end
46
+ end
47
+
48
+ context "when the record does not exist" do
49
+ it "raises a ResourceNotFound error" do
50
+ lambda do
51
+ FreeAgent::InvoiceItem.find(1, :params => { :invoice_id => 2 })
52
+ end.should raise_error(ActiveResource::ResourceNotFound)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ context "when the invoice does not exist" do
59
+ describe ".all" do
60
+ it "raises a ResourceNotFound error" do
61
+ pending 'ActiveResource returns nil'
62
+ lambda do
63
+ FreeAgent::InvoiceItem.all(:params => { :invoice_id => 1 })
64
+ end.should raise_error(ActiveResource::ResourceNotFound)
65
+ end
66
+ end
67
+
68
+ describe ".find(id)" do
69
+ it "raises a ResourceNotFound error" do
70
+ lambda do
71
+ FreeAgent::InvoiceItem.find(1, :params => { :invoice_id => 1 })
72
+ end.should raise_error(ActiveResource::ResourceNotFound)
73
+ end
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Invoice do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::Invoice.collection_path.should == '/invoices.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::Invoice.element_path(:first).should == '/invoices/first.xml'
16
+ FreeAgent::Invoice.element_path(100000).should == '/invoices/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ before(:each) do
23
+ @invoices = FreeAgent::Invoice.all
24
+ end
25
+
26
+ it "returns an array" do
27
+ @invoices.should be_a(Array)
28
+ end
29
+
30
+ it "returns the invoices" do
31
+ @invoices.should have(2).records
32
+ @invoices.first.should be_a(FreeAgent::Invoice)
33
+ end
34
+ end
35
+
36
+ describe ".find(id)" do
37
+ context "when the record exists" do
38
+ before(:each) do
39
+ @invoice = FreeAgent::Invoice.find(2)
40
+ end
41
+
42
+ it "returns an invoice" do
43
+ @invoice.should be_a(FreeAgent::Invoice)
44
+ end
45
+ end
46
+
47
+ context "when the record does not exist" do
48
+ it "raises a ResourceNotFound error" do
49
+ lambda do
50
+ FreeAgent::Invoice.find(1)
51
+ end.should raise_error(ActiveResource::ResourceNotFound)
52
+ end
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FreeAgent::Project do
4
+
5
+ it "extends FreeAgent::Base" do
6
+ klass.superclass.should == FreeAgent::Base
7
+ end
8
+
9
+ describe "paths" do
10
+ it "has correct collection path" do
11
+ FreeAgent::Project.collection_path.should == '/projects.xml'
12
+ end
13
+
14
+ it "has correct element path" do
15
+ FreeAgent::Project.element_path(:first).should == '/projects/first.xml'
16
+ FreeAgent::Project.element_path(100000).should == '/projects/100000.xml'
17
+ end
18
+ end
19
+
20
+
21
+ describe ".all" do
22
+ before(:each) do
23
+ @projects = FreeAgent::Project.all
24
+ end
25
+
26
+ it "returns an array" do
27
+ @projects.should be_a(Array)
28
+ end
29
+
30
+ it "returns the projects" do
31
+ @projects.should have(1).records
32
+ @projects.first.should be_a(FreeAgent::Project)
33
+ end
34
+ end
35
+
36
+ describe ".find(id)" do
37
+ context "when the record exists" do
38
+ before(:each) do
39
+ @project = FreeAgent::Project.find(2)
40
+ end
41
+
42
+ it "returns a project" do
43
+ @project.should be_a(FreeAgent::Project)
44
+ end
45
+ end
46
+
47
+ context "when the record does not exist" do
48
+ it "raises a ResourceNotFound error" do
49
+ lambda do
50
+ FreeAgent::Project.find(1)
51
+ end.should raise_error(ActiveResource::ResourceNotFound)
52
+ end
53
+ end
54
+ end
55
+
56
+ end