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.
- data/README.rdoc +21 -1
- data/Rakefile +2 -2
- data/lib/unfuzzle.rb +13 -2
- data/lib/unfuzzle/component.rb +31 -0
- data/lib/unfuzzle/milestone.rb +17 -26
- data/lib/unfuzzle/priority.rb +30 -0
- data/lib/unfuzzle/project.rb +13 -20
- data/lib/unfuzzle/request.rb +5 -8
- data/lib/unfuzzle/response.rb +0 -7
- data/lib/unfuzzle/severity.rb +31 -0
- data/lib/unfuzzle/ticket.rb +58 -25
- data/lib/unfuzzle/version.rb +1 -1
- data/test/fixtures/component.xml +8 -0
- data/test/fixtures/components.xml +17 -0
- data/test/fixtures/milestone.xml +12 -0
- data/test/fixtures/milestones.xml +25 -0
- data/test/fixtures/project.xml +17 -0
- data/test/fixtures/projects.xml +35 -0
- data/test/fixtures/severities.xml +24 -0
- data/test/fixtures/severity.xml +8 -0
- data/test/fixtures/ticket.xml +25 -0
- data/test/fixtures/tickets.xml +51 -0
- data/test/test_helper.rb +5 -7
- data/test/unit/unfuzzle/component_test.rb +36 -0
- data/test/unit/unfuzzle/milestone_test.rb +12 -44
- data/test/unit/unfuzzle/priority_test.rb +25 -0
- data/test/unit/unfuzzle/project_test.rb +17 -37
- data/test/unit/unfuzzle/request_test.rb +3 -13
- data/test/unit/unfuzzle/response_test.rb +0 -28
- data/test/unit/unfuzzle/severity_test.rb +36 -0
- data/test/unit/unfuzzle/ticket_test.rb +108 -47
- metadata +21 -12
- data/lib/unfuzzle/model.rb +0 -56
- data/test/fixtures/milestone.json +0 -11
- data/test/fixtures/milestones.json +0 -22
- data/test/fixtures/project.json +0 -16
- data/test/fixtures/projects.json +0 -32
- data/test/fixtures/tickets.json +0 -44
- data/test/unit/unfuzzle/model_test.rb +0 -55
data/lib/unfuzzle/version.rb
CHANGED
@@ -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,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}.
|
14
|
-
|
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(:
|
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])
|
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
|
13
|
+
Unfuzzle::Milestone.expects(:collection_from).with(response.body, 'milestones/milestone').returns(['milestone_1', 'milestone_2'])
|
14
14
|
|
15
|
-
|
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.
|
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 => '
|
32
|
+
when_populating Milestone, :from => 'milestone' do
|
39
33
|
|
40
|
-
value_for :id,
|
41
|
-
value_for :project_id,
|
42
|
-
value_for :archived,
|
43
|
-
value_for :
|
44
|
-
value_for :name,
|
45
|
-
value_for :
|
46
|
-
value_for :
|
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
|
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
|