vigetlabs-unfuzzle 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/README.rdoc +21 -1
  2. data/Rakefile +2 -2
  3. data/lib/unfuzzle.rb +13 -2
  4. data/lib/unfuzzle/component.rb +31 -0
  5. data/lib/unfuzzle/milestone.rb +17 -26
  6. data/lib/unfuzzle/priority.rb +30 -0
  7. data/lib/unfuzzle/project.rb +13 -20
  8. data/lib/unfuzzle/request.rb +5 -8
  9. data/lib/unfuzzle/response.rb +0 -7
  10. data/lib/unfuzzle/severity.rb +31 -0
  11. data/lib/unfuzzle/ticket.rb +58 -25
  12. data/lib/unfuzzle/version.rb +1 -1
  13. data/test/fixtures/component.xml +8 -0
  14. data/test/fixtures/components.xml +17 -0
  15. data/test/fixtures/milestone.xml +12 -0
  16. data/test/fixtures/milestones.xml +25 -0
  17. data/test/fixtures/project.xml +17 -0
  18. data/test/fixtures/projects.xml +35 -0
  19. data/test/fixtures/severities.xml +24 -0
  20. data/test/fixtures/severity.xml +8 -0
  21. data/test/fixtures/ticket.xml +25 -0
  22. data/test/fixtures/tickets.xml +51 -0
  23. data/test/test_helper.rb +5 -7
  24. data/test/unit/unfuzzle/component_test.rb +36 -0
  25. data/test/unit/unfuzzle/milestone_test.rb +12 -44
  26. data/test/unit/unfuzzle/priority_test.rb +25 -0
  27. data/test/unit/unfuzzle/project_test.rb +17 -37
  28. data/test/unit/unfuzzle/request_test.rb +3 -13
  29. data/test/unit/unfuzzle/response_test.rb +0 -28
  30. data/test/unit/unfuzzle/severity_test.rb +36 -0
  31. data/test/unit/unfuzzle/ticket_test.rb +108 -47
  32. metadata +21 -12
  33. data/lib/unfuzzle/model.rb +0 -56
  34. data/test/fixtures/milestone.json +0 -11
  35. data/test/fixtures/milestones.json +0 -22
  36. data/test/fixtures/project.json +0 -16
  37. data/test/fixtures/projects.json +0 -32
  38. data/test/fixtures/tickets.json +0 -44
  39. data/test/unit/unfuzzle/model_test.rb +0 -55
@@ -3,7 +3,7 @@ module Unfuzzle
3
3
 
4
4
  MAJOR = 0
5
5
  MINOR = 1
6
- TINY = 1
6
+ TINY = 2
7
7
 
8
8
  def self.to_s # :nodoc:
