taskmapper-redmine 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -23,6 +23,10 @@ module TaskMapper::Provider
23
23
  end
24
24
  end
25
25
 
26
+ def save
27
+ raise TaskMapper::Exception.new "Redmine API doesn't support comment updates"
28
+ end
29
+
26
30
  def self.find_by_id(project_id, ticket_id, id)
27
31
  self.search(ticket_id).select { |journal| journal.id == id.to_i }.first
28
32
  end
@@ -51,5 +55,14 @@ module TaskMapper::Provider
51
55
  journal
52
56
  end
53
57
  end
58
+
59
+ class Net::HTTP
60
+ def send(*args)
61
+ puts "request: #{args.inspect}"
62
+ resp = super
63
+ puts "response: #{resp.inspect}"
64
+ resp
65
+ end
66
+ end
54
67
  end
55
68
  end
@@ -5,67 +5,82 @@ describe TaskMapper::Provider::Redmine::Comment do
5
5
  let(:project_id) { 1 }
6
6
  let(:ticket_id) { 1 }
7
7
  let(:comment_id) { 1 }
8
- let(:klass) { TaskMapper::Provider::Redmine::Comment }
9
- let(:taskmapper) { TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk' }
10
- let(:project) { taskmapper.project(project_id) }
11
-
12
- before(:all) do
13
- headers = {'X-Redmine-API-Key' => 'abcdefghijk', 'Accept' => 'application/xml'}
14
- headers_post_put = {'X-Redmine-API-Key' => 'abcdefghijk', 'Content-Type' => 'application/xml'}
15
- ActiveResource::HttpMock.respond_to do |mock|
16
- mock.get '/projects.xml', headers, fixture_for('projects'), 200
17
- mock.get '/projects/1.xml', headers, fixture_for('projects/test-repo12'), 200
18
- mock.get '/issues.xml?project_id=1', headers, fixture_for('issues'), 200
19
- mock.get '/issues.xml', headers, fixture_for('issues'), 200
20
- mock.get '/issues/1.xml?include=journals', headers, fixture_for('issues/1'), 200
21
- mock.put '/issues/1.xml', headers_post_put, '', 200
22
- mock.post '/issues.xml', headers_post_put, '', 200
23
- end
24
- end
8
+ let(:comment_class) { TaskMapper::Provider::Redmine::Comment }
9
+ let(:tm) { TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk' }
10
+ let(:headers_auth) { {'X-Redmine-API-Key' => 'abcdefghijk' } }
11
+ let(:headers_get) { headers_auth.merge('Accept' => 'application/xml') }
12
+ let(:headers_post) { headers_auth.merge('Content-Type' => 'application/xml') }
25
13
 
26
14
  before(:each) do
27
- @ticket = project.ticket(ticket_id)
28
15
  end
29
16
 
30
- it "should be able to load all comments" do
31
- comments = @ticket.comments
32
- comments.size.should eq(2)
33
- comments.should be_an_instance_of(Array)
34
- comments.first.should be_an_instance_of(klass)
35
- end
36
-
37
- it "should be able to load all comments based on 'id's" do
38
- comments = @ticket.comments([comment_id])
39
- comments.should be_an_instance_of(Array)
40
- comments.first.should be_an_instance_of(klass)
41
- comments.first.id.should == comment_id
42
- end
43
-
44
- it "should be able to load all comments based on attributes" do
45
- comments = @ticket.comments(:id => comment_id)
46
- comments.should be_an_instance_of(Array)
47
- comments.first.should be_an_instance_of(klass)
48
- end
49
-
50
- it "should be able to load a comment based on id" do
51
- comment = @ticket.comment(comment_id)
52
- comment.should be_an_instance_of(klass)
53
- comment.id.should == comment_id
54
- end
55
-
56
- it "should be able to load a comment based on attributes" do
57
- comment = @ticket.comment(:id => comment_id)
58
- comment.should be_an_instance_of(klass)
59
- end
60
-
61
- it "should return the class" do
62
- @ticket.comment.should == klass
17
+ describe "Retrieving comments" do
18
+ before(:each) do
19
+ ActiveResource::HttpMock.respond_to do |mock|
20
+ mock.get '/projects/1.xml', headers_get, fixture_for('projects/test-repo12'), 200
21
+ mock.get '/issues/1.xml?include=journals', headers_get, fixture_for('issues/1'), 200
22
+ end
23
+ end
24
+ let(:project) { tm.project project_id }
25
+ let(:ticket) { project.ticket ticket_id }
26
+
27
+ context "when #comments" do
28
+ subject { ticket.comments }
29
+ it { should be_an_instance_of Array }
30
+ it { should have(2).items }
31
+ end
32
+
33
+ context "when #comments with a list of id's" do
34
+ subject { ticket.comments [comment_id] }
35
+ it { should be_an_instance_of Array }
36
+ it { should have(1).items }
37
+ end
38
+
39
+ context "when #comments with a comment attribute" do
40
+ subject { ticket.comments :id => comment_id }
41
+ it { should be_an_instance_of Array }
42
+ it { should have(1).items }
43
+ end
44
+
45
+ describe "Retrieve a single comment" do
46
+ context "when #comment with an id" do
47
+ subject { ticket.comment comment_id }
48
+ it { should be_an_instance_of comment_class }
49
+ end
50
+
51
+ context "when #comment with an attribute" do
52
+ subject { ticket.comment :id => comment_id }
53
+ it { should be_an_instance_of comment_class }
54
+ end
55
+ end
63
56
  end
64
-
65
- it "should be able to create a comment for a given task" do
66
- comment = @ticket.comment!(:body => 'hello there boys and girls')
67
- comment.should be_an_instance_of(klass)
68
- comment.ticket_id.should_not be_nil
69
- comment.ticket_id.should_not == 0
57
+
58
+ describe "Create and update" do
59
+ before(:each) do
60
+ ActiveResource::HttpMock.respond_to do |mock|
61
+ mock.get '/projects/1.xml', headers_get, fixture_for('projects/test-repo12'), 200
62
+ mock.get '/issues/1.xml?include=journals', headers_get, fixture_for('issues/1'), 200
63
+ mock.put '/issues/1.xml', headers_post, '', 200
64
+ end
65
+ end
66
+ let(:project) { tm.project project_id }
67
+ let(:ticket) { project.ticket ticket_id }
68
+
69
+ context "when #comment!" do
70
+ subject { ticket.comment! :body => 'hello there boys and girls' }
71
+ it { should be_an_instance_of comment_class }
72
+ context "when #ticket_id" do
73
+ subject { ticket.comment!(:body => 'hello there boys and girls').ticket_id }
74
+ it { should_not be_nil }
75
+ it { should_not be_zero }
76
+ end
77
+ end
78
+
79
+ context "when #save" do
80
+ let(:comment) { ticket.comment(comment_id) }
81
+ let(:changed_comment) { comment.body = 'change'; comment }
82
+ subject { lambda { changed_comment.save } }
83
+ it { should raise_error "Redmine API doesn't support comment updates" }
84
+ end
70
85
  end
71
86
  end
data/spec/tickets_spec.rb CHANGED
@@ -1,64 +1,81 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe TaskMapper::Provider::Redmine::Ticket do
4
- before(:each) do
5
- headers = {'X-Redmine-API-Key' => 'abcdefghijk', 'Accept' => 'application/xml'}
6
- headers_post_put = {'X-Redmine-API-Key' => 'abcdefghijk', 'Content-Type' => 'application/xml'}
7
- @project_id = 1
8
- ActiveResource::HttpMock.respond_to do |mock|
9
- mock.get '/projects.xml', headers, fixture_for('projects'), 200
10
- mock.get '/projects/1.xml', headers, fixture_for('projects/test-repo12'), 200
11
- mock.get '/issues.xml?include=journals&project_id=1', headers, fixture_for('issues'), 200
12
- mock.get '/issues.xml', headers, fixture_for('issues'), 200
13
- mock.get '/issues/1.xml?include=journals', headers, fixture_for('issues/1'), 200
14
- mock.put '/issues/1.xml', headers_post_put, '', 200
15
- mock.post '/issues.xml', headers_post_put, '', 200
4
+ let(:headers_auth) { {'X-Redmine-API-Key' => 'abcdefghijk'} }
5
+ let(:headers_get) { headers_auth.merge('Accept' => 'application/xml') }
6
+ let(:headers_post_put) { headers_auth.merge('Content-Type' => 'application/xml') }
7
+ let(:project_id) { 1 }
8
+ let(:tm) { TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk' }
9
+ let(:ticket_class) { TaskMapper::Provider::Redmine::Ticket }
10
+ let(:ticket_id) { 1 }
11
+
12
+ describe "Retrieving tickets" do
13
+ before(:each) do
14
+ ActiveResource::HttpMock.respond_to do |mock|
15
+ mock.get '/projects/1.xml', headers_get, fixture_for('projects/test-repo12'), 200
16
+ mock.get '/issues.xml?include=journals&project_id=1', headers_get, fixture_for('issues'), 200
17
+ mock.get '/issues/1.xml?include=journals', headers_get, fixture_for('issues/1'), 200
18
+ end
16
19
  end
17
-
18
- @taskmapper = TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk'
19
- @project = @taskmapper.project(@project_id)
20
- @klass = TaskMapper::Provider::Redmine::Ticket
21
- end
20
+ let(:project) { tm.project project_id }
22
21
 
23
- it "should be able to load all tickets" do
24
- @project.tickets.should be_an_instance_of(Array)
25
- @project.tickets.first.should be_an_instance_of(@klass)
26
- end
22
+ context "when #tickets" do
23
+ subject { project.tickets }
24
+ it { should be_an_instance_of Array }
27
25
 
28
- it "should be able to load all tickets based on an array of id's" do
29
- @tickets = @project.tickets([1])
30
- @tickets.should be_an_instance_of(Array)
31
- @tickets.first.should be_an_instance_of(@klass)
32
- @tickets.first.title.should == 'test-issue'
33
- end
26
+ context "when #tickets.first" do
27
+ subject { project.tickets.first }
28
+ it { should be_an_instance_of ticket_class }
29
+ end
30
+ end
34
31
 
35
- it "should be able to load all tickets based on attributes" do
36
- @tickets = @project.tickets(:id => 1)
37
- @tickets.should be_an_instance_of(Array)
38
- @tickets.first.should be_an_instance_of(@klass)
39
- @tickets.first.title.should == 'test-issue'
40
- end
32
+ context "when #tickets with an array of id's" do
33
+ subject { project.tickets [ticket_id] }
34
+ it { should be_an_instance_of Array }
35
+ end
36
+
37
+ context "when #tickets with attributes" do
38
+ subject { project.tickets :id => ticket_id }
39
+ it { should be_an_instance_of Array }
40
+ end
41
41
 
42
- it "should return the ticket class" do
43
- @project.ticket.should == @klass
42
+ describe "Retrieving a single ticket" do
43
+ context "when #ticket with an id" do
44
+ subject { project.ticket ticket_id }
45
+ it { should be_an_instance_of ticket_class }
46
+ end
47
+
48
+ context "when #ticket with attributes" do
49
+ subject { project.ticket :id => ticket_id }
50
+ it { should be_an_instance_of ticket_class }
51
+ end
52
+ end
44
53
  end
45
54
 
46
- it "should be able to load a single ticket" do
47
- @ticket = @project.ticket(1)
48
- @ticket.should be_an_instance_of(@klass)
49
- @ticket.title.should == 'test-issue'
55
+ describe "Create and Update" do
56
+ before(:each) do
57
+ ActiveResource::HttpMock.respond_to do |mock|
58
+ mock.get '/projects/1.xml', headers_get, fixture_for('projects/test-repo12'), 200
59
+ mock.post '/issues.xml', headers_post_put, '', 200
60
+ end
61
+ end
62
+ let(:project) { tm.project project_id }
63
+
64
+ context "when #ticket!" do
65
+ subject { project.ticket! :title => 'Ticket #12', :description => 'Body'}
66
+ it { should be_an_instance_of ticket_class }
67
+ end
68
+
69
+ context "when #save" do
70
+ subject { project.ticket ticket_id }
71
+ end
50
72
  end
51
73
 
52
74
  it "should be able to update and save a ticket" do
75
+ pending
53
76
  @ticket = @project.ticket(1)
54
77
  @ticket.description = 'hello'
55
78
  @ticket.save.should == true
56
79
  end
57
80
 
58
- it "should be able to create a ticket" do
59
- @ticket = @project.ticket!(:title => 'Ticket #12', :description => 'Body')
60
- @ticket.should be_an_instance_of(@klass)
61
- @ticket.project_id.should_not be_nil
62
- end
63
-
64
81
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "taskmapper-redmine"
8
- s.version = "0.5.0"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rafael George"]
12
- s.date = "2012-06-20"
12
+ s.date = "2012-07-04"
13
13
  s.description = "Allows taskmapper to interact with Your System."
14
14
  s.email = "rafael@hybridgroup.com"
15
15
  s.extra_rdoc_files = [
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
48
48
  ]
49
49
  s.homepage = "http://github.com/hybridgroup/taskmapper-redmine"
50
50
  s.require_paths = ["lib"]
51
- s.rubygems_version = "1.8.17"
51
+ s.rubygems_version = "1.8.24"
52
52
  s.summary = "taskmapper Provider for Redmine"
53
53
 
54
54
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,82 +1,104 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: taskmapper-redmine
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
4
5
  prerelease:
5
- version: 0.5.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Rafael George
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-06-20 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: taskmapper
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
18
+ requirements:
20
19
  - - ~>
21
- - !ruby/object:Gem::Version
22
- version: "0.8"
20
+ - !ruby/object:Gem::Version
21
+ version: '0.8'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.8'
30
+ - !ruby/object:Gem::Dependency
27
31
  name: rspec
28
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
- requirements:
34
+ requirements:
31
35
  - - ~>
32
- - !ruby/object:Gem::Version
33
- version: "2.8"
36
+ - !ruby/object:Gem::Version
37
+ version: '2.8'
34
38
  type: :development
35
39
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.8'
46
+ - !ruby/object:Gem::Dependency
38
47
  name: jeweler
39
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
- requirements:
50
+ requirements:
42
51
  - - ~>
43
- - !ruby/object:Gem::Version
44
- version: "1.6"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.6'
45
54
  type: :development
46
55
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.6'
62
+ - !ruby/object:Gem::Dependency
49
63
  name: simplecov
50
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
51
65
  none: false
52
- requirements:
66
+ requirements:
53
67
  - - ~>
54
- - !ruby/object:Gem::Version
55
- version: "0.5"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.5'
56
70
  type: :development
57
71
  prerelease: false
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.5'
78
+ - !ruby/object:Gem::Dependency
60
79
  name: rcov
61
- requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
62
81
  none: false
63
- requirements:
82
+ requirements:
64
83
  - - ~>
65
- - !ruby/object:Gem::Version
66
- version: "1.0"
84
+ - !ruby/object:Gem::Version
85
+ version: '1.0'
67
86
  type: :development
68
87
  prerelease: false
69
- version_requirements: *id005
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.0'
70
94
  description: Allows taskmapper to interact with Your System.
71
95
  email: rafael@hybridgroup.com
72
96
  executables: []
73
-
74
97
  extensions: []
75
-
76
- extra_rdoc_files:
98
+ extra_rdoc_files:
77
99
  - LICENSE
78
100
  - README.md
79
- files:
101
+ files:
80
102
  - .rbenv-gemsets
81
103
  - .rvmrc
82
104
  - .travis.yml
@@ -107,30 +129,29 @@ files:
107
129
  - ticketmaster-redmine.gemspec
108
130
  homepage: http://github.com/hybridgroup/taskmapper-redmine
109
131
  licenses: []
110
-
111
132
  post_install_message:
112
133
  rdoc_options: []
113
-
114
- require_paths:
134
+ require_paths:
115
135
  - lib
116
- required_ruby_version: !ruby/object:Gem::Requirement
136
+ required_ruby_version: !ruby/object:Gem::Requirement
117
137
  none: false
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- version: "0"
122
- required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ segments:
143
+ - 0
144
+ hash: 1055099377
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
146
  none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- version: "0"
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
128
151
  requirements: []
129
-
130
152
  rubyforge_project:
131
- rubygems_version: 1.8.17
153
+ rubygems_version: 1.8.24
132
154
  signing_key:
133
155
  specification_version: 3
134
156
  summary: taskmapper Provider for Redmine
135
157
  test_files: []
136
-