@@ -230,6 +230,19 @@ class Agent < ActiveRecord::Base |
||
230 | 230 |
# Class Methods |
231 | 231 |
|
232 | 232 |
class << self |
233 |
+ def build_clone(original) |
|
234 |
+ new(original.slice(:type, :options, :schedule, :source_ids, :keep_events_for, :propagate_immediately)) { |clone| |
|
235 |
+ # Give it a unique name |
|
236 |
+ 2.upto(count) do |i| |
|
237 |
+ name = '%s (%d)' % [original.name, i] |
|
238 |
+ unless exists?(name: name) |
|
239 |
+ clone.name = name |
|
240 |
+ break |
|
241 |
+ end |
|
242 |
+ end |
|
243 |
+ } |
|
244 |
+ end |
|
245 |
+ |
|
233 | 246 |
def cannot_be_scheduled! |
234 | 247 |
@cannot_be_scheduled = true |
235 | 248 |
end |
@@ -514,6 +514,51 @@ describe Agent do |
||
514 | 514 |
end |
515 | 515 |
end |
516 | 516 |
end |
517 |
+ |
|
518 |
+ describe "Agent.build_clone" do |
|
519 |
+ before do |
|
520 |
+ Event.delete_all |
|
521 |
+ @sender = Agents::SomethingSource.new( |
|
522 |
+ name: 'Agent (2)', |
|
523 |
+ options: { foo: 'bar2' }, |
|
524 |
+ schedule: '5pm') |
|
525 |
+ @sender.user = users(:bob) |
|
526 |
+ @sender.save! |
|
527 |
+ @sender.create_event :payload => {} |
|
528 |
+ @sender.create_event :payload => {} |
|
529 |
+ @sender.events.count.should == 2 |
|
530 |
+ |
|
531 |
+ @receiver = Agents::CannotBeScheduled.new( |
|
532 |
+ name: 'Agent', |
|
533 |
+ options: { foo: 'bar3' }, |
|
534 |
+ keep_events_for: 3, |
|
535 |
+ propagate_immediately: true) |
|
536 |
+ @receiver.user = users(:bob) |
|
537 |
+ @receiver.sources << @sender |
|
538 |
+ @receiver.memory[:test] = 1 |
|
539 |
+ @receiver.save! |
|
540 |
+ end |
|
541 |
+ |
|
542 |
+ it "should create a clone of a given agent for editing" do |
|
543 |
+ sender_clone = users(:bob).agents.build_clone(@sender) |
|
544 |
+ |
|
545 |
+ sender_clone.attributes.should == Agent.new.attributes. |
|
546 |
+ update(@sender.slice(:user_id, :type, |
|
547 |
+ :options, :schedule, :keep_events_for, :propagate_immediately)). |
|
548 |
+ update('name' => 'Agent (2) (2)', 'options' => { 'foo' => 'bar2' }) |
|
549 |
+ |
|
550 |
+ sender_clone.source_ids.should == [] |
|
551 |
+ |
|
552 |
+ receiver_clone = users(:bob).agents.build_clone(@receiver) |
|
553 |
+ |
|
554 |
+ receiver_clone.attributes.should == Agent.new.attributes. |
|
555 |
+ update(@receiver.slice(:user_id, :type, |
|
556 |
+ :options, :schedule, :keep_events_for, :propagate_immediately)). |
|
557 |
+ update('name' => 'Agent (3)', 'options' => { 'foo' => 'bar3' }) |
|
558 |
+ |
|
559 |
+ receiver_clone.source_ids.should == [@sender.id] |
|
560 |
+ end |
|
561 |
+ end |
|
517 | 562 |
end |
518 | 563 |
|
519 | 564 |
describe ".trigger_web_request" do |