@Test
 public void testWithoutPermissionAt50Percent() {
   count = 0;
   AggregateTimeTrackingCalculator calculator =
       new IssueImplAggregateTimeTrackingCalculator(
           new IssueImplAggregateTimeTrackingCalculator.PermissionChecker() {
             public boolean hasPermission(Issue subTask) {
               count++;
               if (count % 2 == 0) {
                 return false;
               }
               return true;
             }
           });
   List subTasks = new ArrayList();
   for (int i = 0; i < 10; i++) {
     subTasks.add(getIssue(ZERO_ESTIMATE, ONE_ESTIMATE, BIG_ESTIMATE, true));
   }
   AggregateTimeTrackingBean bean =
       calculator.getAggregates(getIssue(ZERO_ESTIMATE, ONE_ESTIMATE, BIG_ESTIMATE, subTasks));
   assertNotNull(bean);
   assertEquals(new Long(ZERO_ESTIMATE.longValue() * 6), bean.getRemainingEstimate());
   assertEquals(new Long(ONE_ESTIMATE.longValue() * 6), bean.getOriginalEstimate());
   assertEquals(new Long(BIG_ESTIMATE.longValue() * 6), bean.getTimeSpent());
   assertEquals(5, bean.getSubTaskCount());
 }
 @Test
 public void testIssueIsSubTaskWithNullValues() {
   AggregateTimeTrackingCalculator calculator =
       new IssueImplAggregateTimeTrackingCalculator(null, null);
   AggregateTimeTrackingBean bean = calculator.getAggregates(getIssue(null, null, null, true));
   assertNotNull(bean);
   assertNull(bean.getRemainingEstimate());
   assertNull(bean.getOriginalEstimate());
   assertNull(bean.getTimeSpent());
 }
 @Test
 public void testNoSubTasksNullParentValues() {
   AggregateTimeTrackingCalculator calculator =
       new IssueImplAggregateTimeTrackingCalculator(null, null);
   AggregateTimeTrackingBean bean =
       calculator.getAggregates(getIssue(null, null, null, Collections.EMPTY_LIST));
   assertNotNull(bean);
   assertEquals(null, bean.getRemainingEstimate());
   assertEquals(null, bean.getOriginalEstimate());
   assertEquals(null, bean.getTimeSpent());
 }
 @Test
 public void testNullSubTasksCollectionNonNullParentValues() {
   AggregateTimeTrackingCalculator calculator =
       new IssueImplAggregateTimeTrackingCalculator(null, null);
   AggregateTimeTrackingBean bean =
       calculator.getAggregates(getIssue(ZERO_ESTIMATE, ONE_ESTIMATE, BIG_ESTIMATE, null));
   assertNotNull(bean);
   assertEquals(ZERO_ESTIMATE, bean.getRemainingEstimate());
   assertEquals(ONE_ESTIMATE, bean.getOriginalEstimate());
   assertEquals(BIG_ESTIMATE, bean.getTimeSpent());
 }
 @Test
 public void testNullSubTasksNonNullParentValues() {
   AggregateTimeTrackingCalculator calculator =
       new IssueImplAggregateTimeTrackingCalculator(
           new IssueImplAggregateTimeTrackingCalculator.PermissionChecker() {
             public boolean hasPermission(Issue subTask) {
               return true;
             }
           });
   AggregateTimeTrackingBean bean =
       calculator.getAggregates(
           getIssue(
               ZERO_ESTIMATE,
               ONE_ESTIMATE,
               BIG_ESTIMATE,
               EasyList.build(
                   getIssue(null, null, null, true),
                   getIssue(null, null, null, true),
                   getIssue(null, null, null, true))));
   assertNotNull(bean);
   assertEquals(ZERO_ESTIMATE, bean.getRemainingEstimate());
   assertEquals(ONE_ESTIMATE, bean.getOriginalEstimate());
   assertEquals(BIG_ESTIMATE, bean.getTimeSpent());
 }