def test_can_have_two_markers(self):
     changes = [
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
     ]
     aggregated = self.aggregate(changes, interval=timedelta(hours=1))
     self.assert_length(2, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(0, aggregated[1].remaining_time)
Example #2
0
    def _record_value_change(self, sprint, point_change, component=None, fieldname=Key.REMAINING_TIME):
        if fieldname == Key.STORY_POINTS:
            change = BurndownDataChange.remaining_points_entry(self.env, point_change, sprint, now())
        else:
            change = BurndownDataChange.remaining_time_entry(self.env, point_change, sprint, now())

        if component is not None and AgiloConfig(self.env).is_filtered_burndown_enabled():
            change.update_marker(Key.COMPONENT, component)
        change.save()
 def change(self, time_delta, how_much, type=None, scope=None, marker_key=None, marker_value=True):
     instance = BurndownDataChange(self.env).update_values(
         type= type or BurndownDataConstants.REMAINING_TIME,
         scope=getattr(scope, 'name', self.sprint.name),
         when= now() + time_delta,
         delta=how_much,
     )
     if marker_key is not None:
         instance.update_marker(marker_key, marker_value)
     return instance
 def test_only_changes_surrounded_with_markers_(self):
     changes = [
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         self.change(timedelta(), 10),
         self.change(timedelta(), 10),
         self.change(timedelta(), 10),
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
     ]
     aggregated = self.aggregate(changes, interval=timedelta(hours=1))
     self.assert_length(2, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(30, aggregated[1].remaining_time)
 def test_can_have_normal_intersection_of_entries(self):
     changes = [
         self.change(timedelta(minutes=-1), 10),
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         self.change(timedelta(), 10),
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(4, aggregated)
     self.assert_equals(10, aggregated[0].remaining_time)
     self.assert_equals(10, aggregated[1].remaining_time)
     self.assert_equals(20, aggregated[2].remaining_time) # this is the jump
     self.assert_equals(30, aggregated[3].remaining_time)
Example #6
0
 def test_only_changes_surrounded_with_markers_(self):
     changes = [
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
         self.change(timedelta(), 10),
         self.change(timedelta(), 10),
         self.change(timedelta(), 10),
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
     ]
     aggregated = self.aggregate(changes, interval=timedelta(hours=1))
     self.assert_length(2, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(30, aggregated[1].remaining_time)
Example #7
0
 def change(self,
            time_delta,
            how_much,
            type=None,
            scope=None,
            marker_key=None,
            marker_value=True):
     instance = BurndownDataChange(self.env).update_values(
         type=type or BurndownDataConstants.REMAINING_TIME,
         scope=getattr(scope, 'name', self.sprint.name),
         when=now() + time_delta,
         delta=how_much,
     )
     if marker_key is not None:
         instance.update_marker(marker_key, marker_value)
     return instance
Example #8
0
    def _record_value_change(self,
                             sprint,
                             point_change,
                             component=None,
                             fieldname=Key.REMAINING_TIME):
        if fieldname == Key.STORY_POINTS:
            change = BurndownDataChange.remaining_points_entry(
                self.env, point_change, sprint, now())
        else:
            change = BurndownDataChange.remaining_time_entry(
                self.env, point_change, sprint, now())

        if component is not None and AgiloConfig(
                self.env).is_filtered_burndown_enabled():
            change.update_marker(Key.COMPONENT, component)
        change.save()
Example #9
0
 def test_can_have_normal_intersection_of_entries(self):
     changes = [
         self.change(timedelta(minutes=-1), 10),
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
         self.change(timedelta(), 10),
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(4, aggregated)
     self.assert_equals(10, aggregated[0].remaining_time)
     self.assert_equals(10, aggregated[1].remaining_time)
     self.assert_equals(20,
                        aggregated[2].remaining_time)  # this is the jump
     self.assert_equals(30, aggregated[3].remaining_time)
 def create_change(self, delta=23, marker_key=None, marker_value=None, **kwargs):
     change = BurndownDataChange(self.env)
     change.type = BurndownDataConstants.REMAINING_TIME
     change.scope = self.sprint.name
     change.when = now()
     change.set_delta(delta)
     for key, value in kwargs.items():
         setattr(change, key, value)
     if marker_key is not None:
         change.update_marker(marker_key, marker_value)
     return change
Example #11
0
 def create_change(self,
                   delta=23,
                   marker_key=None,
                   marker_value=None,
                   **kwargs):
     change = BurndownDataChange(self.env)
     change.type = BurndownDataConstants.REMAINING_TIME
     change.scope = self.sprint.name
     change.when = now()
     change.set_delta(delta)
     for key, value in kwargs.items():
         setattr(change, key, value)
     if marker_key is not None:
         change.update_marker(marker_key, marker_value)
     return change
Example #12
0
 def test_can_have_skip_marker_as_first_entry(self):
     changes = [
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
         self.change(timedelta(minutes=30), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(2, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(20, aggregated[1].remaining_time)
Example #13
0
 def test_can_have_skip_marker_as_first_entry(self):
     changes = [
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
         self.change(timedelta(minutes=30), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(2, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(20, aggregated[1].remaining_time)
Example #14
0
 def test_can_add_additional_points_when_agregation_is_disabled_with_marker(self):
     changes = [
         self.change(timedelta(minutes=-30), 0),
         self.change(timedelta(minutes=-1), 10),
         BurndownDataChange.create_aggregation_skip_marker(self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
         self.change(timedelta(minutes=30), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(3, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(10, aggregated[1].remaining_time)
     self.assert_equals(30, aggregated[2].remaining_time)
Example #15
0
 def test_can_add_additional_points_when_agregation_is_disabled_with_marker(
         self):
     changes = [
         self.change(timedelta(minutes=-30), 0),
         self.change(timedelta(minutes=-1), 10),
         BurndownDataChange.create_aggregation_skip_marker(
             self.env, self.sprint_name()),
         self.change(timedelta(minutes=1), 10),
         self.change(timedelta(minutes=30), 10),
     ]
     aggregated = self.aggregate(changes)
     self.assert_length(3, aggregated)
     self.assert_equals(0, aggregated[0].remaining_time)
     self.assert_equals(10, aggregated[1].remaining_time)
     self.assert_equals(30, aggregated[2].remaining_time)
Example #16
0
    def _add_marker_if_neccessary(self, sprint_name):
        if sprint_name is None:
            return

        BurndownDataChange.create_aggregation_skip_marker(
            self.env, sprint_name).save()
Example #17
0
    def _add_marker_if_neccessary(self, sprint_name):
        if sprint_name is None:
            return

        BurndownDataChange.create_aggregation_skip_marker(self.env, sprint_name).save()