From: martyntaylor <[email protected]>

---
 src/app/models/task_observer.rb       |    7 ++++++-
 src/spec/models/task_observer_spec.rb |   21 +++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/src/app/models/task_observer.rb b/src/app/models/task_observer.rb
index ca11bc1..d1834c4 100644
--- a/src/app/models/task_observer.rb
+++ b/src/app/models/task_observer.rb
@@ -1,5 +1,8 @@
 class TaskObserver < ActiveRecord::Observer
-    def after_save(a_task)
+
+  END_STATES = [ Task::STATE_CANCELED, Task::STATE_FAILED, 
Task::STATE_FINISHED ]
+
+  def after_save(a_task)
     if a_task.changed?
       change = a_task.changes['state']
       if change
@@ -13,6 +16,8 @@ class TaskObserver < ActiveRecord::Observer
       a_task.time_started = Time.now
     elsif state_to == Task::STATE_PENDING
       a_task.time_submitted = Time.now
+    elsif END_STATES.include?(state_to)
+      a_task.time_ended = Time.now
     end
   end
 
diff --git a/src/spec/models/task_observer_spec.rb 
b/src/spec/models/task_observer_spec.rb
index 5d31693..98f899a 100644
--- a/src/spec/models/task_observer_spec.rb
+++ b/src/spec/models/task_observer_spec.rb
@@ -21,4 +21,25 @@ describe TaskObserver do
     @task.time_submitted.should >= @timestamp
   end
 
+    it "should set ended timestamp when the task has finished" do
+    @task.state = Task::STATE_FINISHED
+    @task.save
+
+    @task.time_ended.should >= @timestamp
+  end
+
+  it "should set ended timestamp when the task is cancelled" do
+    @task.state = Task::STATE_CANCELED
+    @task.save
+
+    @task.time_ended.should >= @timestamp
+  end
+
+  it "should set ended timestamp when the task has failed" do
+    @task.state = Task::STATE_FAILED
+    @task.save
+
+    @task.time_ended.should >= @timestamp
+  end
+
 end
\ No newline at end of file
-- 
1.6.6.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to