harvest 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
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