@@ -42,70 +42,94 @@ describe('Enhanced Context Timeline Handler Integration Tests', () => {
4242 function createTestDataWithTimeline ( ) {
4343 const now = new Date ( ) ;
4444
45+ // Create fixed dates that span proper calendar days to ensure predictable grouping
46+ // Use noon time to avoid timezone/midnight boundary issues
47+ const today = new Date ( now . getFullYear ( ) , now . getMonth ( ) , now . getDate ( ) , 12 , 0 , 0 ) ;
48+ const yesterday = new Date ( today . getTime ( ) - 24 * 60 * 60 * 1000 ) ;
49+ const threeDaysAgo = new Date ( today . getTime ( ) - 3 * 24 * 60 * 60 * 1000 ) ;
50+ const fiveDaysAgo = new Date ( today . getTime ( ) - 5 * 24 * 60 * 60 * 1000 ) ;
51+ const sevenDaysAgo = new Date ( today . getTime ( ) - 7 * 24 * 60 * 60 * 1000 ) ;
52+
4553 // Create items across different time periods
4654 const items = [
47- // Today - 6 items
48- { time : new Date ( now . getTime ( ) - 1 * 60 * 60 * 1000 ) , category : 'task' , priority : 'high' } ,
49- { time : new Date ( now . getTime ( ) - 2 * 60 * 60 * 1000 ) , category : 'task' , priority : 'normal' } ,
50- { time : new Date ( now . getTime ( ) - 3 * 60 * 60 * 1000 ) , category : 'note' , priority : 'normal' } ,
55+ // Today - 6 items (all at noon on same day)
56+ { time : new Date ( today . getTime ( ) + 1 * 60 * 60 * 1000 ) , category : 'task' , priority : 'high' } ,
57+ {
58+ time : new Date ( today . getTime ( ) + 2 * 60 * 60 * 1000 ) ,
59+ category : 'task' ,
60+ priority : 'normal' ,
61+ } ,
5162 {
52- time : new Date ( now . getTime ( ) - 4 * 60 * 60 * 1000 ) ,
63+ time : new Date ( today . getTime ( ) + 3 * 60 * 60 * 1000 ) ,
64+ category : 'note' ,
65+ priority : 'normal' ,
66+ } ,
67+ {
68+ time : new Date ( today . getTime ( ) + 4 * 60 * 60 * 1000 ) ,
5369 category : 'decision' ,
5470 priority : 'high' ,
5571 } ,
5672 {
57- time : new Date ( now . getTime ( ) - 5 * 60 * 60 * 1000 ) ,
73+ time : new Date ( today . getTime ( ) + 5 * 60 * 60 * 1000 ) ,
5874 category : 'progress' ,
5975 priority : 'normal' ,
6076 } ,
61- { time : new Date ( now . getTime ( ) - 6 * 60 * 60 * 1000 ) , category : 'task' , priority : 'low' } ,
77+ { time : new Date ( today . getTime ( ) + 6 * 60 * 60 * 1000 ) , category : 'task' , priority : 'low' } ,
6278
63- // Yesterday - 3 items
64- { time : new Date ( now . getTime ( ) - 26 * 60 * 60 * 1000 ) , category : 'task' , priority : 'high' } ,
65- { time : new Date ( now . getTime ( ) - 28 * 60 * 60 * 1000 ) , category : 'note' , priority : 'normal' } ,
79+ // Yesterday - 3 items (all on previous day)
6680 {
67- time : new Date ( now . getTime ( ) - 30 * 60 * 60 * 1000 ) ,
81+ time : new Date ( yesterday . getTime ( ) + 1 * 60 * 60 * 1000 ) ,
82+ category : 'task' ,
83+ priority : 'high' ,
84+ } ,
85+ {
86+ time : new Date ( yesterday . getTime ( ) + 2 * 60 * 60 * 1000 ) ,
87+ category : 'note' ,
88+ priority : 'normal' ,
89+ } ,
90+ {
91+ time : new Date ( yesterday . getTime ( ) + 3 * 60 * 60 * 1000 ) ,
6892 category : 'progress' ,
6993 priority : 'low' ,
7094 } ,
7195
7296 // 3 days ago - 1 item
7397 {
74- time : new Date ( now . getTime ( ) - 72 * 60 * 60 * 1000 ) ,
98+ time : new Date ( threeDaysAgo . getTime ( ) + 1 * 60 * 60 * 1000 ) ,
7599 category : 'decision' ,
76100 priority : 'high' ,
77101 } ,
78102
79103 // 5 days ago - 2 items
80104 {
81- time : new Date ( now . getTime ( ) - 120 * 60 * 60 * 1000 ) ,
105+ time : new Date ( fiveDaysAgo . getTime ( ) + 1 * 60 * 60 * 1000 ) ,
82106 category : 'task' ,
83107 priority : 'normal' ,
84108 } ,
85109 {
86- time : new Date ( now . getTime ( ) - 121 * 60 * 60 * 1000 ) ,
110+ time : new Date ( fiveDaysAgo . getTime ( ) + 2 * 60 * 60 * 1000 ) ,
87111 category : 'note' ,
88112 priority : 'normal' ,
89113 } ,
90114
91- // 7 days ago - 4 items
115+ // 7 days ago - 4 items (all on same day)
92116 {
93- time : new Date ( now . getTime ( ) - 168 * 60 * 60 * 1000 ) ,
117+ time : new Date ( sevenDaysAgo . getTime ( ) + 1 * 60 * 60 * 1000 ) ,
94118 category : 'progress' ,
95119 priority : 'high' ,
96120 } ,
97121 {
98- time : new Date ( now . getTime ( ) - 169 * 60 * 60 * 1000 ) ,
122+ time : new Date ( sevenDaysAgo . getTime ( ) + 2 * 60 * 60 * 1000 ) ,
99123 category : 'task' ,
100124 priority : 'normal' ,
101125 } ,
102126 {
103- time : new Date ( now . getTime ( ) - 170 * 60 * 60 * 1000 ) ,
127+ time : new Date ( sevenDaysAgo . getTime ( ) + 3 * 60 * 60 * 1000 ) ,
104128 category : 'decision' ,
105129 priority : 'low' ,
106130 } ,
107131 {
108- time : new Date ( now . getTime ( ) - 171 * 60 * 60 * 1000 ) ,
132+ time : new Date ( sevenDaysAgo . getTime ( ) + 4 * 60 * 60 * 1000 ) ,
109133 category : 'note' ,
110134 priority : 'normal' ,
111135 } ,
@@ -161,8 +185,8 @@ describe('Enhanced Context Timeline Handler Integration Tests', () => {
161185 minItemsPerPeriod : 0 ,
162186 } ) ;
163187
164- // Should include all 7 periods that have data
165- expect ( timeline . length ) . toBe ( 7 ) ;
188+ // Should include all 6 periods that have data (Today, Yesterday, 3 days ago, 5 days ago, 7 days ago spread across calendar days)
189+ expect ( timeline . length ) . toBe ( 6 ) ;
166190 } ) ;
167191
168192 it ( 'should handle negative minItemsPerPeriod by treating as 0' , ( ) => {
@@ -173,7 +197,7 @@ describe('Enhanced Context Timeline Handler Integration Tests', () => {
173197 } ) ;
174198
175199 // Should include all periods (same as 0)
176- expect ( timeline . length ) . toBe ( 7 ) ;
200+ expect ( timeline . length ) . toBe ( 6 ) ;
177201 } ) ;
178202
179203 it ( 'should work with category filters and minItemsPerPeriod' , ( ) => {
0 commit comments