9
9
  [MAJOR, MINOR, TINY].join('.')
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <component>
3
+ <id type="integer">1</id>
4
+ <name>Administration</name>
5
+ <project-id type="integer">2</project-id>
6
+ <created-at>2009-06-15T20:40:29Z</created-at>
7
+ <updated-at>2009-06-15T20:40:29Z</updated-at>
8
+ </component>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <components type="array">
3
+ <component>
4
+ <id type="integer">1</id>
5
+ <name>Administration</name>
6
+ <project-id type="integer">1</project-id>
7
+ <created-at>2009-06-15T20:40:29Z</created-at>
8
+ <updated-at>2009-06-15T20:40:29Z</updated-at>
9
+ </component>
10
+ <component>
11
+ <id type="integer">2</id>
12
+ <name>Notifications</name>
13
+ <project-id type="integer">2</project-id>
14
+ <created-at>2009-06-15T20:40:49Z</created-at>
15
+ <updated-at>2009-06-15T20:40:49Z</updated-at>
16
+ </component>
17
+ </components>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <milestone>
3
+ <archived type="boolean">false</archived>
4
+ <completed type="boolean">false</completed>
5
+ <due-on type="date">2009-04-03</due-on>
6
+ <id type="integer">2</id>
7
+ <person-responsible-id type="integer">123</person-responsible-id>
8
+ <project-id type="integer">1</project-id>
9
+ <title>Milestone #1</title>
10
+ <created-at>2009-04-02T19:43:16Z</created-at>
11
+ <updated-at>2009-07-02T16:40:28Z</updated-at>
12
+ </milestone>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <milestones type="array">
3
+ <milestone>
4
+ <archived type="boolean">false</archived>
5
+ <completed type="boolean">false</completed>
6
+ <due-on type="date">2009-04-03</due-on>
7
+ <id type="integer">1</id>
8
+ <person-responsible-id type="integer">123</person-responsible-id>
9
+ <project-id type="integer">1</project-id>
10
+ <title>Milestone #1</title>
11
+ <created-at>2009-04-02T19:43:16Z</created-at>
12
+ <updated-at>2009-07-06T18:00:26Z</updated-at>
13
+ </milestone>
14
+ <milestone>
15
+ <archived type="boolean">false</archived>
16
+ <completed type="boolean">false</completed>
17
+ <due-on type="date">2009-04-06</due-on>
18
+ <id type="integer">2</id>
19
+ <person-responsible-id type="integer">123</person-responsible-id>
20
+ <project-id type="integer">1</project-id>
21
+ <title>Milestone #2</title>
22
+ <created-at>2009-04-06T04:45:54Z</created-at>
23
+ <updated-at>2009-04-10T15:29:01Z</updated-at>
24
+ </milestone>
25
+ </milestones>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <account-id type="integer">1</account-id>
4
+ <archived type="boolean">false</archived>
5
+ <assignee-on-resolve>none</assignee-on-resolve>
6
+ <close-ticket-simultaneously-default type="boolean">true</close-ticket-simultaneously-default>
7
+ <default-ticket-report-id type="integer">0</default-ticket-report-id>
8
+ <description>This is the project for Blip Bleep Co.</description>
9
+ <disk-usage type="integer">1416</disk-usage>
10
+ <enable-time-tracking type="boolean">true</enable-time-tracking>
11
+ <id type="integer">1</id>
12
+ <short-name>blip</short-name>
13
+ <theme>teal</theme>
14
+ <title>Blip Bleep Co.</title>
15
+ <created-at>2008-07-28T16:57:10Z</created-at>
16
+ <updated-at>2009-04-28T18:48:52Z</updated-at>
17
+ </project>
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projects type="array">
3
+ <project>
4
+ <account-id type="integer">10710</account-id>
5
+ <archived type="boolean">false</archived>
6
+ <assignee-on-resolve>none</assignee-on-resolve>
7
+ <close-ticket-simultaneously-default type="boolean">true</close-ticket-simultaneously-default>
8
+ <default-ticket-report-id type="integer">0</default-ticket-report-id>
9
+ <description></description>
10
+ <disk-usage type="integer">1416</disk-usage>
11
+ <enable-time-tracking type="boolean">true</enable-time-tracking>
12
+ <id type="integer">24541</id>
13
+ <short-name>aa</short-name>
14
+ <theme>teal</theme>
15
+ <title>Agency Access</title>
16
+ <created-at>2008-07-28T16:57:10Z</created-at>
17
+ <updated-at>2009-04-28T18:48:52Z</updated-at>
18
+ </project>
19
+ <project>
20
+ <account-id type="integer">10710</account-id>
21
+ <archived type="boolean">false</archived>
22
+ <assignee-on-resolve>reporter</assignee-on-resolve>
23
+ <close-ticket-simultaneously-default type="boolean">false</close-ticket-simultaneously-default>
24
+ <default-ticket-report-id type="integer" nil="true"></default-ticket-report-id>
25
+ <description nil="true"></description>
26
+ <disk-usage type="integer">28736</disk-usage>
27
+ <enable-time-tracking type="boolean">true</enable-time-tracking>
28
+ <id type="integer">22830</id>
29
+ <short-name>brianregan</short-name>
30
+ <theme>orange</theme>
31
+ <title>Brian Regan</title>
32
+ <created-at>2008-07-02T14:19:32Z</created-at>
33
+ <updated-at>2009-07-09T20:19:51Z</updated-at>
34
+ </project>
35
+ </projects>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <severities type="array">
3
+ <severity>
4
+ <id type="integer">34942</id>
5
+ <name>Design</name>
6
+ <project-id type="integer">26984</project-id>
7
+ <created-at>2009-04-02T19:44:49Z</created-at>
8
+ <updated-at>2009-04-02T19:44:49Z</updated-at>
9
+ </severity>
10
+ <severity>
11
+ <id type="integer">34943</id>
12
+ <name>Development</name>
13
+ <project-id type="integer">26984</project-id>
14
+ <created-at>2009-04-02T19:44:53Z</created-at>
15
+ <updated-at>2009-04-02T19:44:53Z</updated-at>
16
+ </severity>
17
+ <severity>
18
+ <id type="integer">34944</id>
19
+ <name>Project Management</name>
20
+ <project-id type="integer">26984</project-id>
21
+ <created-at>2009-04-02T19:44:59Z</created-at>
22
+ <updated-at>2009-04-02T19:44:59Z</updated-at>
23
+ </severity>
24
+ </severities>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <severity>
3
+ <id type="integer">1</id>
4
+ <name>Story</name>
5
+ <project-id type="integer">2</project-id>
6
+ <created-at>2009-04-02T19:44:49Z</created-at>
7
+ <updated-at>2009-04-02T19:44:49Z</updated-at>
8
+ </severity>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ticket>
3
+ <assignee-id type="integer">123</assignee-id>
4
+ <component-id type="integer">1</component-id>
5
+ <description>Do something important</description>
6
+ <description-format>markdown</description-format>
7
+ <due-on type="date"></due-on>
8
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
9
+ <hours-estimate-initial type="float">2.0</hours-estimate-initial>
10
+ <id type="integer">1</id>
11
+ <milestone-id type="integer">1</milestone-id>
12
+ <number type="integer">1</number>
13
+ <priority>3</priority>
14
+ <project-id type="integer">1</project-id>
15
+ <reporter-id type="integer">122</reporter-id>
16
+ <resolution>postponed</resolution>
17
+ <resolution-description>done</resolution-description>
18
+ <resolution-description-format>markdown</resolution-description-format>
19
+ <severity-id type="integer">123</severity-id>
20
+ <status>closed</status>
21
+ <summary>Ticket #1</summary>
22
+ <version-id type="integer">17329</version-id>
23
+ <created-at>2008-11-25T14:00:19Z</created-at>
24
+ <updated-at>2008-12-31T15:51:41Z</updated-at>
25
+ </ticket>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tickets type="array">
3
+ <ticket>
4
+ <assignee-id type="integer">27736</assignee-id>
5
+ <component-id type="integer">47394</component-id>
6
+ <description></description>
7
+ <description-format>markdown</description-format>
8
+ <due-on type="date">2009-04-03</due-on>
9
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
10
+ <hours-estimate-initial type="float">2.0</hours-estimate-initial>
11
+ <id type="integer">557168</id>
12
+ <milestone-id type="integer">52212</milestone-id>
13
+ <number type="integer">5</number>
14
+ <priority>3</priority>
15
+ <project-id type="integer">26984</project-id>
16
+ <reporter-id type="integer">27736</reporter-id>
17
+ <resolution>postponed</resolution>
18
+ <resolution-description>awaiting contracts</resolution-description>
19
+ <resolution-description-format>markdown</resolution-description-format>
20
+ <severity-id type="integer">34943</severity-id>
21
+ <status>closed</status>
22
+ <summary>User can log in to the site</summary>
23
+ <version-id type="integer">17329</version-id>
24
+ <created-at>2009-04-02T19:16:26Z</created-at>
25
+ <updated-at>2009-07-02T16:42:30Z</updated-at>
26
+ </ticket>
27
+ <ticket>
28
+ <assignee-id type="integer">27736</assignee-id>
29
+ <component-id type="integer">47394</component-id>
30
+ <description></description>
31
+ <description-format>markdown</description-format>
32
+ <due-on type="date">2009-04-03</due-on>
33
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
34
+ <hours-estimate-initial type="float">2.0</hours-estimate-initial>
35
+ <id type="integer">557169</id>
36
+ <milestone-id type="integer">52212</milestone-id>
37
+ <number type="integer">6</number>
38
+ <priority>3</priority>
39
+ <project-id type="integer">26984</project-id>
40
+ <reporter-id type="integer">27736</reporter-id>
41
+ <resolution>postponed</resolution>
42
+ <resolution-description>awaiting contracts</resolution-description>
43
+ <resolution-description-format>markdown</resolution-description-format>
44
+ <severity-id type="integer">34943</severity-id>
45
+ <status>closed</status>
46
+ <summary>User can edit profile</summary>
47
+ <version-id type="integer">17329</version-id>
48
+ <created-at>2009-04-02T19:17:40Z</created-at>
49
+ <updated-at>2009-04-10T15:28:54Z</updated-at>
50
+ </ticket>
51
+ </tickets>
data/test/test_helper.rb CHANGED
@@ -10,8 +10,8 @@ require File.dirname(__FILE__) + '/../lib/unfuzzle'
10
10
  class Test::Unit::TestCase
