← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~enriqueesanchz/launchpad:add-date_deferred into launchpad:master

 

Enrique Sánchez has proposed merging ~enriqueesanchz/launchpad:add-date_deferred into launchpad:master.

Commit message:
Add date_deferred support to BugTask
    
date_deferred will be set when status changes to BugTaskStatus.DEFERRED

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~enriqueesanchz/launchpad/+git/launchpad/+merge/484952
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~enriqueesanchz/launchpad:add-date_deferred into launchpad:master.
diff --git a/lib/lp/bugs/browser/buglisting.py b/lib/lp/bugs/browser/buglisting.py
index 8adda0b..641e350 100644
--- a/lib/lp/bugs/browser/buglisting.py
+++ b/lib/lp/bugs/browser/buglisting.py
@@ -654,6 +654,7 @@ class BugTaskListingItem:
             or self.bugtask.date_inprogress
             or self.bugtask.date_left_new
             or self.bugtask.datecreated
+            or self.bugtask.date_deferred
         )
 
     @property
diff --git a/lib/lp/bugs/configure.zcml b/lib/lp/bugs/configure.zcml
index 4beb6e0..8ac1fcd 100644
--- a/lib/lp/bugs/configure.zcml
+++ b/lib/lp/bugs/configure.zcml
@@ -198,6 +198,7 @@
                     date_inprogress
                     date_left_new
                     date_triaged
+                    date_deferred
                     date_fix_committed
                     date_fix_released
                     date_left_closed
diff --git a/lib/lp/bugs/interfaces/bugtask.py b/lib/lp/bugs/interfaces/bugtask.py
index f9be6c0..e22d8d0 100644
--- a/lib/lp/bugs/interfaces/bugtask.py
+++ b/lib/lp/bugs/interfaces/bugtask.py
@@ -694,6 +694,14 @@ class IBugTask(IHasBug, IBugTaskDelete):
             required=False,
         )
     )
+    date_deferred = exported(
+        Datetime(
+            title=_("Date deferred"),
+            description=_("The date on which this task was " "deferred."),
+            readonly=True,
+            required=False,
+        )
+    )
     age = Datetime(
         title=_("Age"),
         description=_(
diff --git a/lib/lp/bugs/model/bugtask.py b/lib/lp/bugs/model/bugtask.py
index 799c8cf..d6116ce 100644
--- a/lib/lp/bugs/model/bugtask.py
+++ b/lib/lp/bugs/model/bugtask.py
@@ -470,6 +470,7 @@ class BugTask(StormBase):
         "date_fix_committed",
         "date_fix_released",
         "date_left_closed",
+        "date_deferred",
     )
     _NON_CONJOINED_STATUSES = (BugTaskStatus.WONTFIX,)
 
@@ -596,6 +597,12 @@ class BugTask(StormBase):
         default=None,
         validator=validate_conjoined_attribute,
     )
+    date_deferred = DateTime(
+        tzinfo=timezone.utc,
+        allow_none=True,
+        default=None,
+        validator=validate_conjoined_attribute,
+    )
 
     owner_id = Int(
         name="owner", allow_none=False, validator=validate_public_person
@@ -1073,6 +1080,7 @@ class BugTask(StormBase):
             self.date_triaged = None
             self.date_fix_committed = None
             self.date_fix_released = None
+            self.date_deferred = None
             return
 
         if when is None:
@@ -1116,6 +1124,13 @@ class BugTask(StormBase):
             # This task is now marked as TRIAGED
             self.date_triaged = when
 
+        if (
+            old_status < BugTaskStatus.DEFERRED
+            and new_status == BugTaskStatus.DEFERRED
+        ):
+            # This task is now marked as DEFERRED
+            self.date_deferred = when
+
         # If the new status is equal to or higher
         # than FIXCOMMITTED, we record a `date_fixcommitted`
         # to mark the fact that the task has passed
@@ -1173,6 +1188,9 @@ class BugTask(StormBase):
         if new_status < BugTaskStatus.TRIAGED:
             self.date_triaged = None
 
+        if new_status < BugTaskStatus.DEFERRED:
+            self.date_deferred = None
+
         if new_status < BugTaskStatus.FIXCOMMITTED:
             self.date_fix_committed = None
 
diff --git a/lib/lp/bugs/model/tests/test_bugtask.py b/lib/lp/bugs/model/tests/test_bugtask.py
index 2eed994..4549f0a 100644
--- a/lib/lp/bugs/model/tests/test_bugtask.py
+++ b/lib/lp/bugs/model/tests/test_bugtask.py
@@ -1969,6 +1969,7 @@ class TestConjoinedBugTasks(TestCaseWithFactory):
     * date_triaged
     * date_fix_committed
     * date_fix_released
+    * date_deferred
 
 
     XXX: rharding 2012-05-14 bug=999298: These tests are ported from doctests
@@ -2337,6 +2338,12 @@ class TestConjoinedBugTasks(TestCaseWithFactory):
             current_series_netapplet_task.date_closed,
             generic_netapplet_task.date_closed,
         )
+        self.assertIsInstance(generic_netapplet_task.date_deferred, datetime)
+        self.assertEqual(
+            current_series_netapplet_task.date_deferred,
+            generic_netapplet_task.date_deferred,
+        )
+
         # Only admin can transition from BugTaskStatus.DEFERRED
         current_series_netapplet_task.transitionToStatus(
             BugTaskStatus.FIXRELEASED, getUtility(ILaunchpadCelebrities).admin
diff --git a/lib/lp/bugs/stories/webservice/xx-bug.rst b/lib/lp/bugs/stories/webservice/xx-bug.rst
index 0aa7da2..b45bb61 100644
--- a/lib/lp/bugs/stories/webservice/xx-bug.rst
+++ b/lib/lp/bugs/stories/webservice/xx-bug.rst
@@ -458,6 +458,7 @@ data in a bug task is derived from the bug.
     date_closed: None
     date_confirmed: None
     date_created: '2004-01-04T03:49:22.790240+00:00'
+    date_deferred: None
     date_fix_committed: None
     date_fix_released: None
     date_in_progress: None