예제 #1
0
 def test_scale_weekends(self):
     chart = BurndownChart(self.env)
     # 7 days, monday -> sunday this week
     now = datetime.now(utc).date()
     day1 = now - timedelta(days=now.weekday())
     day2 = day1 + timedelta(days=1)
     day3 = day1 + timedelta(days=2)
     day4 = day1 + timedelta(days=3)
     day5 = day1 + timedelta(days=4)
     day6 = day1 + timedelta(days=5)
     day7 = day1 + timedelta(days=6)
     options = {'startdate': day1, 'enddate': day7, 'today': day7}
     timetable = {
         day1: Decimal(70),
         day2: Decimal(60),
         day3: Decimal(50),
         day4: Decimal(40),
         day5: Decimal(30),
         day6: Decimal(20),
         day7: Decimal(10)
     }
     self.assertEquals(
         chart._scale_data(timetable, options),
         (['0.00', '16.67', '33.33', '50.00', '66.67', '83.33', '100.00'], [
             '100.00', '85.71', '71.43', '57.14', '42.86', '28.57', '14.29'
         ], Decimal('70')))
예제 #2
0
 def test_calculate_timetable_without_milestone(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3}
     self._insert_ticket('10')
     timetable, _ = chart._calculate_timetable(options, {}, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(10), day3: Decimal(10)})
 def test_build_empty_chart(self):
     chart = BurndownChart(self.env)
     db = self.env.get_db_cnx()
     options, query_args = parse_options(db, "milestone=milestone1, startdate=2008-02-20, enddate=2008-02-28", {})
     timetable = chart._calculate_timetable(options, query_args, self.req)
     xdata, ydata, maxhours = chart._scale_data(timetable, options)
     self.assertEqual(xdata, ['0.00', '12.50', '25.00', '37.50', '50.00', '62.50', '75.00', '87.50', '100.00'])
     self.assertEqual(ydata, ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'])
     self.assertEqual(maxhours, Decimal(100))
예제 #4
0
 def test_build_empty_chart(self):
     chart = BurndownChart(self.env)
     db = self.env.get_db_cnx()
     options, query_args = parse_options(db, "milestone=milestone1, startdate=2008-02-20, enddate=2008-02-28", {})
     timetable, _ = chart._calculate_timetable(options, query_args, self.req)
     dates = sorted(timetable.keys())
     xdata, ydata, maxhours = chart._scale_data(timetable, dates, Decimal(0), options)
     self.assertEqual(xdata, ['0.00', '12.50', '25.00', '37.50', '50.00', '62.50', '75.00', '87.50', '100.00'])
     self.assertEqual(ydata, ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'])
     self.assertEqual(maxhours, Decimal(100))
 def test_calculate_timetable_simple(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3, 'closedstates': ['closed']}
     query_args = {'milestone': "milestone1"}
     self._insert_ticket('10')
     timetable = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(10), day3: Decimal(10)})
예제 #6
0
 def test_calculate_timetable_with_gibberish_estimates(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3}
     query_args = {'milestone': "milestone1"}
     ticket1 = self._insert_ticket('10')
     self._change_ticket_estimations(ticket1, {day2: 'IGNOREME', day3:'5'})
     timetable, _ = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(10), day3: Decimal(5)})
 def test_calculate_timetable_simple(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3,
                'closedstates': ['closed']}
     query_args = {'milestone': "milestone1"}
     self._insert_ticket('10')
     timetable = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(10),
                                  day3: Decimal(10)})
 def test_url_encode(self):
     start = datetime.now(utc).date()
     end = (start + timedelta(days=5)).strftime('%Y-%m-%d')
     start = start.strftime('%Y-%m-%d')
     chart = BurndownChart(self.env)
     t = Ticket(self.env, self._insert_ticket('12'))
     result = chart.expand_macro(self.formatter, 'BurndownChart',
                     "milestone=milestone1, startdate=%s, enddate=%s" % (start, end))
     self.failUnless("&chtt=milestone1&" in str(result))
     result = chart.expand_macro(self.formatter, 'BurndownChart',
                     "milestone=One & Two, startdate=%s, enddate=%s" % (start, end))
     self.failUnless("&chtt=One+%26+Two&" in str(result))
 def test_build_empty_chart(self):
     chart = BurndownChart(self.env)
     str = "milestone=milestone1, startdate=2008-02-20, enddate=2008-02-28"
     options, query_args = parse_options(self.env, str, {})
     timetable = chart._calculate_timetable(options, query_args, self.req)
     xdata, ydata, maxhours = chart._scale_data(timetable, options)
     self.assertEqual(xdata,
                      ['0.00', '12.50', '25.00', '37.50', '50.00', '62.50',
                       '75.00', '87.50', '100.00'])
     self.assertEqual(ydata, ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00',
                              '0.00', '0.00', '0.00'])
     self.assertEqual(maxhours, Decimal(100))