11
11
 
12
12
  def self.read_fixture(method_name)
13
- file = File.dirname(__FILE__) + "/fixtures/#{method_name}.json"
14
- JSON.parse(File.read(file))
13
+ file = File.dirname(__FILE__) + "/fixtures/#{method_name}.xml"
14
+ File.read(file)
15
15
  end
16
16
 
17
17
  def read_fixture(method_name)
@@ -23,7 +23,7 @@ class Test::Unit::TestCase
23
23
 
24
24
  data = read_fixture(options[:data])
25
25
 
26
- response.stubs(:data).with().returns(data)
26
+ response.stubs(:body).with().returns(data)
27
27
 
28
28
  Unfuzzle::Request.stubs(:get).with(options[:for]).returns(response)
29
29
 
@@ -31,10 +31,8 @@ class Test::Unit::TestCase
31
31
  end
32
32
 
33
33
  def self.when_populating(klass, options, &block)
34
- # data = options[:from].is_a?(String) ? read_fixture(options[:from])[0] : options[:from].call
35
-
36
34
  context "with data populated for #{klass}" do
37
- setup { @object = klass.new(read_fixture(options[:from])[0]) }
35
+ setup { @object = klass.new(read_fixture(options[:from])) }
38
36
  merge_block(&block)
39
37
  end
