harvest 0.8.2

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 (38) hide show
  1. data/HISTORY +3 -0
  2. data/LICENSE +23 -0
  3. data/README.rdoc +173 -0
  4. data/Rakefile +44 -0
  5. data/lib/harvest.rb +35 -0
  6. data/lib/harvest/base.rb +77 -0
  7. data/lib/harvest/harvest_resource.rb +15 -0
  8. data/lib/harvest/plugins/active_resource_inheritable_headers.rb +36 -0
  9. data/lib/harvest/plugins/toggleable.rb +12 -0
  10. data/lib/harvest/resources/client.rb +8 -0
  11. data/lib/harvest/resources/entry.rb +34 -0
  12. data/lib/harvest/resources/expense.rb +22 -0
  13. data/lib/harvest/resources/expense_category.rb +7 -0
  14. data/lib/harvest/resources/person.rb +44 -0
  15. data/lib/harvest/resources/project.rb +51 -0
  16. data/lib/harvest/resources/task.rb +8 -0
  17. data/lib/harvest/resources/task_assignment.rb +27 -0
  18. data/lib/harvest/resources/user_assignment.rb +27 -0
  19. data/test/integration/client_integration.rb +17 -0
  20. data/test/integration/client_teardown.rb +11 -0
  21. data/test/integration/expense_category_integration.rb +16 -0
  22. data/test/integration/expense_category_teardown.rb +12 -0
  23. data/test/integration/harvest_integration_test.rb +47 -0
  24. data/test/integration/project_integration.rb +19 -0
  25. data/test/integration/project_teardown.rb +12 -0
  26. data/test/integration/task_integration.rb +19 -0
  27. data/test/integration/task_teardown.rb +12 -0
  28. data/test/test_helper.rb +51 -0
  29. data/test/unit/base_test.rb +88 -0
  30. data/test/unit/resources/client_test.rb +82 -0
  31. data/test/unit/resources/expense_category_test.rb +49 -0
  32. data/test/unit/resources/expense_test.rb +14 -0
  33. data/test/unit/resources/person_test.rb +150 -0
  34. data/test/unit/resources/project_test.rb +154 -0
  35. data/test/unit/resources/task_assignment_test.rb +72 -0
  36. data/test/unit/resources/task_test.rb +82 -0
  37. data/test/unit/resources/user_assignment_test.rb +71 -0
  38. metadata +111 -0