예제 #10
0
 def test_calculate_timetable_with_closed_and_reopened_ticket(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     day4 = day3 + timedelta(days=1)
     options = {'today': day4, 'startdate': day1, 'enddate': day4}
     query_args = {'milestone': "milestone1"}
     ticket1 = self._insert_ticket('10')
     self._change_ticket_estimations(ticket1, {day3:'5'})
     self._change_ticket_states(ticket1, {day2: 'closed', day4: 'new'})
     timetable, _ = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(0), day3: Decimal(0), day4: Decimal(5)})
 def test_expected_y_axis(self):
     start = datetime.now(utc).date()
     end = (start + timedelta(days=5)).strftime('%Y-%m-%d')
     start = start.strftime('%Y-%m-%d')
     chart = BurndownChart(self.env)
     t = Ticket(self.env, self._insert_ticket('12'))
     # Test without expected
     result = chart.expand_macro(self.formatter, 'BurndownChart',
                     "startdate=%s, enddate=%s" % (start, end))
     self.assertEquals(self._extract_query(result)['chxr'], [u'2,0,12'])
     # Confirm Y axis changes with new higher expected
     result = chart.expand_macro(self.formatter, 'BurndownChart',
                     "startdate=%s, enddate=%s, expected=200" % (start, end))
     self.assertEquals(self._extract_query(result)['chxr'], [u'2,0,200'])
 def test_calculate_timetable_with_simple_changes_2(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3, 'closedstates': ['closed']}
     query_args = {'milestone': "milestone1"}
     ticket1 = self._insert_ticket('10')
     self._change_ticket_estimations(ticket1, {day2:'5', day3:''})
     ticket2 = self._insert_ticket('0')
     self._change_ticket_estimations(ticket2, {day2:'1', day3:'2'})
  
     timetable = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(6), day3: Decimal(2)})
예제 #13
0
 def test_url_encode(self):
     start = datetime.now(utc).date()
     end = (start + timedelta(days=5)).strftime('%Y-%m-%d')
     start = start.strftime('%Y-%m-%d')
     chart = BurndownChart(self.env)
     t = Ticket(self.env, self._insert_ticket('12'))
     result = chart.expand_macro(
         self.formatter, 'BurndownChart',
         "milestone=milestone1, startdate=%s, enddate=%s" % (start, end))
     self.failUnless("&chtt=milestone1&" in str(result))
     result = chart.expand_macro(
         self.formatter, 'BurndownChart',
         "milestone=One & Two, startdate=%s, enddate=%s" % (start, end))
     self.failUnless("&chtt=One+%26+Two&" in str(result))