40
38
 
@@ -53,7 +51,7 @@ class Test::Unit::TestCase
53
51
  value = attribute if value.nil?
54
52
 
55
53
  should "be able to set a value for :#{attribute}" do
56
- object = klass.new({})
54
+ object = klass.new
57
55
  object.send("#{attribute}=", value)
58
56
  object.send(attribute).should == value
59
57
  end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ module Unfuzzle
4
+ class ComponentTest < Test::Unit::TestCase
5
+
6
+ context "The Component class" do
7
+
8
+ should "be able to return a severity for a project and component id" do
9
+ project_id = 1
10
+ component_id = 1
11
+
12
+ response = mock_request_cycle :for => "/projects/#{project_id}/components/#{component_id}", :data => 'component'
13
+
14
+ Unfuzzle::Component.expects(:new).with(response.body).returns('component')
15
+
16
+ Unfuzzle::Component.find_by_project_id_and_component_id(project_id, component_id).should == 'component'
17
+ end
18
+
19
+ end
20
+
21
+ context "An instance of the Component class" do
22
+
23
+ when_populating Component, :from => 'component' do
24
+
25
+ value_for :id, :is => 1
26
+ value_for :name, :is => 'Administration'
27
+ value_for :project_id, :is => 2
28
+ value_for :created_at, :is => Time.parse('2009-06-15T20:40:29Z')
29
+ value_for :updated_at, :is => Time.parse('2009-06-15T20:40:29Z')
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -10,15 +10,9 @@ module Unfuzzle
10
10
 
11
11
  response = mock_request_cycle :for => "/projects/#{project_id}/milestones", :data => 'milestones'
12
12
 
13
- milestones = Array.new
13
+ Unfuzzle::Milestone.expects(:collection_from).with(response.body, 'milestones/milestone').returns(['milestone_1', 'milestone_2'])
14
14
 
15
- response.data.each do |data|
16
- milestone = stub()
17
- Unfuzzle::Milestone.expects(:new).with(data).returns(milestone)
18
- milestones << milestone
19
- end
20
-
21
- Milestone.find_all_by_project_id(1).should == milestones
15
+ Milestone.find_all_by_project_id(project_id).should == ['milestone_1', 'milestone_2']
22
16
  end
23
17
 
