ruby_bugzilla 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -2,4 +2,3 @@ language: ruby
2
2
  rvm:
3
3
  - "1.9.2"
4
4
  - "1.9.3"
5
- - rbx-19mode
data/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # RubyBugzilla
2
2
 
3
-
4
3
  [![Gem Version](https://badge.fury.io/rb/ruby_bugzilla.png)](http://badge.fury.io/rb/ruby_bugzilla)
5
4
  [![Build Status](https://travis-ci.org/ManageIQ/ruby_bugzilla.png)](https://travis-ci.org/ManageIQ/ruby_bugzilla)
6
5
  [![Code Climate](https://codeclimate.com/github/ManageIQ/ruby_bugzilla.png)](https://codeclimate.com/github/ManageIQ/ruby_bugzilla)
@@ -9,6 +8,24 @@
9
8
 
10
9
  A Ruby wrapper around the python-bugzilla CLI for easy access to the Bugzilla API
11
10
 
11
+ ## Prerequisites
12
+
13
+ python-bugzilla must be installed.
14
+
15
+ * For Fedora/RHEL
16
+ * sudo yum install python-bugzilla
17
+ * For Mac
18
+ * Download python-bugzilla from https://fedorahosted.org/python-bugzilla/
19
+ * Untar the file
20
+ * Run setup.py install
21
+
22
+ python-bugzilla uses pycurl and expects it to be installed.
23
+
24
+ * For Mac
25
+ * Download pycurl from http://pycurl.sourceforge.net/download/
26
+ * Untar the file
27
+ * Run setup.py install
28
+
12
29
  ## Installation
13
30
 
14
31
  Add this line to your application's Gemfile:
@@ -23,15 +40,14 @@ Or install it yourself as:
23
40
 
24
41
  $ gem install ruby_bugzilla
25
42
 
26
- ## Usage
27
-
28
- If not already logged in to bugzilla, RubyBugzilla can login using
29
- the crendentials in bugzilla_credentials.yaml
30
- Copy sample/bugzilla_credentials.yaml to $HOME and edit the file
31
- to contain your bugzilla credentials.
32
-
33
- TODO: Write more usage instructions here
43
+ ## Example Usage
34
44
 
45
+ ```ruby
46
+ bz = RubyBugzilla.new("http://uri.to/bugzilla, "username", "password")
47
+ bz.login
48
+ output = bz.query(:bug_status => "NEW")
49
+ bz.modify([928134, 932439], :status => "RELEASE_PENDING", :comment => "Looks good")
50
+ ```
35
51
 
36
52
  ## Contributing
37
53
 
@@ -1,3 +1,3 @@
1
1
  class RubyBugzilla
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/ruby_bugzilla.rb CHANGED
@@ -1,192 +1,147 @@
1
- require 'yaml'
2
1
  require 'linux_admin'
3
2
 
4
3
  class RubyBugzilla
4
+ CMD = `which bugzilla`.chomp
5
+ COOKIES_FILE = File.expand_path('~/.bugzillacookies')
5
6
 
6
- CMD = '/usr/bin/bugzilla'
7
- COOKIES_FILE = File.expand_path('~') + '/.bugzillacookies'
8
- CREDS_FILE = File.expand_path('~') + '/.bugzilla_credentials.yaml'
9
-
10
- def self.username=(un)
11
- @username = un
7
+ def self.installed?
8
+ File.exists?(CMD)
12
9
  end
13
10
 
14
- def self.username
15
- @username
11
+ def self.logged_in?
12
+ File.exists?(COOKIES_FILE)
16
13
  end
17
14
 
18
- def self.password=(pw)
19
- @password = pw
15
+ def self.clear_login!
16
+ File.delete(COOKIES_FILE) if File.exists?(COOKIES_FILE)
20
17
  end
21
18
 
22
- def self.password
23
- @password
24
- end
19
+ attr_accessor :bugzilla_uri, :username, :password, :last_command
20
+ attr_reader :bugzilla_request_uri
25
21
 
26
- def self.credentials(username = nil, password = nil)
27
- self.username = username
28
- self.password = password
22
+ def bugzilla_uri=(value)
23
+ @bugzilla_request_uri = URI.join(value, "xmlrpc.cgi").to_s
24
+ @bugzilla_uri = value
25
+ end
29
26
 
30
- if self.username.nil? || self.password.nil?
31
- un_from_file, pw_from_file = self.credentials_from_file
32
- self.username ||= un_from_file
33
- self.password ||= pw_from_file
34
- end
27
+ def initialize(bugzilla_uri, username, password)
28
+ raise "python-bugzilla not installed" unless installed?
29
+ raise ArgumentError, "username and password must be set" if username.nil? || password.nil?
35
30
 
36
- [self.username, self.password]
31
+ self.bugzilla_uri = bugzilla_uri
32
+ self.username = username
33
+ self.password = password
37
34
  end
38
35
 
39
- # Ruby will catch and raise Erron::ENOENT: if there is no
40
- # ~/.bugzilla_credentials.yaml file.
41
- def self.credentials_from_file
42
- begin
43
- creds = YAML.load_file(CREDS_FILE)
44
- rescue Errno::ENOENT => error
45
- return [nil, nil]
46
- end
47
-
48
- [creds[:bugzilla_credentials][:username],
49
- creds[:bugzilla_credentials][:password]]
36
+ def inspect
37
+ super.gsub(/@password=\".+?\", /, "")
50
38
  end
51
39
 
52
- def self.options
53
- begin
54
- options = YAML.load_file(CREDS_FILE)
55
- rescue Errno::ENOENT => error
56
- return ["https://bugzilla.redhat.com/", false]
57
- end
58
- [options[:bugzilla_options][:bugzilla_uri],
59
- options[:bugzilla_options][:debug]]
40
+ def installed?
41
+ self.class.installed?
60
42
  end
61
43
 
62
- # Running "bugzilla login" generates the bugzilla cookies.
63
- # If that cookie file exists assume the user already logged in.
64
- def self.logged_in?
65
- File.exists?(COOKIES_FILE)
44
+ def logged_in?
45
+ self.class.logged_in?
66
46
  end
67
47
 
68
- def self.clear_login!
69
- if File.exists?(COOKIES_FILE) then
70
- File.delete(COOKIES_FILE)
71
- end
48
+ def clear_login!
49
+ self.class.clear_login!
72
50
  end
73
51
 
74
- def self.login!(username = nil, password = nil)
52
+ def login
53
+ if logged_in?
54
+ self.last_command = nil
55
+ return "Already Logged In"
56
+ end
75
57
 
76
- login_cmd = "#{CMD} "
77
- output = "Already Logged In"
78
58
  params = {}
59
+ params["--debug"] = nil
60
+ params["login"] = [username, password]
79
61
 
80
- raise "Please install python-bugzilla" unless File.exists?(File.expand_path(CMD))
81
-
82
- unless self.logged_in?
83
- username, password = self.credentials(username, password)
84
- uri_opt, debug_opt = self.options
85
-
86
- params["--bugzilla="] = "#{uri_opt}/xmlrpc.cgi" unless uri_opt.nil?
87
- params["--debug"] = nil if debug_opt
88
- params["login"] = [username, password]
89
-
90
- begin
91
- login_cmd_result = LinuxAdmin.run!(CMD, :params => params)
92
- rescue => error
93
- # A failed login attempt could result in a corrupt COOKIES_FILE
94
- clear_login!
95
- raise "#{self.string_command(CMD, params, password)} Failed.\n#{error}"
96
- end
97
- output = login_cmd_result.output
62
+ begin
63
+ execute(params)
64
+ rescue
65
+ clear_login! # A failed login attempt could result in a corrupt COOKIES_FILE
66
+ raise
98
67
  end
99
- [self.string_command(CMD, params, password), output]
100
68
  end
101
69
 
102
- def self.query(product, flag=nil, bug_status=nil, output_format=nil)
103
-
104
- raise "Please install python-bugzilla" unless
105
- File.exists?(File.expand_path(CMD))
106
-
107
- raise ArgumentError, "product cannot be nil" if product.nil?
108
-
109
- uri_opt, debug_opt = self.options
70
+ # Query for existing bugs
71
+ #
72
+ # Example:
73
+ # # Query for all NEW bugs, and return the output in a specific format.
74
+ # puts bz.query(
75
+ # :bug_status => "NEW",
76
+ # :outputformat => "BZ_ID: %{id} STATUS: %{bug_status} SUMMARY: %{summary}"
77
+ # )
78
+ # # BZ_ID: 1234 STATUS: NEW SUMMARY: Something went wrong.
79
+ # # BZ_ID: 1235 STATUS: NEW SUMMARY: Another thing went wrong.
80
+ #
81
+ # @param options [Hash] Query options. Some possible values are:
82
+ # * <tt>:product</tt> - A specific product to limit the query against
83
+ # * <tt>:flag</tt> - Comma separated list of flags
84
+ # * <tt>:bug_status</tt> - Comma separated list of bug statuses, such as NEW,
85
+ # ASSIGNED, etc.
86
+ # * <tt>:outputformat</tt> - A string that will be used to format each line
87
+ # of output, with <tt>%{}</tt> as the interpolater.
88
+ # @return [String] The command output
89
+ def query(options)
90
+ raise ArgumentError, "options must be specified" if options.empty?
110
91
 
111
92
  params = {}
93
+ params["query"] = nil
94
+ set_params_options(params, options)
112
95
 
113
- params["--bugzilla="] = "#{uri_opt}/xmlrpc.cgi" unless uri_opt.nil?
114
- params["query"] = nil
115
- params["--product="] = product
116
- params["--flag="] = flag unless flag.nil?
117
- params["--bug_status="] = bug_status unless bug_status.nil?
118
- params["--outputformat="] = output_format unless output_format.nil?
119
-
120
- begin
121
- query_cmd_result = LinuxAdmin.run!(CMD, :params => params)
122
- rescue => error
123
- raise "#{self.string_command(CMD, params)} Failed.\n#{error}"
124
- end
125
-
126
- [self.string_command(CMD, params), query_cmd_result.output]
96
+ execute(params)
127
97
  end
128
98
 
129
-
130
- #
131
- # Example Usage:
132
- #
133
- # bugids can be an Array of bug ids, a String or Fixnum
134
- # containing a single bug id
99
+ # Modify an existing bug or set of bugs
135
100
  #
136
- # options are a hash of options supported by python-bugzilla
101
+ # Examples:
102
+ # # Set the status of multiple bugs to RELEASE_PENDING
103
+ # bz.modify([948970, 948971], :status => "RELEASE_PENDING")
137
104
  #
138
- # Set the status of multiple bugs to RELEASE_PENDING:
139
- # RubyBugzilla.modify([948970, 948971], :status => "RELEASE_PENDING")
105
+ # # Add a comment
106
+ # bz.modify("948972", :comment => "whatevs")
140
107
  #
141
- # Add a comment
142
- # RubyBugzilla.modify("948972", :comment => "whatevs")
108
+ # # Set the status to POST and add a comment
109
+ # bz.modify(948970, :status => "POST", :comment => "Fixed in shabla")
143
110
  #
144
- # Set the status to POST and add a comment
145
- # RubyBugzilla.modify(948970, :status => "POST", :comment => "Fixed in shabla")
146
- #
147
- def self.modify(bugids_arg, options)
148
-
149
- raise "Please install python-bugzilla" unless File.exists?(File.expand_path(CMD))
111
+ # @param bug_ids [String, Integer, Array<String>, Array<Integer>] The bug id
112
+ # or ids to process.
113
+ # @param options [Hash] The properties to change. Some properties include
114
+ # * <tt>:status</tt> - The bug status, such as NEW, ASSIGNED, etc.
115
+ # * <tt>:comment</tt> - Add a comment
116
+ # @return [String] The command output
117
+ def modify(bug_ids, options)
118
+ bug_ids = Array(bug_ids)
119
+ raise ArgumentError, "bug_ids and options must be specified" if bug_ids.empty? || options.empty?
120
+ raise ArgumentError, "bug_ids must be numeric" unless bug_ids.all? {|id| id.to_s =~ /^\d+$/ }
150
121
 
151
- bugids = Array(bugids_arg)
152
- if bugids.empty? || options.empty? || bugids_arg.to_s.empty?
153
- raise ArgumentError, "bugids and options must be specified"
154
- end
155
-
156
- uri_opt, debug_opt = self.options
157
122
  params = {}
123
+ params["modify"] = bug_ids
124
+ set_params_options(params, options)
158
125
 
159
- params["--bugzilla="] = "#{uri_opt}/xmlrpc.cgi" unless uri_opt.nil?
160
- params["modify"] = nil
126
+ execute(params)
127
+ end
161
128
 
162
- self.set_params_bugids(params, bugids)
163
- self.set_params_options(params, options)
129
+ private
164
130
 
165
- begin
166
- modify_cmd_result = LinuxAdmin.run!(CMD, :params => params)
167
- rescue => error
168
- raise "#{self.string_command(CMD, params)} Failed.\n#{error}"
169
- end
131
+ def execute(params)
132
+ params = {"--bugzilla=" => bugzilla_request_uri}.merge(params)
170
133
 
171
- self.string_command(CMD, params)
134
+ self.last_command = string_command(CMD, params, password)
135
+ LinuxAdmin.run!(CMD, :params => params).output
172
136
  end
173
137
 
174
- private
175
- def self.set_params_options(params, options)
138
+ def set_params_options(params, options)
176
139
  options.each do |key,value|
177
140
  params["--#{key}="] = value
178
141
  end
179
142
  end
180
143
 
181
- private
182
- def self.set_params_bugids(params, bugids)
183
- bugids.each do |bugid|
184
- params[bugid] = nil
185
- end
186
- end
187
-
188
- private
189
- def self.string_command(cmd, params = {}, password=nil)
144
+ def string_command(cmd, params = {}, password=nil)
190
145
  scrubbed_str = str = ""
191
146
  str << cmd
192
147
  params.each do |param, value|
@@ -203,5 +158,4 @@ class RubyBugzilla
203
158
  scrubbed_str = str.sub(password, "********") unless password.nil?
204
159
  scrubbed_str
205
160
  end
206
-
207
161
  end
@@ -1,337 +1,127 @@
1
1
  require 'spec_helper'
2
- require 'tempfile'
3
2
 
4
- class TempCredFile < Tempfile
5
- def initialize(file)
6
- f = super
7
- f.puts("---")
8
- f.puts(":bugzilla_credentials:")
9
- f.puts(" :username: My Username")
10
- f.puts(" :password: My Password")
11
- f.puts(":bugzilla_options:")
12
- f.puts(" :bugzilla_uri: MyURI")
13
- f.puts(" :debug: MyDebug")
14
- f.flush
15
- end
16
- end
17
-
18
3
  describe RubyBugzilla do
19
- saved_cmd = RubyBugzilla::CMD
20
- saved_cookies_file = RubyBugzilla::COOKIES_FILE
21
- saved_creds_file = RubyBugzilla::CREDS_FILE
4
+ let(:bz) { RubyBugzilla.new("http://uri.to/bugzilla", "calvin", "hobbes") }
22
5
 
23
- def ignore_warnings(&block)
24
- begin
25
- v, $VERBOSE = $VERBOSE, nil
26
- block.call if block
27
- ensure
28
- $VERBOSE = v
29
- end
6
+ before do
7
+ # Assume most tests have bugzilla installed and logged in by faking with
8
+ # valid files
9
+ stub_const("RubyBugzilla::CMD", "/bin/echo")
10
+ stub_const("RubyBugzilla::COOKIES_FILE", "/bin/echo")
30
11
  end
31
12
 
32
- # Run after each tests to reset any faked RubyBugzilla constants.
33
- after :each do
34
- ignore_warnings do
35
- RubyBugzilla::CMD = saved_cmd
36
- RubyBugzilla::COOKIES_FILE = saved_cookies_file
37
- RubyBugzilla::CREDS_FILE = saved_creds_file
38
- RubyBugzilla.username = nil
39
- RubyBugzilla.password = nil
40
- end
41
- end
42
-
43
- context "#logged_in?" do
13
+ context ".logged_in?" do
44
14
  it "with an existing bugzilla cookie" do
45
- Tempfile.open('ruby_bugzilla_spec') do |file|
46
- ignore_warnings do
47
- RubyBugzilla::COOKIES_FILE = file.path
48
- end
49
- RubyBugzilla.logged_in?.should be true
50
- end
15
+ RubyBugzilla.logged_in?.should be_true
51
16
  end
52
17
 
53
18
  it "with no bugzilla cookie" do
54
- ignore_warnings do
55
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
56
- end
57
- RubyBugzilla.logged_in?.should be false
19
+ stub_const("RubyBugzilla::COOKIES_FILE", "/This/file/does/not/exist")
20
+ RubyBugzilla.logged_in?.should be_false
58
21
  end
59
22
  end
60
23
 
61
- context "#login!" do
62
- it "when the bugzilla command is not found" do
63
- ignore_warnings do
64
- RubyBugzilla::CMD = '/This/cmd/does/not/exist'
65
- end
66
- expect { RubyBugzilla.login! }.to raise_exception
24
+ context "#new" do
25
+ it 'normal case' do
26
+ expect { bz }.to_not raise_error
67
27
  end
68
28
 
69
- it "when the bugzilla login command produces output" do
70
- # Fake the command and cookies file.
71
- ignore_warnings do
72
- RubyBugzilla::CMD = '/bin/echo'
73
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
74
- end
75
- cmd, output = RubyBugzilla.login!("My Username", "My Password")
76
- output.should include("login My Username My Password")
29
+ it "when the bugzilla command is not found" do
30
+ stub_const("RubyBugzilla::CMD", "/This/cmd/does/not/exist")
31
+ expect { bz }.to raise_error
77
32
  end
78
33
 
79
- it "when the bugzilla login command produces output with arguments" do
80
- # Fake the command and cookies file.
81
- ignore_warnings do
82
- RubyBugzilla::CMD = '/bin/echo'
83
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
84
- end
85
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
86
- output.should include("login calvin hobbes")
34
+ it "when bugzilla_uri is invalid" do
35
+ expect { RubyBugzilla.new("lalala", "", "") }.to raise_error(URI::BadURIError)
87
36
  end
88
37
 
38
+ it "when username and password are not set" do
39
+ expect { RubyBugzilla.new("http://uri.to/bugzilla", nil, nil) }.to raise_error(ArgumentError)
40
+ end
89
41
  end
90
42
 
91
- context "#query" do
92
- it "when the bugzilla command is not found" do
93
- ignore_warnings do
94
- RubyBugzilla::CMD = '/This/cmd/does/not/exist'
95
- end
96
- expect { RubyBugzilla.query }.to raise_exception
43
+ context "#login" do
44
+ it "when already logged in" do
45
+ output = bz.login
46
+
47
+ bz.last_command.should be_nil
48
+ output.should include("Already Logged In")
49
+ end
50
+
51
+ it "when not already logged in" do
52
+ stub_const("RubyBugzilla::COOKIES_FILE", "/This/file/does/not/exist")
53
+ bz.login
54
+
55
+ bz.last_command.should include("login")
97
56
  end
57
+ end
98
58
 
99
- it "when no product is specified" do
100
- ignore_warnings do
101
- RubyBugzilla::CMD = '/bin/echo'
102
- end
103
- expect { RubyBugzilla.query }.to raise_error(ArgumentError)
59
+ context "#query" do
60
+ it "when no arguments are specified" do
61
+ expect { bz.query }.to raise_error(ArgumentError)
104
62
  end
105
63
 
106
64
  it "when the bugzilla query command produces output" do
107
- # Fake the command and cookies file.
108
- ignore_warnings do
109
- RubyBugzilla::CMD = '/bin/echo'
110
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
111
- end
112
-
113
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
114
- cmd, output = RubyBugzilla.query('CloudForms Management Engine',
115
- flag = '',
116
- bug_status = 'NEW, ASSIGNED, POST, MODIFIED, ON_DEV, ON_QA, VERIFIED, RELEASE_PENDING',
117
- output_format = 'BZ_ID: %{id} STATUS: %{bug_status} SUMMARY: %{summary}')
65
+ output = bz.query(
66
+ :product => 'CloudForms Management Engine',
67
+ :bug_status => 'NEW, ASSIGNED, POST, MODIFIED, ON_DEV, ON_QA, VERIFIED, RELEASE_PENDING',
68
+ :outputformat => 'BZ_ID: %{id} STATUS: %{bug_status} SUMMARY: %{summary}'
69
+ )
118
70
 
119
- cmd.should include("query")
120
- output.should include("BZ_ID:")
121
- output.should include("STATUS:")
122
- output.should include("SUMMARY:")
71
+ bz.last_command.should include("query")
72
+ output.should include("BZ_ID:")
73
+ output.should include("STATUS:")
74
+ output.should include("SUMMARY:")
123
75
  end
124
76
  end
125
77
 
126
78
  context "#modify" do
127
- it "when the bugzilla command is not found" do
128
- ignore_warnings do
129
- RubyBugzilla::CMD = '/This/cmd/does/not/exist'
130
- end
131
- expect { RubyBugzilla.modify }.to raise_exception
132
- end
133
-
134
79
  it "when no arguments are specified" do
135
- ignore_warnings do
136
- RubyBugzilla::CMD = '/bin/echo'
137
- end
138
- expect { RubyBugzilla.modify }.to raise_error(ArgumentError)
80
+ expect { bz.modify }.to raise_error(ArgumentError)
139
81
  end
140
82
 
141
- it "when no bugids are are specified" do
142
- ignore_warnings do
143
- RubyBugzilla::CMD = '/bin/echo'
144
- end
145
- expect { RubyBugzilla.modify("", :status => "POST") }.to raise_error(ArgumentError)
83
+ it "when invalid bugids are are specified" do
84
+ expect { bz.modify("", :status => "POST") }.to raise_error(ArgumentError)
146
85
  end
147
86
 
148
87
  it "when no options are specified" do
149
- ignore_warnings do
150
- RubyBugzilla::CMD = '/bin/echo'
151
- end
152
- expect { RubyBugzilla.modify(9, {}) }.to raise_error(ArgumentError)
88
+ expect { bz.modify(9, {}) }.to raise_error(ArgumentError)
153
89
  end
154
90
 
155
91
  it "when the bugzilla modify command succeeds for one option and multiple BZs" do
156
- # Fake the command and cookies file.
157
- ignore_warnings do
158
- RubyBugzilla::CMD = '/bin/echo'
159
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
160
- end
161
-
162
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
163
- cmd = RubyBugzilla.modify(["948970", "948971", "948972", "948973"],
164
- :status => "RELEASE_PENDING")
92
+ bz.modify(["948970", "948971", "948972", "948973"], :status => "RELEASE_PENDING")
165
93
 
166
- cmd.should include("modify")
167
- cmd.should include("--status=\"RELEASE_PENDING\"")
168
- cmd.should include("948970")
169
- cmd.should include("948971")
170
- cmd.should include("948972")
171
- cmd.should include("948973")
94
+ bz.last_command.should include("modify")
95
+ bz.last_command.should include("--status=\"RELEASE_PENDING\"")
96
+ bz.last_command.should include("948970")
97
+ bz.last_command.should include("948971")
98
+ bz.last_command.should include("948972")
99
+ bz.last_command.should include("948973")
172
100
  end
173
101
 
174
102
  it "when the bugzilla modify command succeeds for multiple options and a Array BZ" do
175
- # Fake the command and cookies file.
176
- ignore_warnings do
177
- RubyBugzilla::CMD = '/bin/echo'
178
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
179
- end
103
+ bz.modify(["948972"], :status => "POST", :comment => "Fixed in shabla")
180
104
 
181
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
182
- cmd = RubyBugzilla.modify(bugids = ["948972"],
183
- options = { :status => "POST", :comment => "Fixed in shabla" } )
184
-
185
- cmd.should include("modify")
186
- cmd.should include("--status=\"POST\"")
187
- cmd.should include("948972")
188
- cmd.should include("Fixed in shabla")
105
+ bz.last_command.should include("modify")
106
+ bz.last_command.should include("--status=\"POST\"")
107
+ bz.last_command.should include("948972")
108
+ bz.last_command.should include("Fixed in shabla")
189
109
  end
190
110
 
191
111
  it "when the bugzilla modify command succeeds for a Fixnum BZ" do
192
- # Fake the command and cookies file.
193
- ignore_warnings do
194
- RubyBugzilla::CMD = '/bin/echo'
195
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
196
- end
197
-
198
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
199
- cmd = RubyBugzilla.modify(948972, :status => "POST")
112
+ bz.modify(948972, :status => "POST")
200
113
 
201
- cmd.should include("modify")
202
- cmd.should include("--status=\"POST\"")
203
- cmd.should include("948972")
114
+ bz.last_command.should include("modify")
115
+ bz.last_command.should include("--status=\"POST\"")
116
+ bz.last_command.should include("948972")
204
117
  end
205
118
 
206
119
  it "when the bugzilla modify command succeeds for a String BZ" do
207
- # Fake the command and cookies file.
208
- ignore_warnings do
209
- RubyBugzilla::CMD = '/bin/echo'
210
- RubyBugzilla::COOKIES_FILE = '/This/file/does/not/exist'
211
- end
212
-
213
- cmd, output = RubyBugzilla.login!("calvin", "hobbes")
214
- cmd = RubyBugzilla.modify("948972", :status => "POST")
120
+ bz.modify("948972", :status => "POST")
215
121
 
216
- cmd.should include("modify")
217
- cmd.should include("--status=\"POST\"")
218
- cmd.should include("948972")
122
+ bz.last_command.should include("modify")
123
+ bz.last_command.should include("--status=\"POST\"")
124
+ bz.last_command.should include("948972")
219
125
  end
220
126
  end
221
-
222
- context "#credentials_from_file" do
223
- it "when the YAML input file is not found" do
224
- ignore_warnings do
225
- RubyBugzilla::CREDS_FILE = '/This/cmd/does/not/exist'
226
- end
227
- un, pw = RubyBugzilla.credentials_from_file
228
- un.should == nil
229
- pw.should == nil
230
- end
231
-
232
- it "when the YAML input is valid" do
233
- # Fake the credentials YAML file.
234
- TempCredFile.open('ruby_bugzilla_spec') do |file|
235
- ignore_warnings do
236
- RubyBugzilla::CREDS_FILE = file.path
237
- end
238
- un, pw = RubyBugzilla.credentials_from_file
239
- un.should == "My Username"
240
- pw.should == "My Password"
241
- end
242
- end
243
- end
244
-
245
- context "#credentials" do
246
- it "with no arguments and when the YAML input file is not found" do
247
- ignore_warnings do
248
- RubyBugzilla::CREDS_FILE = '/This/cmd/does/not/exist'
249
- end
250
- un, pw = RubyBugzilla.credentials
251
- un.should == nil
252
- pw.should == nil
253
- end
254
-
255
- it "with no arguments and when the YAML input is valid" do
256
- # Fake the credentials YAML file.
257
- TempCredFile.open('ruby_bugzilla_spec') do |file|
258
- ignore_warnings do
259
- RubyBugzilla::CREDS_FILE = file.path
260
- end
261
- un, pw = RubyBugzilla.credentials
262
- un.should == "My Username"
263
- pw.should == "My Password"
264
- end
265
- end
266
-
267
- it "with arguments and when the YAML input file is not found" do
268
- ignore_warnings do
269
- RubyBugzilla::CREDS_FILE = '/This/cmd/does/not/exist'
270
- end
271
- un, pw = RubyBugzilla.credentials("test_un", "test_pw")
272
- un.should == "test_un"
273
- pw.should == "test_pw"
274
- end
275
-
276
- it "with arguments and valid YAML input, favor arguments" do
277
- # Fake the credentials YAML file.
278
- TempCredFile.open('ruby_bugzilla_spec') do |file|
279
- ignore_warnings do
280
- RubyBugzilla::CREDS_FILE = file.path
281
- end
282
- un, pw = RubyBugzilla.credentials("test_un", "test_pw")
283
- un.should == "test_un"
284
- pw.should == "test_pw"
285
- end
286
- end
287
-
288
- it "with password argument and valid YAML input, favor argument" do
289
- # Fake the credentials YAML file.
290
- TempCredFile.open('ruby_bugzilla_spec') do |file|
291
- ignore_warnings do
292
- RubyBugzilla::CREDS_FILE = file.path
293
- end
294
- un, pw = RubyBugzilla.credentials(nil, "test_pw")
295
- un.should == "My Username"
296
- pw.should == "test_pw"
297
- end
298
- end
299
-
300
- it "with username argument and valid YAML input, favor argument" do
301
- # Fake the credentials YAML file.
302
- TempCredFile.open('ruby_bugzilla_spec') do |file|
303
- ignore_warnings do
304
- RubyBugzilla::CREDS_FILE = file.path
305
- end
306
- un, pw = RubyBugzilla.credentials("test_un")
307
- un.should == "test_un"
308
- pw.should == "My Password"
309
- end
310
- end
311
-
312
- end
313
-
314
- context "#options" do
315
- it "when the YAML input is valid" do
316
- # Fake the credentials YAML file.
317
- TempCredFile.open('ruby_bugzilla_spec') do |file|
318
- ignore_warnings do
319
- RubyBugzilla::CREDS_FILE = file.path
320
- end
321
- uri, debug = RubyBugzilla.options
322
- uri.should == "MyURI"
323
- debug.should == "MyDebug"
324
- end
325
- end
326
- it "when the YAML input is is not found" do
327
- ignore_warnings do
328
- RubyBugzilla::CREDS_FILE = '/This/cmd/does/not/exist'
329
- end
330
- uri, debug = RubyBugzilla.options
331
- uri.should == "https://bugzilla.redhat.com/"
332
- debug.should == false
333
- end
334
- end
335
-
336
127
  end
337
-
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'ruby_bugzilla'
2
-
3
1
  # This file was generated by the `rspec --init` command. Conventionally, all
4
2
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
5
3
  # Require this file using `require "spec_helper"` to ensure that it is only
@@ -19,3 +17,5 @@ end
19
17
 
20
18
  require 'coveralls'
21
19
  Coveralls.wear!
20
+
21
+ require 'ruby_bugzilla'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_bugzilla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-20 00:00:00.000000000 Z
12
+ date: 2013-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -113,7 +113,6 @@ files:
113
113
  - lib/ruby_bugzilla.rb
114
114
  - lib/ruby_bugzilla/version.rb
115
115
  - ruby_bugzilla.gemspec
116
- - samples/bugzilla_credentials.yaml
117
116
  - spec/ruby_bugzilla_spec.rb
118
117
  - spec/spec_helper.rb
119
118
  homepage: http://github.com/ManageIQ/ruby-bugzilla
@@ -131,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
130
  version: '0'
132
131
  segments:
133
132
  - 0
134
- hash: -142661522033235115
133
+ hash: -77384532165350342
135
134
  required_rubygems_version: !ruby/object:Gem::Requirement
136
135
  none: false
137
136
  requirements:
@@ -140,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
139
  version: '0'
141
140
  segments:
142
141
  - 0
143
- hash: -142661522033235115
142
+ hash: -77384532165350342
144
143
  requirements: []
145
144
  rubyforge_project:
146
145
  rubygems_version: 1.8.25
@@ -1,14 +0,0 @@
1
- # Copy this file to .bugzilla_credentials.yaml
2
- # in your home directory to use it for automated
3
- # login to bugzilla
4
- #
5
- # Note: The dot to make it a hiden file:
6
- # <dot>bugzilla_credentials.yaml
7
- #
8
- ---
9
- :bugzilla_options:
10
- :bugzilla_uri: https://bugzilla.redhat.com/
11
- :debug: true
12
- :bugzilla_credentials:
13
- :username: Your bugzilla login name
14
- :password: Your bugzilla password