예제 #14
0
 def test_expected_y_axis(self):
     start = datetime.now(utc).date()
     end = (start + timedelta(days=5)).strftime('%Y-%m-%d')
     start = start.strftime('%Y-%m-%d')
     chart = BurndownChart(self.env)
     t = Ticket(self.env, self._insert_ticket('12'))
     # Test without expected
     result = chart.expand_macro(self.formatter, 'BurndownChart',
                                 "startdate=%s, enddate=%s" % (start, end))
     self.assertEquals(self._extract_query(result)['chxr'], [u'2,0,12'])
     # Confirm Y axis changes with new higher expected
     result = chart.expand_macro(
         self.formatter, 'BurndownChart',
         "startdate=%s, enddate=%s, expected=200" % (start, end))
     self.assertEquals(self._extract_query(result)['chxr'], [u'2,0,200'])
예제 #15
0
 def test_calculate_delta_no_new_or_changed(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3, 'change': True}
     query_args = {'milestone': "milestone1"}
     ticket1 = self._insert_ticket('10')
     self._change_ticket_estimations(ticket1, {day2:'5', day3:''})
     ticket2 = self._insert_ticket('0')
     self._change_ticket_estimations(ticket2, {day2:'1', day3:'2'})
  
     timetable, delta = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(6), day3: Decimal(2)})
     self.assertEqual(delta, {day1: Decimal(0), day2: Decimal(0), day3: Decimal(0)})
예제 #16
0
    def test_url_encode_parenthesis(self):
        # http://trac-hacks.org/ticket/8299
        start = (datetime.now(utc).date() -
                 timedelta(days=1)).strftime('%Y-%m-%d')
        end = (datetime.now(utc).date() +
               timedelta(days=1)).strftime('%Y-%m-%d')
        chart = BurndownChart(self.env)

        def verify_milestone(milestone):
            t = Ticket(self.env, self._insert_ticket('12'))
            t['milestone'] = milestone
            t.save_changes('', '')
            result = chart.expand_macro(self.formatter, 'BurndownChart',
                        "milestone=%s, startdate=%s, enddate=%s" \
                        % (milestone, start, end))
            args = self._extract_query(result)
            # data
            self.assertEquals(
                (milestone, args['chd']),
                (milestone, [u't:0.00,50.00,100.00|0.00,100.00,-1']))
            # scaling / axis
            self.assertEquals((milestone, args['chxr']),
                              (milestone, [u'2,0,12']))
            # title
            self.assertEquals(args['chtt'], [milestone])

        verify_milestone('Test')
        verify_milestone('T(es)t')
        verify_milestone('(Test)')
    def test_calculate_timetable_with_simple_changes_2(self):
        chart = BurndownChart(self.env)
        day1 = datetime.now(utc).date()
        day2 = day1 + timedelta(days=1)
        day3 = day2 + timedelta(days=1)
        options = {'today': day3, 'startdate': day1, 'enddate': day3,
                   'closedstates': ['closed']}
        query_args = {'milestone': "milestone1"}
        ticket1 = self._insert_ticket('10')
        self._change_ticket_estimations(ticket1, {day2: '5', day3: ''})
        ticket2 = self._insert_ticket('0')
        self._change_ticket_estimations(ticket2, {day2: '1', day3: '2'})

        timetable = chart._calculate_timetable(options, query_args, self.req)
        self.assertEqual(timetable, {day1: Decimal(10), day2: Decimal(6),
                                     day3: Decimal(2)})
예제 #18
0
    def test_date_intervals(self):
        chart = BurndownChart(self.env)
        day1 = datetime.now(utc).date()
        day2 = day1 + timedelta(days=1)
        day3 = day2 + timedelta(days=1)
        day4 = day3 + timedelta(days=1)
        day5 = day4 + timedelta(days=1)
        options = {'today': day5, 'startdate': day1, 'enddate': day5, 'interval_days': 2}
        query_args = {'milestone': "milestone1"}
        ticket1 = self._insert_ticket('10')
        ticket2 = self._insert_ticket('5')
        self._change_ticket_estimations(ticket2, {day3:'1', day4:'2', day5:'3'})

        timetable, delta = chart._calculate_timetable(options, query_args, self.req)
        
        self.assertEqual(timetable, {day1: Decimal(15), day3: Decimal(11), day5: Decimal(13)})
        self.assertEqual(delta, {day1: Decimal(0), day3: Decimal(0), day5: Decimal(0)})