@@ -0,0 +1,72 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+
3
+ class ExpenseAssignmentTest < Test::Unit::TestCase
4
+
5
+ def setup_resources
6
+ @task_assignment = {:id => 1, :project_id => 5}.to_xml(:root => "task_assignment")
7
+ @task_assignments = [{:id => 1, :project_id => 5}].to_xml(:root => "task_assignments")
8
+ end
9
+
10
+ def mock_responses
11
+ ActiveResource::HttpMock.respond_to do |mock|
12
+ mock.get "/task_assignments.xml", {}, @task_assignments
13
+ mock.get "/task_assignments/1.xml", {}, @task_assignment
14
+ mock.post "/task_assignments.xml", {}, @task_assignment, 201, "Location" => "/task_assignments/5.xml"
15
+ mock.put "/task_assignments/1.xml", {}, nil, 200
16
+ mock.delete "/task_assignments/1.xml", {}, nil, 200
17
+ mock.put "/task_assignments/1/toggle.xml", {}, nil, 200
18
+ end
19
+ end
20
+
21
+ context "task_assignment actions" do
22
+ setup do
23
+ setup_resources
24
+ mock_responses
25
+ end
26
+
27
+ should "get index" do
28
+ Harvest::Resources::TaskAssignment.find(:all)
29
+ expected_request = ActiveResource::Request.new(:get, "/task_assignments.xml")
30
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
31
+ end
32
+
33
+ should "get a single task_assignment" do
34
+ Harvest::Resources::TaskAssignment.find(1)
35
+ expected_request = ActiveResource::Request.new(:get, "/task_assignments/1.xml")
36
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
37
+ end
38
+
39
+ should "create a new task_assignment" do
40
+ task_assignment = Harvest::Resources::TaskAssignment.new(:project_id => 5)
41
+ task_assignment.save
42
+ expected_request = ActiveResource::Request.new(:post, "/task_assignments.xml")
43
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
44
+ end
45
+
46
+ should "update an existing task_assignment" do
47
+ task_assignment = Harvest::Resources::TaskAssignment.find(1)
48
+ task_assignment.name = "Admin"
49
+ task_assignment.save
50
+ expected_request = ActiveResource::Request.new(:put, "/task_assignments/1.xml")
51
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
52
+ end
53
+
54
+ should "delete an existing task_assignment" do
55
+ Harvest::Resources::TaskAssignment.delete(1)
56
+ expected_request = ActiveResource::Request.new(:delete, "/task_assignments/1.xml")
57
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
58
+ end
59
+
60
+ end
61
+
62
+ context "TaskAssignment class" do
63
+
64
+ should "adjust the site setting when the project_id is set" do
65
+ task_class = Harvest::Resources::TaskAssignment.clone
66
+ task_class.project_id = 5
67
+ assert_equal "http://example.com/projects/5", task_class.site.to_s
68
+ end
69
+
70
+ end
71
+
72
+ end
@@ -0,0 +1,82 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+
3
+ class TaskTest < Test::Unit::TestCase
4
+
5
+ def setup_resources
6
+ @task = {:id => 1, :name => "Admin"}.to_xml(:root => "task")
7
+ @tasks = [{:id => 1, :name => "Admin"}].to_xml(:root => "tasks")
8
+ end
9
+
10
+ def mock_responses
11
+ ActiveResource::HttpMock.respond_to do |mock|
12
+ mock.get "/tasks.xml", {}, @tasks
13
+ mock.get "/tasks/1.xml", {}, @task
14
+ mock.post "/tasks.xml", {}, @task, 201, "Location" => "/tasks/5.xml"
15
+ mock.put "/tasks/1.xml", {}, nil, 200
16
+ mock.delete "/tasks/1.xml", {}, nil, 200
17
+ mock.put "/tasks/1/toggle.xml", {}, nil, 200
18
+ end
19
+ end
20
+
21
+ context "Task actions" do
22
+ setup do
23
+ setup_resources
24
+ mock_responses
25
+ end
26
+
27
+ should "get index" do
28
+ Harvest::Resources::Task.find(:all)
29
+ expected_request = ActiveResource::Request.new(:get, "/tasks.xml")
30
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
31
+ end
32
+
33
+ should "get a single task" do
34
+ Harvest::Resources::Task.find(1)
35
+ expected_request = ActiveResource::Request.new(:get, "/tasks/1.xml")
36
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
37
+ end
38
+
39
+ should "create a new task" do
40
+ task = Harvest::Resources::Task.new(:name => "Admin")
41
+ task.save
42
+ expected_request = ActiveResource::Request.new(:post, "/tasks.xml")
43
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
44
+ end
45
+
46
+ should "update an existing task" do
47
+ task = Harvest::Resources::Task.find(1)
48
+ task.name = "Admin"
49
+ task.save
50
+ expected_request = ActiveResource::Request.new(:put, "/tasks/1.xml")
51
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
52
+ end
53
+
54
+ should "delete an existing task" do
55
+ Harvest::Resources::Task.delete(1)
56
+ expected_request = ActiveResource::Request.new(:delete, "/tasks/1.xml")
57
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
58
+ end
59
+
60
+ end
61
+
62
+ context "Toggling active/inactive status" do
63
+ setup do
64
+ setup_resources
65
+ mock_responses
66
+ end
67
+
68
+ should "hit the toggle method" do
69
+ task = Harvest::Resources::Task.find(1)
70
+ task.toggle
71
+ expected_request = ActiveResource::Request.new(:put, "/tasks/1/toggle.xml")
72
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
73
+ end
74
+
75
+ should "return 200 Success toggle method" do
76
+ task = Harvest::Resources::Task.find(1)
77
+ assert task.toggle.code == 200
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -0,0 +1,71 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+
3
+ class UserAssignmentTest < Test::Unit::TestCase
4
+
5
+ def setup_resources
6
+ @user_assignment = {:id => 1, :project_id => 5}.to_xml(:root => "user_assignment")
7
+ @user_assignments = [{:id => 1, :project_id => 5}].to_xml(:root => "user_assignments")
8
+ end
9
+
10
+ def mock_responses
11
+ ActiveResource::HttpMock.respond_to do |mock|
12
+ mock.get "/user_assignments.xml", {}, @user_assignments
13
+ mock.get "/user_assignments/1.xml", {}, @user_assignment
14
+ mock.post "/user_assignments.xml", {}, @user_assignment, 201, "Location" => "/user_assignments/5.xml"
15
+ mock.put "/user_assignments/1.xml", {}, nil, 200
16
+ mock.delete "/user_assignments/1.xml", {}, nil, 200
17
+ mock.put "/user_assignments/1/toggle.xml", {}, nil, 200
18
+ end
19
+ end
20
+
21
+ context "user_assignment actions" do
22
+ setup do
23
+ setup_resources
24
+ mock_responses
25
+ end
26
+
27
+ should "get index" do
28
+ Harvest::Resources::UserAssignment.find(:all)
29
+ expected_request = ActiveResource::Request.new(:get, "/user_assignments.xml")
30
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
31
+ end
32
+
33
+ should "get a single user_assignment" do
34
+ Harvest::Resources::UserAssignment.find(1)
35
+ expected_request = ActiveResource::Request.new(:get, "/user_assignments/1.xml")
36
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
37
+ end
38
+
39
+ should "create a new user_assignment" do
40
+ user_assignment = Harvest::Resources::UserAssignment.new(:project_id => 5)
41
+ user_assignment.save
42
+ expected_request = ActiveResource::Request.new(:post, "/user_assignments.xml")
43
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
44
+ end
45
+
46
+ should "update an existing user_assignment" do
47
+ user_assignment = Harvest::Resources::UserAssignment.find(1)
48
+ user_assignment.name = "Admin"
49
+ user_assignment.save
50
+ expected_request = ActiveResource::Request.new(:put, "/user_assignments/1.xml")
51
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
52
+ end
53
+
54
+ should "delete an existing user_assignment" do
55
+ Harvest::Resources::UserAssignment.delete(1)
56
+ expected_request = ActiveResource::Request.new(:delete, "/user_assignments/1.xml")
57
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
58
+ end
59
+
60
+ end
61
+
62
+ context "UserAssignment class" do
63
+
64
+ should "adjust the site setting when the project_id is set" do
65
+ user_class = Harvest::Resources::UserAssignment.clone
66
+ user_class.project_id = 5
67
+ assert_equal "http://example.com/projects/5", user_class.site.to_s
68
+ end
69
+
70
+ end
71
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: harvest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.2
5
+ platform: ruby
6
+ authors:
7
+ - Kyle Banker
8
+ - Alexander Interactive, Inc.
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-12-17 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: activeresource
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "2.1"
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: active_resource_throttle
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "1.0"
35
+ version:
36
+ description:
37
+ email: knb@alexanderinteractive.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - README.rdoc
44
+ files:
45
+ - HISTORY
46
+ - LICENSE
47
+ - Rakefile
48
+ - README.rdoc
49
+ - lib/harvest/plugins/active_resource_inheritable_headers.rb
50
+ - lib/harvest/plugins/toggleable.rb
51
+ - lib/harvest/resources/client.rb
52
+ - lib/harvest/resources/entry.rb
53
+ - lib/harvest/resources/expense.rb
54
+ - lib/harvest/resources/expense_category.rb
55
+ - lib/harvest/resources/person.rb
56
+ - lib/harvest/resources/project.rb
57
+ - lib/harvest/resources/task.rb
58
+ - lib/harvest/resources/task_assignment.rb
59
+ - lib/harvest/resources/user_assignment.rb
60
+ - lib/harvest/base.rb
61
+ - lib/harvest/harvest_resource.rb
62
+ - lib/harvest.rb
63
+ has_rdoc: true
64
+ homepage: http://github.com/aiaio/harvest
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options:
69
+ - --main
70
+ - README.rdoc
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.3.5
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: A wrapper for the Harvest Api. See http://getharvest.com/api for details.
92
+ test_files:
93
+ - test/test_helper.rb
94
+ - test/unit/base_test.rb
95
+ - test/unit/resources/client_test.rb
96
+ - test/unit/resources/expense_test.rb
97
+ - test/unit/resources/expense_category_test.rb
98
+ - test/unit/resources/person_test.rb
99
+ - test/unit/resources/project_test.rb
100
+ - test/unit/resources/task_test.rb
101
+ - test/unit/resources/task_assignment_test.rb
102
+ - test/unit/resources/user_assignment_test.rb
103
+ - test/integration/client_integration.rb
104
+ - test/integration/task_integration.rb
105
+ - test/integration/expense_category_integration.rb
106
+ - test/integration/project_integration.rb
107
+ - test/integration/harvest_integration_test.rb
108
+ - test/integration/client_teardown.rb
109
+ - test/integration/expense_category_teardown.rb
110
+ - test/integration/project_teardown.rb
111
+ - test/integration/task_teardown.rb