vigetlabs-unfuzzle 0.1.1 → 0.1.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 (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