예제 #19
0
 def test_calculate_delta_with_changed_estimates(self):
     chart = BurndownChart(self.env)
     day1 = datetime.now(utc).date()
     day2 = day1 + timedelta(days=1)
     day3 = day2 + timedelta(days=1)
     options = {'today': day3, 'startdate': day1, 'enddate': day3, 'change': True}
     query_args = {'milestone': "milestone1"}
     ticket1 = self._insert_ticket('10')
     ticket2 = self._insert_ticket('5')
     self._change_ticket_initial_estimations(ticket1, {day2:'8'}) # -2
     self._change_ticket_initial_estimations(ticket2, {day3:'8'}) # +3
     import time; time.sleep(1) # Avoid time resolution problem
     self._change_ticket_estimations(ticket2, {day2:'1', day3:'2'})
  
     timetable, delta = chart._calculate_timetable(options, query_args, self.req)
     self.assertEqual(timetable, {day1: Decimal(15), day2: Decimal(11), day3: Decimal(12)})
     self.assertEqual(delta, {day1: Decimal(0), day2: Decimal(-2), day3: Decimal(3)})
 def test_scale_weekends(self):
     chart = BurndownChart(self.env)
     # 7 days, monday -> sunday this week
     now = datetime.now(utc).date()
     day1 = now - timedelta(days=now.weekday())
     day2 = day1 + timedelta(days=1)
     day3 = day1 + timedelta(days=2)
     day4 = day1 + timedelta(days=3)
     day5 = day1 + timedelta(days=4)
     day6 = day1 + timedelta(days=5)
     day7 = day1 + timedelta(days=6)
     options = {'startdate': day1, 'enddate': day7, 'today': day7}
     timetable = {day1: Decimal(70), day2: Decimal(60), day3: Decimal(50),
             day4: Decimal(40), day5: Decimal(30), day6: Decimal(20),
             day7: Decimal(10)}
     self.assertEquals(chart._scale_data(timetable, options),
            (['0.00', '16.67', '33.33', '50.00', '66.67', '83.33', '100.00'],
             ['100.00', '85.71', '71.43', '57.14', '42.86', '28.57', '14.29'],
             Decimal('70')))
 def test_scale_no_weekends(self):
     chart = BurndownChart(self.env)
     # 7 days, monday -> friday this week
     now = datetime.now(utc).date()
     day1 = now - timedelta(days=now.weekday())
     day2 = day1 + timedelta(days=1)
     day3 = day1 + timedelta(days=2)
     day4 = day1 + timedelta(days=3)
     day5 = day1 + timedelta(days=4)
     day6 = day1 + timedelta(days=5)
     day7 = day1 + timedelta(days=6)
     options = {'startdate': day1, 'enddate': day7, 'today': day7}
     # no weekends option, so day6 and day7 not included
     timetable = {day1: Decimal(70), day2: Decimal(60), day3: Decimal(50),
                  day4: Decimal(40), day5: Decimal(30)}
     self.assertEquals(chart._scale_data(timetable, options),
                       (['0.00', '25.00', '50.00', '75.00', '100.00'],
                        ['100.00', '85.71', '71.43', '57.14', '42.86'],
                        Decimal('70')))
예제 #22
0
 def test_build_zero_day_chart(self):
     chart = BurndownChart(self.env)
     # shouldn't throw
     chart.expand_macro(self.formatter, "",
                        "startdate=2008-01-01, enddate=2008-01-01")
예제 #23
0
 def test_build_zero_day_chart(self):
     chart = BurndownChart(self.env)
     # shouldn't throw
     chart.render_macro(self.req, "", "startdate=2008-01-01, enddate=2008-01-01")
 def test_build_zero_day_chart(self):
     chart = BurndownChart(self.env)
     # shouldn't throw
     chart.expand_macro(self.formatter, "",
                        "startdate=2008-01-01, enddate=2008-01-01")