supaspoida-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/base.rb +83 -0
  6. data/lib/harvest/harvest_resource.rb +15 -0
  7. data/lib/harvest/plugins/active_resource_inheritable_headers.rb +36 -0
  8. data/lib/harvest/plugins/toggleable.rb +12 -0
  9. data/lib/harvest/resources/client.rb +8 -0
  10. data/lib/harvest/resources/entry.rb +34 -0
  11. data/lib/harvest/resources/expense.rb +22 -0
  12. data/lib/harvest/resources/expense_category.rb +7 -0
  13. data/lib/harvest/resources/person.rb +44 -0
  14. data/lib/harvest/resources/project.rb +51 -0
  15. data/lib/harvest/resources/task.rb +8 -0
  16. data/lib/harvest/resources/task_assignment.rb +27 -0
  17. data/lib/harvest/resources/user_assignment.rb +27 -0
  18. data/lib/harvest.rb +36 -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 +84 -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 +109 -0
@@ -0,0 +1,154 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+
3
+ class ProjectTest < Test::Unit::TestCase
4
+
5
+ def setup_resources
6
+ @project_xml = {:id => 1, :name => "Widget Redesign"}.to_xml(:root => "project")
7
+ @projects = [{:id => 1, :name => "Widget Redesign"}].to_xml(:root => "projects")
8
+ @entry = [{:id => 2, :project_id => 50}].to_xml(:root => "day-entries")
9
+ @entries = [{:id => 1, :project_id => "25"},
10
+ {:id => 2, :project_id => 50}].to_xml(:root => "day-entries")
11
+ @user_assignment = {:id => 1, :user_id => 5}.to_xml(:root => "user-assignment")
12
+ end
13
+
14
+ def mock_responses
15
+ ActiveResource::HttpMock.respond_to do |mock|
16
+ mock.get "/projects.xml", {}, @projects
17
+ mock.get "/projects/1.xml", {}, @project_xml
18
+ mock.post "/projects.xml", {}, @project, 201, "Location" => "/projects/5.xml"
19
+ mock.put "/projects/1.xml", {}, nil, 200
20
+ mock.delete "/projects/1.xml", {}, nil, 200
21
+ mock.put "/projects/1/toggle.xml", {}, nil, 200
22
+ mock.get "/projects/1/entries.xml?from=20080101&to=20080131", {}, @entries
23
+ mock.get "/projects/1/entries.xml?from=20080101&to=20080131&user_id=3", {}, @entry
24
+ end
25
+ end
26
+
27
+ context "Project CRUD actions -- " do
28
+ setup do
29
+ setup_resources
30
+ mock_responses
31
+ end
32
+
33
+ should "get index" do
34
+ Harvest::Resources::Project.find(:all)
35
+ expected_request = ActiveResource::Request.new(:get, "/projects.xml")
36
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
37
+ end
38
+
39
+ should "get a single project" do
40
+ Harvest::Resources::Project.find(1)
41
+ expected_request = ActiveResource::Request.new(:get, "/projects/1.xml")
42
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
43
+ end
44
+
45
+ should "create a new project" do
46
+ project = Harvest::Resources::Project.new(:name => "Widgets&Co")
47
+ project.save
48
+ expected_request = ActiveResource::Request.new(:post, "/projects.xml")
49
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
50
+ end
51
+
52
+ should "update an existing project" do
53
+ project = Harvest::Resources::Project.find(1)
54
+ project.name = "Sprockets & Co"
55
+ project.save
56
+ expected_request = ActiveResource::Request.new(:put, "/projects/1.xml")
57
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
58
+ end
59
+
60
+ should "delete an existing project" do
61
+ Harvest::Resources::Project.delete(1)
62
+ expected_request = ActiveResource::Request.new(:delete, "/projects/1.xml")
63
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
64
+ end
65
+
66
+ end
67
+
68
+ context "Toggling active/inactive status" do
69
+ setup do
70
+ setup_resources
71
+ mock_responses
72
+ end
73
+
74
+ should "hit the toggle method" do
75
+ project = Harvest::Resources::Project.find(1)
76
+ project.toggle
77
+ expected_request = ActiveResource::Request.new(:put, "/projects/1/toggle.xml")
78
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
79
+ end
80
+
81
+ should "return 200 Success toggle method" do
82
+ project = Harvest::Resources::Project.find(1)
83
+ assert project.toggle.code == 200
84
+ end
85
+
86
+ end
87
+
88
+ context "Nesting " do
89
+ setup do
90
+ setup_resources
91
+ mock_responses
92
+ @project = Harvest::Resources::Project.find(1)
93
+ end
94
+
95
+ should "get user assignments" do
96
+ end
97
+
98
+ should "get task assignments" do
99
+ end
100
+
101
+ end
102
+
103
+ context "Listing entries" do
104
+ setup do
105
+ setup_resources
106
+ mock_responses
107
+ @project = Harvest::Resources::Project.find(1)
108
+ end
109
+
110
+ should "raise an error if start and end are not included" do
111
+ assert_raises ArgumentError, "Must specify :start and :end as dates." do
112
+ @project.entries
113
+ end
114
+ end
115
+
116
+ should "raise an error if end date precedes start date" do
117
+ assert_raises ArgumentError, "Must specify :start and :end as dates." do
118
+ @project.entries(:from => Time.utc(2007, 1, 1), :to => Time.utc(2006, 1, 1))
119
+ end
120
+ end
121
+
122
+ should "return the project site prefix" do
123
+ entry_class = Harvest::Resources::Entry.clone
124
+ entry_class.project_id = @project.id
125
+ assert_equal "http://example.com/projects/1", entry_class.site.to_s
126
+ end
127
+
128
+ end
129
+
130
+ context "Reports -- " do
131
+ setup do
132
+ setup_resources
133
+ mock_responses
134
+ @from = Time.utc(2008, 1, 1)
135
+ @to = Time.utc(2008, 1, 31)
136
+ @project = Harvest::Resources::Project.find(1)
137
+ @request_path = "/projects/1/entries.xml?from=20080101&to=20080131"
138
+ end
139
+
140
+ should "get all entries for a given date range" do
141
+ @project.entries(:from => @from, :to => @to)
142
+ expected_request = ActiveResource::Request.new(:get, @request_path)
143
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
144
+ end
145
+
146
+ should "get all entries for the given date range and user" do
147
+ @project.entries(:from => @from, :to => @to, :user_id => 3)
148
+ expected_request = ActiveResource::Request.new(:get, @request_path + "&user_id=3")
149
+ assert ActiveResource::HttpMock.requests.include?(expected_request)
150
+ end
151
+
152
+ end
153
+
154
+ end
@@ -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,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: supaspoida-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 -08: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: aiaio-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
+ post_install_message:
66
+ rdoc_options:
67
+ - --main
68
+ - README.rdoc
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ requirements: []
84
+
85
+ rubyforge_project:
86
+ rubygems_version: 1.2.0
87
+ signing_key:
88
+ specification_version: 2
89
+ summary: A wrapper for the Harvest Api. See http://getharvest.com/api for details.
90
+ test_files:
91
+ - test/test_helper.rb
92
+ - test/unit/base_test.rb
93
+ - test/unit/resources/client_test.rb
94
+ - test/unit/resources/expense_test.rb
95
+ - test/unit/resources/expense_category_test.rb
96
+ - test/unit/resources/person_test.rb
97
+ - test/unit/resources/project_test.rb
98
+ - test/unit/resources/task_test.rb
99
+ - test/unit/resources/task_assignment_test.rb
100
+ - test/unit/resources/user_assignment_test.rb
101
+ - test/integration/client_integration.rb
102
+ - test/integration/task_integration.rb
103
+ - test/integration/expense_category_integration.rb
104
+ - test/integration/project_integration.rb
105
+ - test/integration/harvest_integration_test.rb
106
+ - test/integration/client_teardown.rb
107
+ - test/integration/expense_category_teardown.rb
108
+ - test/integration/project_teardown.rb
109
+ - test/integration/task_teardown.rb