24
18
  should "be able to find one by project ID an milestone ID" do
@@ -26,7 +20,7 @@ module Unfuzzle
26
20
  milestone_id = 2
27
21
  response = mock_request_cycle :for => "/projects/#{project_id}/milestones/#{milestone_id}", :data => 'milestone'
28
22
 
29
- Unfuzzle::Milestone.expects(:new).with(response.data).returns('milestone')
23
+ Unfuzzle::Milestone.expects(:new).with(response.body).returns('milestone')
30
24
 
31
25
  Milestone.find_by_project_id_and_milestone_id(1, 2).should == 'milestone'
32
26
  end
@@ -35,21 +29,21 @@ module Unfuzzle
35
29
 
36
30
  context "An instance of the Milestone class" do
37
31
 
38
- when_populating Milestone, :from => 'milestones' do
32
+ when_populating Milestone, :from => 'milestone' do
39
33
 
40
- value_for :id, :is => 1
41
- value_for :project_id, :is => 1
42
- value_for :archived, :is => false
43
- value_for :created_timestamp, :is => '2008-07-30T22:12:37Z'
44
- value_for :name, :is => 'Milestone 1'
45
- value_for :due_datestamp, :is => '2008-07-30'
46
- value_for :updated_timestamp, :is => '2008-12-26T22:32:03Z'
34
+ value_for :id, :is => 2
35
+ value_for :project_id, :is => 1
36
+ value_for :archived, :is => false
37
+ value_for :created_at, :is => Time.parse('2009-04-02T19:43:16Z')
38
+ value_for :name, :is => 'Milestone #1'
39
+ value_for :due_on, :is => Date.parse('2009-04-03')
40
+ value_for :updated_at, :is => Time.parse('2009-07-02T16:40:28Z')
47
41
 
48
42
  end
49
43
 
50
44
  context "with a new instance" do
51
45
 
52
- setup { @milestone = Milestone.new(stub()) }
46
+ setup { @milestone = Milestone.new }
53
47
 
54
48
  should "know that it is archived" do
55
49
  @milestone.stubs(:archived).with().returns(true)
@@ -61,32 +55,6 @@ module Unfuzzle
61
55
  @milestone.archived?.should be(false)
62
56
  end
63
57
 
64
- should "have a create date/time" do
65
- DateTime.expects(:parse).with('2008-07-28T16:57:10Z').returns('create_date')
66
-
67
- @milestone.stubs(:created_timestamp).with().returns('2008-07-28T16:57:10Z')
68
- @milestone.created_at.should == 'create_date'
69
- end
70
-
71
- should "have an update date/time" do
72
- DateTime.expects(:parse).with('2009-04-28T18:48:52Z').returns('update_date')
73
-
74
- @milestone.stubs(:updated_timestamp).with().returns('2009-04-28T18:48:52Z')
75
- @milestone.updated_at.should == 'update_date'
76
- end
77
-
78
- should "have a due date" do
79
- Date.expects(:parse).with('2008-07-30').returns('due_date')
80
-
81
- @milestone.stubs(:due_datestamp).with().returns('2008-07-30')
82
- @milestone.due_on.should == 'due_date'
83
- end
84
-
85
- should "not have a due date if there isn't one associated" do
86
- @milestone.stubs(:due_datestamp).with().returns(nil)
87
- @milestone.due_on.should be(nil)
88
- end
89
-
90
58
  should "have associated tickets" do
91
59
  id = 1
92
60
  project_id = 1
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ module Unfuzzle
4
+ class PriorityTest < Test::Unit::TestCase
5
+
6
+ def self.should_have_a_name_of(name, options)
7
+ should "have a name of '#{name}' when the priority is #{options[:when]}" do
8
+ p = Priority.new(options[:when])
9
+ p.name.should == name
10
+ end
11
+ end
12
+
13
+
14
+ context "An instance of the Priority class" do
15
+
16
+ should_have_a_name_of 'Highest', :when => 5
17
+ should_have_a_name_of 'High', :when => 4
18
+ should_have_a_name_of 'Normal', :when => 3
19
+ should_have_a_name_of 'Low', :when => 2
20
+ should_have_a_name_of 'Lowest', :when => 1
21
+
22
+ end
23
+
24
+ end
25
+ end