axtro-roart 0.1.8

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.
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. .. spec_helper])
2
+
3
+ describe 'array extentions' do
4
+
5
+ it 'should turn an array to a nil valued hash' do
6
+ array = %w[key1 key2]
7
+ hash = array.to_hash
8
+ hash.has_key?(:key1).should be_true
9
+ hash.has_key?(:key2).should be_true
10
+ hash[:key1].should be_nil
11
+ end
12
+
13
+ end
@@ -0,0 +1,16 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. .. spec_helper])
2
+
3
+ describe 'hash extentions' do
4
+
5
+ it 'should format the content correctly' do
6
+ payload = {:subject => "A New Ticket", :queue => 'My Queue'}
7
+ payload.to_content_format.include?("Subject: A New Ticket").should be_true
8
+ payload.to_content_format.include?("Queue: My Queue").should be_true
9
+ end
10
+
11
+ it 'should handel custom fields' do
12
+ payload = {:cf_stuff => 'field'}
13
+ payload.to_content_format.should == "CF-Stuff: field"
14
+ end
15
+
16
+ end
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. .. spec_helper])
2
+
3
+ describe 'string extentions' do
4
+
5
+ it 'should underscore a word' do
6
+ 'SomeGuy'.underscore.should == 'some_guy'
7
+ end
8
+
9
+ it 'should camelcase a word' do
10
+ 'some_guy'.camelize.should == 'SomeGuy'
11
+ end
12
+
13
+ end
@@ -0,0 +1,60 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. spec_helper])
2
+
3
+ describe "History" do
4
+
5
+ it 'should have a ticket' do
6
+ search_array = ['1:subject']
7
+ search_array.extend(Roart::TicketPage)
8
+ full_ticket = Roart::Ticket.send(:instantiate, {:id => 1, :subject => 'subject', :full => true})
9
+ @ticket = Roart::Ticket.send(:instantiate, search_array.to_search_array ).first
10
+ Roart::History.should_receive(:get_page).and_return('200')
11
+
12
+ history = @ticket.histories
13
+ history.ticket.should == @ticket
14
+
15
+ end
16
+
17
+ describe 'getting ticket history' do
18
+
19
+ it 'should create the crect URI' do
20
+ connection = mock('connection', :rest_path => 'REST/1.0/')
21
+ myclass = mock('class', :connection => connection)
22
+ ticket = mock(:ticket, :id => 1, :class => myclass)
23
+ hash = mock(:options_hash, :[] => ticket)
24
+ Roart::History.should_receive(:default_options).and_return(hash)
25
+ Roart::History.send(:uri_for, ticket).should == 'REST/1.0/ticket/1/history?format=l'
26
+ end
27
+ end
28
+
29
+ describe 'reading history pages' do
30
+
31
+ before do
32
+ @page = File.open(File.join(File.dirname(__FILE__), %w[ .. test_data full_history.txt])).readlines.join
33
+ @ticket = mock('ticket')
34
+ Roart::History.should_receive(:get_page).and_return(@page)
35
+ @histories = Roart::History.default(:ticket => @ticket)
36
+ end
37
+
38
+ it 'should have the right number of histories' do
39
+ @histories.size.should == 5
40
+ end
41
+
42
+ it 'should have a ticket' do
43
+ @histories.first.ticket.should == @ticket
44
+ end
45
+
46
+ it 'should have an id' do
47
+ @histories.first.id.should == 34725
48
+ end
49
+
50
+ it 'should return itself for all' do
51
+ @histories.all.should == @histories
52
+ end
53
+
54
+ it 'should return the ticket' do
55
+ @histories.ticket.should == @ticket
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,11 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[ .. spec_helper])
3
+
4
+ describe "Roart" do
5
+
6
+ it "should raise an error if there aren't required fields" do
7
+ attributes = {:subject => "Not Enough Stuff"}
8
+ lambda { Roart::check_keys!(attributes, Roart::Tickets::RequiredAttributes) }.should raise_error(Roart::ArgumentError)
9
+ end
10
+
11
+ end
@@ -0,0 +1,93 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. spec_helper])
2
+
3
+ describe 'ticket page' do
4
+
5
+ describe 'ticket hash' do
6
+
7
+ it 'should convert an array to a hash' do
8
+ array = ["id : 10", "subject : asdf"]
9
+ array.extend(Roart::TicketPage)
10
+ hash = array.to_hash
11
+ hash.has_key?(:id).should be_true
12
+ hash[:id].should == 10
13
+ hash[:subject].should == 'asdf'
14
+ end
15
+
16
+ end
17
+
18
+ describe 'reading a ticket' do
19
+
20
+ before do
21
+ @page = File.open(File.join(File.dirname(__FILE__), %w[ .. test_data ticket.txt])).readlines.join
22
+ @page = @page.split("\n")
23
+ @page.extend(Roart::TicketPage)
24
+ end
25
+
26
+ it 'should include custom fields' do
27
+ @page.to_hash[:cf_BTN].should == '1035328269'
28
+ end
29
+
30
+ it 'should be a hash' do
31
+ @page.to_hash.class.should == HashWithIndifferentAccess
32
+ end
33
+
34
+ end
35
+
36
+ describe 'search array' do
37
+
38
+ before do
39
+ @array = ["123 : Subject", "234 : Subject"]
40
+ @array.extend(Roart::TicketPage)
41
+ @array = @array.to_search_array
42
+ end
43
+
44
+ it 'should make an array of search results' do
45
+ @array.size.should == 2
46
+ end
47
+
48
+ it 'should put search elements into the search array' do
49
+ @array.first[:id].should == 123
50
+ @array.last[:id].should == 234
51
+ end
52
+
53
+ end
54
+
55
+ describe "search list array" do
56
+ before do
57
+ @array = [['id:234', 'subject:SomeTicket', ], ['id:432','subject:Another']]
58
+ @array.extend(Roart::TicketPage)
59
+ @array = @array.to_search_list_array
60
+ end
61
+
62
+ it "should return an array of hashes" do
63
+ @array.first.class.should == HashWithIndifferentAccess
64
+ end
65
+
66
+ it "should put the search elements into the array" do
67
+ @array.first[:id].should == 234
68
+ end
69
+ end
70
+
71
+ describe 'ticket history hash' do
72
+
73
+ before do
74
+ @page = File.open(File.join(File.dirname(__FILE__), %w[ .. test_data single_history.txt])).readlines.join
75
+ @page = @page.split("\n")
76
+ @page.extend(Roart::TicketPage)
77
+ end
78
+
79
+ it 'should give back the hash of history' do
80
+ @page.to_history_hash.class.should == HashWithIndifferentAccess
81
+ end
82
+
83
+ it 'should have some content' do
84
+ @page.to_history_hash[:content].should_not be_nil
85
+ end
86
+
87
+ it 'should have the create type' do
88
+ @page.to_history_hash[:type].should == 'Create'
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,470 @@
1
+ require File.join(File.dirname(__FILE__), %w[ .. spec_helper])
2
+
3
+ describe "Ticket" do
4
+
5
+ it "should have a connection" do
6
+ Roart::Connection.should_receive(:new).with(:some => 'some options', :adapter => "www").and_return(true)
7
+ Roart::Ticket.connection(:some => 'some options', :adapter => "www").should == true
8
+ end
9
+
10
+ it "should find the first ticket" do
11
+ Roart::Ticket.should_receive(:find_initial).with(:my => 'options').and_return('a ticket')
12
+ Roart::Ticket.find(:first, :my => 'options').should == 'a ticket'
13
+ end
14
+
15
+ it 'should find all tickets' do
16
+ Roart::Ticket.should_receive(:find_all).with(:my => 'options').and_return(%w[array of tickets])
17
+ Roart::Ticket.find(:all, :my => 'options').should == ['array', 'of', 'tickets']
18
+ end
19
+
20
+ it 'should find a ticket by id' do
21
+ Roart::Ticket.should_receive(:find_by_ids).with([12345],{}).and_return('a ticket')
22
+ Roart::Ticket.find(12345).should == 'a ticket'
23
+ end
24
+
25
+ describe "find initial" do
26
+
27
+ it 'should set options to include :limit => 1' do
28
+ Roart::Ticket.should_receive(:find_all).with({:limit => 1}).and_return(['ticket', 'not seen'])
29
+ Roart::Ticket.send(:find_initial)
30
+ end
31
+
32
+ it 'should not overwrite the options hash' do
33
+ Roart::Ticket.should_receive(:find_all).with({:queue => 'queue', :limit => 1}).and_return(['ticket', 'not seen'])
34
+ Roart::Ticket.send(:find_initial, :queue => 'queue')
35
+ end
36
+
37
+ it 'should return 1 ticket object' do
38
+ Roart::Ticket.should_receive(:find_all).with({:limit => 1}).and_return(['ticket', 'not seen'])
39
+ Roart::Ticket.send(:find_initial).should == 'ticket'
40
+ end
41
+
42
+ end
43
+
44
+ describe 'page array' do
45
+
46
+ it 'should raise an error if not a 200 response' do
47
+ connection = mock('connection', :get => 'some error message')
48
+ Roart::Ticket.should_receive(:connection).and_return(connection)
49
+ lambda do
50
+ Roart::Ticket.send(:page_array, 'www.whatever')
51
+ end.should raise_error(Roart::TicketSystemInterfaceError)
52
+ end
53
+
54
+ it 'should raise an error if nothing is returned' do
55
+ connection = mock('connection', :get => nil)
56
+ Roart::Ticket.should_receive(:connection).and_return(connection)
57
+ lambda do
58
+ Roart::Ticket.send(:page_array, 'www.whatever')
59
+ end.should raise_error(Roart::TicketSystemError)
60
+ end
61
+
62
+ it 'should give back an array of strings' do
63
+ connection = mock('connection', :get => "200 OK\n23:SomeTicket\n33:Another")
64
+ Roart::Ticket.should_receive(:connection).and_return(connection)
65
+ Roart::Ticket.send(:page_array, 'uri').should == ['23:SomeTicket', '33:Another']
66
+ end
67
+
68
+ end
69
+
70
+ describe 'getting tickets from URI' do
71
+
72
+ describe 'search' do
73
+
74
+ it 'should give an array of tickets' do
75
+ Roart::Ticket.should_receive(:page_list_array).with('uri&format=l').and_return([['id:234', 'subject:SomeTicket', ], ['id:432','subject:Another']])
76
+ Roart::Ticket.send(:get_tickets_from_search_uri, 'uri').size.should == 2
77
+ end
78
+
79
+ it 'should have full tickets' do
80
+ Roart::Ticket.should_receive(:page_list_array).with('uri&format=l').and_return([['id:234', 'subject:SomeTicket', ], ['id:432','subject:Another']])
81
+ Roart::Ticket.send(:get_tickets_from_search_uri, 'uri').each do |ticket|
82
+ ticket.full.should be_true
83
+ end
84
+ end
85
+
86
+ it 'should give back an array of arrays of strings' do
87
+ test_data = File.open(File.dirname(__FILE__) + "/../test_data/search_ticket.txt").readlines.join("\n")
88
+ connection = mock('connection', :get => test_data)
89
+ Roart::Ticket.should_receive(:connection).and_return(connection)
90
+ Roart::Ticket.send(:page_list_array, 'uri').should == [["id: ticket/3033", "Queue: Canada Express", "Subject: Canada Express", "Status: new"], ["id: ticket/2354", "Queue: Canada Express", "Subject: Canada Express", "Status: open"]]
91
+ end
92
+
93
+ describe ' search with no matches' do
94
+ it 'should give an empty array for :all' do
95
+ results = 'RT/3.6.6 200 Ok
96
+
97
+ No matching results.'
98
+ connection = mock('connection', :server => 'server', :get => results)
99
+ Roart::Ticket.should_receive(:connection).and_return(connection)
100
+ Roart::Ticket.send(:get_tickets_from_search_uri, 'uri').should == []
101
+ end
102
+ end
103
+
104
+ end
105
+
106
+ describe 'full ticket' do
107
+
108
+ it 'should give a ticket' do
109
+ Roart::Ticket.should_receive(:page_array).with('uri').and_return(['id:23', 'subject:someticket'])
110
+ Roart::Ticket.send(:get_ticket_from_uri, 'uri').is_a?(Roart::Ticket).should be_true
111
+ end
112
+
113
+ it 'should be a full ticket' do
114
+ Roart::Ticket.should_receive(:page_array).with('uri').and_return(['id:23', 'subject:someticket'])
115
+ Roart::Ticket.send(:get_ticket_from_uri, 'uri').full.should be_true
116
+ end
117
+
118
+ end
119
+
120
+ describe 'getting ticket from id' do
121
+
122
+ it 'should give a ticket' do
123
+ connection = mock('connection', :server => "server")
124
+ Roart::Ticket.should_receive(:connection).and_return(connection)
125
+ Roart::Ticket.should_receive(:get_ticket_from_uri).with('server' + '/REST/1.0/ticket/' + 12345.to_s).and_return('a ticket')
126
+ Roart::Ticket.send(:get_ticket_by_id, 12345).should == 'a ticket'
127
+ end
128
+
129
+ it 'should raise when searching for an id with no results' do
130
+ results = 'RT/3.6.6 200 Ok
131
+
132
+ No matching results.'
133
+ connection = mock('connection', :server => 'server', :get => results)
134
+ Roart::Ticket.stub!(:connection).and_return(connection)
135
+ lambda {Roart::Ticket.send(:get_ticket_by_id, 123)}.should raise_error("No ticket matching search criteria found.")
136
+ end
137
+
138
+ end
139
+
140
+ describe 'find methods' do
141
+
142
+ it 'should get all tickets from an options hash' do
143
+ Roart::Ticket.should_receive('construct_search_uri').with('searches').and_return('uri')
144
+ Roart::Ticket.should_receive('get_tickets_from_search_uri').with('uri').and_return(['tickets'])
145
+ Roart::Ticket.send(:find_all, 'searches').should == ['tickets']
146
+ end
147
+
148
+ it 'should find tickets from id' do
149
+ Roart::Ticket.should_receive(:get_ticket_by_id).with('id').and_return('a ticket')
150
+ Roart::Ticket.send(:find_by_ids, ['id'], {}).should == 'a ticket'
151
+ end
152
+
153
+ end
154
+
155
+ describe 'building a search uri' do
156
+
157
+ before do
158
+ @connection = mock('connection', :server => "server")
159
+ @search_string = "/REST/1.0/search/ticket?"
160
+ Roart::Ticket.should_receive(:connection).and_return(@connection)
161
+ @query = @connection.server + @search_string + 'query= '
162
+ end
163
+
164
+ describe 'queues' do
165
+
166
+ it 'should include a queue' do
167
+ Roart::Ticket.send(:construct_search_uri, {:queue => 'myQueue'}).should == @query + "Queue = 'myQueue'"
168
+ end
169
+
170
+ it 'should take multiple queues' do
171
+ Roart::Ticket.send(:construct_search_uri, {:queue => ['myQueue', 'another']}).should == @query + "( Queue = 'myQueue' OR Queue = 'another' )"
172
+ end
173
+
174
+ end
175
+
176
+ describe 'dates' do
177
+
178
+ before do
179
+ @time = Time.now
180
+ end
181
+
182
+ it 'should accept a date' do
183
+ Roart::Ticket.send(:construct_search_uri, {:created => @time}).should == @query + "( Created > '#{dbtime(@time)}' )"
184
+ end
185
+
186
+ it 'should accept an array of dates' do
187
+ Roart::Ticket.send(:construct_search_uri, {:created => [@time, @time + 300]}).should == @query + "( Created > '#{dbtime(@time)}' AND Created < '#{dbtime(@time + 300)}' )"
188
+ end
189
+
190
+ it 'should accept a range of dates' do
191
+ Roart::Ticket.send(:construct_search_uri, {:created => (@time..(@time + 300))}).should == @query + "( Created > '#{dbtime(@time)}' AND Created < '#{dbtime(@time + 300)}' )"
192
+ end
193
+
194
+ it 'should accept an array of strings' do
195
+ Roart::Ticket.send(:construct_search_uri, {:created => %w[cat dog]}).should == @query + "( Created > 'cat' AND Created < 'dog' )"
196
+ end
197
+
198
+ it 'should accept a string' do
199
+ Roart::Ticket.send(:construct_search_uri, {:created => 'time'}).should == @query + "( Created > 'time' )"
200
+ end
201
+
202
+ describe 'date fields' do
203
+
204
+ it 'should search started' do
205
+ Roart::Ticket.send(:construct_search_uri, {:started => 'time'}).should == @query + "( Started > 'time' )"
206
+ end
207
+
208
+ it 'should search resolved' do
209
+ Roart::Ticket.send(:construct_search_uri, {:resolved => 'time'}).should == @query + "( Resolved > 'time' )"
210
+ end
211
+
212
+ it 'should search told' do
213
+ Roart::Ticket.send(:construct_search_uri, {:told => 'time'}).should == @query + "( Told > 'time' )"
214
+ end
215
+
216
+ it 'should search last_updated' do
217
+ Roart::Ticket.send(:construct_search_uri, {:last_updated => 'time'}).should == @query + "( LastUpdated > 'time' )"
218
+ end
219
+
220
+ it 'should search starts' do
221
+ Roart::Ticket.send(:construct_search_uri, {:starts => 'time'}).should == @query + "( Starts > 'time' )"
222
+ end
223
+
224
+ it 'should search due' do
225
+ Roart::Ticket.send(:construct_search_uri, {:due => 'time'}).should == @query + "( Due > 'time' )"
226
+ end
227
+
228
+ it 'should search updated' do
229
+ Roart::Ticket.send(:construct_search_uri, {:updated => 'time'}).should == @query + "( Updated > 'time' )"
230
+ end
231
+
232
+ end
233
+
234
+ end
235
+
236
+ describe 'searches' do
237
+
238
+ it 'should accept a string' do
239
+ Roart::Ticket.send(:construct_search_uri, {:subject => 'fish'}).should == @query + "Subject LIKE 'fish'"
240
+ end
241
+
242
+ it 'should accept an array' do
243
+ Roart::Ticket.send(:construct_search_uri, {:subject => %w[cramanation station]}).should == @query + "( Subject LIKE 'cramanation' AND Subject LIKE 'station' )"
244
+ end
245
+
246
+ describe 'search fields' do
247
+
248
+ it 'should search content' do
249
+ Roart::Ticket.send(:construct_search_uri, {:content => 'fish'}).should == @query + "Content LIKE 'fish'"
250
+ end
251
+
252
+ it 'should search content_type' do
253
+ Roart::Ticket.send(:construct_search_uri, {:content_type => 'fish'}).should == @query + "ContentType LIKE 'fish'"
254
+ end
255
+
256
+ it 'should search file_name' do
257
+ Roart::Ticket.send(:construct_search_uri, {:file_name => 'fish'}).should == @query + "FileName LIKE 'fish'"
258
+ end
259
+
260
+ end
261
+
262
+ end
263
+
264
+ describe 'status' do
265
+
266
+ it 'should accept a string' do
267
+ Roart::Ticket.send(:construct_search_uri, {:status => 'new'}).should == @query + "Status = 'new'"
268
+ end
269
+
270
+ it 'should accept a symbol' do
271
+ Roart::Ticket.send(:construct_search_uri, {:status => :new}).should == @query + "Status = 'new'"
272
+ end
273
+
274
+ it 'should accept an array' do
275
+ Roart::Ticket.send(:construct_search_uri, {:status => ['new', 'open']}).should == @query + "( Status = 'new' OR Status = 'open' )"
276
+ end
277
+
278
+ end
279
+
280
+ describe 'custom_fields' do
281
+
282
+ it 'should accept a hash with string values' do
283
+ Roart::Ticket.send(:construct_search_uri, {:custom_fields => {:phone => '8675309'}}).should == @query + "'CF.{phone}' = '8675309'"
284
+ end
285
+
286
+ it 'should accept a hash with string values' do
287
+ Roart::Ticket.send(:construct_search_uri, {:custom_fields => {:phone => ['8675309', '5553265']}}).should == @query + "( 'CF.{phone}' = '8675309' OR 'CF.{phone}' = '5553265' )"
288
+ end
289
+
290
+ end
291
+
292
+ describe 'multiple find options' do
293
+
294
+ it 'should allow multiple find options' do
295
+ query = Roart::Ticket.send(:construct_search_uri, {:status => 'new', :queue => 'MyQueue'})
296
+ query.include?("Status = 'new'").should be_true
297
+ query.include?("Queue = 'MyQueue'").should be_true
298
+ end
299
+
300
+ it "should search for :queue => 'A Queue', :status => [:new, :open]" do
301
+ query = Roart::Ticket.send(:construct_search_uri, {:queue => 'A Queue', :status => [:new, :open]})
302
+ query.include?("( Status = 'new' OR Status = 'open' )").should be_true
303
+ query.include?("Queue = 'A Queue'").should be_true
304
+ end
305
+
306
+ end
307
+
308
+ end
309
+
310
+ end
311
+
312
+ describe "the default queue" do
313
+
314
+ before do
315
+ @connection = mock('connection', :server => "server")
316
+ @search_string = "/REST/1.0/search/ticket?"
317
+ @query = @connection.server + @search_string + 'query= '
318
+ class MyTicket < Roart::Ticket; end
319
+ MyTicket.instance_variable_set("@default_queue", 'myQueue')
320
+ MyTicket.should_receive(:connection).and_return(@connection)
321
+ end
322
+
323
+
324
+ it 'should have a default queue' do
325
+ MyTicket.send(:construct_search_uri, :status => :new).should == @query + "Queue = 'myQueue' AND Status = 'new'"
326
+ end
327
+
328
+ it 'should search without options and return the default queue' do
329
+ MyTicket.send(:construct_search_uri).should == @query + "Queue = 'myQueue'"
330
+ end
331
+
332
+ end
333
+
334
+ describe 'ticket methods' do
335
+
336
+
337
+ it 'should change the ticket' do
338
+ ticket = Roart::Ticket.send(:instantiate,{:subject => 'A New Ticket', :queue => 'My Queue', :id => 1})
339
+ ticket.subject = 'An Old Ticket'
340
+ ticket.subject.should == 'An Old Ticket'
341
+ end
342
+
343
+ it 'should be able to load the full ticket' do
344
+ search_array = ['1:subject']
345
+ search_array.extend(Roart::TicketPage)
346
+ full_ticket = Roart::Ticket.send(:instantiate, {:id => 1, :subject => 'subject', :full => true})
347
+ ticket = Roart::Ticket.send(:instantiate, search_array.to_search_array ).first
348
+ Roart::Ticket.should_receive(:find).with(1).and_return(full_ticket)
349
+ ticket.load_full!
350
+ ticket.full.should be_true
351
+ end
352
+
353
+ end
354
+
355
+ describe 'manipulating tickets' do
356
+
357
+ describe 'creating tickets' do
358
+
359
+ before do
360
+ post_data = @payload = {:queue => 'My Queue', :subject => 'A New Ticket'}
361
+ post_data.update(:id => 'ticket/new')
362
+ post_data = to_content_format(post_data)
363
+ mock_connection = mock('connection')
364
+ mock_connection.should_receive(:post).with('uri/REST/1.0/ticket/new', {:content => post_data}).and_return("RT/3.6.6 200 Ok\n\n# Ticket 267783 created.")
365
+ mock_connection.should_receive(:server).and_return('uri')
366
+ Roart::Ticket.should_receive(:connection).twice.and_return(mock_connection)
367
+ end
368
+
369
+ it 'should be able to save a new ticket' do
370
+ ticket = Roart::Ticket.new(@payload)
371
+ ticket.new_record?.should be_true
372
+ ticket.save
373
+ ticket.new_record?.should be_false
374
+ end
375
+
376
+ it 'should be able to create a ticket' do
377
+ ticket = Roart::Ticket.create(@payload)
378
+ end
379
+
380
+ it 'should return a newly created ticket' do
381
+ ticket = Roart::Ticket.new(@payload)
382
+ ticket.class.should == Roart::Ticket
383
+ ticket.save
384
+ ticket.id.should == 267783
385
+ end
386
+
387
+ end
388
+
389
+ describe 'updating tickets' do
390
+
391
+ before do
392
+ @payload = {:queue => 'My Queue', :subject => 'An Old Ticket'}.with_indifferent_access
393
+ @post_data = {:queue => 'My Queue', :subject => 'An Old Ticket'}.with_indifferent_access
394
+ @payload[:subject] = 'A New Ticket'
395
+ @post_data = to_content_format(@post_data)
396
+ @mock_connection = mock('connection')
397
+ @mock_connection.should_receive(:server).and_return('uri')
398
+ Roart::Ticket.should_receive(:connection).twice.and_return(@mock_connection)
399
+ end
400
+
401
+ it 'should be able to update a ticket' do
402
+ @mock_connection.should_receive(:post).with('uri/REST/1.0/ticket/1/edit', {:content => @post_data}).and_return("RT/3.6.6 200 Ok\n\n# Ticket 267783 updated.")
403
+ ticket = Roart::Ticket.send(:instantiate, @payload.update(:id => 1))
404
+ ticket.subject = 'An Old Ticket'
405
+ ticket.save.should == true
406
+ end
407
+
408
+ it 'should keep the same id' do
409
+ @mock_connection.should_receive(:post).with('uri/REST/1.0/ticket/1/edit', {:content => @post_data}).and_return("RT/3.6.6 200 Ok\n\n# Ticket 267783 updated.")
410
+ ticket = Roart::Ticket.send(:instantiate, @payload.update(:id => 1))
411
+ ticket.subject = 'An Old Ticket'
412
+ ticket.save
413
+ ticket.id.should == 1
414
+ end
415
+
416
+ it 'should save the ticket' do
417
+ @mock_connection.should_receive(:post).with('uri/REST/1.0/ticket/1/edit', {:content => @post_data}).and_return("RT/3.6.6 200 Ok\n\n# Ticket 267783 updated.")
418
+ ticket = Roart::Ticket.send(:instantiate, @payload.update(:id => 1))
419
+ ticket.subject = 'An Old Ticket'
420
+ ticket.save
421
+ ticket.subject.should == 'An Old Ticket'
422
+ end
423
+
424
+ it 'should raise an error on failed save' do
425
+ @mock_connection.should_receive(:post).with('uri/REST/1.0/ticket/1/edit', {:content => @post_data}).and_return("RT/3.6.6 400 Not OK\n\n# U's A SUKKA, FOO!.")
426
+ ticket = Roart::Ticket.send(:instantiate, @payload.update(:id => 1))
427
+ ticket.subject = 'An Old Ticket'
428
+ lambda {ticket.save}.should raise_error(Roart::TicketSystemError)
429
+ end
430
+
431
+ end
432
+
433
+ end
434
+
435
+ describe 'histories' do
436
+
437
+ before(:each) do
438
+ search_array = ['1:subject']
439
+ search_array.extend(Roart::TicketPage)
440
+ full_ticket = Roart::Ticket.send(:instantiate, {:id => 1, :subject => 'subject', :full => true})
441
+ @mock_connection = mock('connection')
442
+ @mock_connection.should_receive(:get).with('uri').and_return('200')
443
+ @ticket = Roart::Ticket.send(:instantiate, search_array.to_search_array).first
444
+ @ticket.class.should_receive(:connection).and_return(@mock_connection)
445
+ Roart::History.should_receive(:uri_for).with(@ticket).and_return('uri')
446
+ end
447
+
448
+ it 'should return history objects' do
449
+ @ticket.histories.class.should == Roart::HistoryArray
450
+ end
451
+
452
+ it 'should have a default of the ticket id' do
453
+ @ticket.histories.ticket.should == @ticket
454
+ end
455
+
456
+ it 'should only spawn 1 dup class for each ticket' do
457
+ @ticket.histories.should === @ticket.histories
458
+ end
459
+
460
+ it 'should have a last history that is equal to the last value' do
461
+ @ticket.histories.last.should == @ticket.histories[@ticket.histories.size - 1]
462
+ end
463
+
464
+ it 'should have count, which is equal to size' do
465
+ @ticket.histories.count.should == @ticket.histories.size
466
+ end
467
+
468
+ end
469
+
470
+ end