@@ -123,16 +123,6 @@ describe('aiWeeklySummary', () => {
123123 } ,
124124 ]
125125 // current date but in format for example yyyy-mm-ddThh:mm
126- const expectedTransactions = [
127- {
128- message : 'Test message' ,
129- amount : 100 ,
130- timestamp : date ,
131- newTotal : 100 ,
132- fromName : 'User 1' ,
133- toName : 'User 2' ,
134- } ,
135- ]
136126 const expectedTodayLeaderboard = [
137127 {
138128 toRealName : 'User 2' ,
@@ -142,7 +132,7 @@ describe('aiWeeklySummary', () => {
142132 ]
143133 const expectedToolResults = {
144134 getLastWeekLeaderboard : expectedLeaderboard ,
145- getLastWeekTransactions : expectedTransactions ,
135+ getLastWeekTransactions : [ ] ,
146136 getTodayLeaderboard : expectedTodayLeaderboard ,
147137 }
148138 // Second call: message composition
@@ -176,4 +166,160 @@ describe('aiWeeklySummary', () => {
176166 'Mocked response message'
177167 )
178168 } )
169+
170+ it ( 'should correctly filter transactions by date: last week vs this week' , async ( ) => {
171+ // Create two users
172+ const sender1 = await prisma . user . create ( {
173+ data : {
174+ username : 'sender1' ,
175+ displayName : 'Sender 1' ,
176+ realName : 'Sender 1' ,
177+ avatarUrl : 'https://example.com/avatar.png' ,
178+ timezone : 'UTC' ,
179+ isBot : false ,
180+ isActive : true ,
181+ provider : 'slack' ,
182+ providerId : 'SENDER111' ,
183+ } ,
184+ } )
185+
186+ const receiver1 = await prisma . user . create ( {
187+ data : {
188+ username : 'receiver1' ,
189+ displayName : 'Receiver 1' ,
190+ realName : 'Receiver 1' ,
191+ avatarUrl : 'https://example.com/avatar.png' ,
192+ timezone : 'UTC' ,
193+ isBot : false ,
194+ isActive : true ,
195+ provider : 'slack' ,
196+ providerId : 'RECEIVER111' ,
197+ } ,
198+ } )
199+
200+ const sender2 = await prisma . user . create ( {
201+ data : {
202+ username : 'sender2' ,
203+ displayName : 'Sender 2' ,
204+ realName : 'Sender 2' ,
205+ avatarUrl : 'https://example.com/avatar.png' ,
206+ timezone : 'UTC' ,
207+ isBot : false ,
208+ isActive : true ,
209+ provider : 'slack' ,
210+ providerId : 'SENDER222' ,
211+ } ,
212+ } )
213+
214+ const receiver2 = await prisma . user . create ( {
215+ data : {
216+ username : 'receiver2' ,
217+ displayName : 'Receiver 2' ,
218+ realName : 'Receiver 2' ,
219+ avatarUrl : 'https://example.com/avatar.png' ,
220+ timezone : 'UTC' ,
221+ isBot : false ,
222+ isActive : true ,
223+ provider : 'slack' ,
224+ providerId : 'RECEIVER222' ,
225+ } ,
226+ } )
227+
228+ // Create transaction from last week (more than 7 days ago)
229+ const lastWeekDate = new Date ( )
230+ lastWeekDate . setDate ( lastWeekDate . getDate ( ) - 8 ) // 8 days ago
231+ await prisma . transaction . create ( {
232+ data : {
233+ amount : 50 ,
234+ fromUserId : sender1 . id ,
235+ toUserId : receiver1 . id ,
236+ total : 50 ,
237+ message : 'Last week karma' ,
238+ timestamp : lastWeekDate ,
239+ fromUser : '<@SENDER111>' ,
240+ toUser : '<@RECEIVER111>' ,
241+ } ,
242+ } )
243+
244+ // Create transaction from this week (within last 7 days)
245+ const thisWeekDate = new Date ( )
246+ thisWeekDate . setDate ( thisWeekDate . getDate ( ) - 3 ) // 3 days ago
247+ await prisma . transaction . create ( {
248+ data : {
249+ amount : 100 ,
250+ fromUserId : sender2 . id ,
251+ toUserId : receiver2 . id ,
252+ total : 100 ,
253+ message : 'This week karma' ,
254+ timestamp : thisWeekDate ,
255+ fromUser : '<@SENDER222>' ,
256+ toUser : '<@RECEIVER222>' ,
257+ } ,
258+ } )
259+
260+ await aiWeeklySummary ( 'C123' , 'prompt' )
261+
262+ // Expected results: getLastWeekTransactions should include transaction from last week (8 days ago)
263+ const expectedLastWeekTransactions = [
264+ {
265+ message : 'Last week karma' ,
266+ amount : 50 ,
267+ timestamp : lastWeekDate ,
268+ newTotal : 50 ,
269+ fromName : 'Sender 1' ,
270+ toName : 'Receiver 1' ,
271+ } ,
272+ ]
273+
274+ // Expected results: getLastWeekLeaderboard should include transaction from this week (3 days ago), NOT last week
275+ const expectedLastWeekLeaderboard = [
276+ {
277+ toRealName : 'Receiver 2' ,
278+ totalReceived : 100 ,
279+ rank : 1 ,
280+ } ,
281+ ]
282+
283+ // Expected results: getTodayLeaderboard should include both transactions (all time up to today)
284+ const expectedTodayLeaderboard = [
285+ {
286+ toRealName : 'Receiver 2' ,
287+ totalReceived : 100 ,
288+ rank : 1 ,
289+ } ,
290+ {
291+ toRealName : 'Receiver 1' ,
292+ totalReceived : 50 ,
293+ rank : 2 ,
294+ } ,
295+ ]
296+
297+ const expectedToolResults = {
298+ getLastWeekLeaderboard : expectedLastWeekLeaderboard ,
299+ getLastWeekTransactions : expectedLastWeekTransactions ,
300+ getTodayLeaderboard : expectedTodayLeaderboard ,
301+ }
302+
303+ // Verify the tool results passed to OpenAI
304+ expect ( mockCreateChatCompletion ) . toHaveBeenNthCalledWith (
305+ 1 ,
306+ expect . objectContaining ( {
307+ model : 'gpt-4.1-mini' ,
308+ messages : expect . arrayContaining ( [
309+ expect . objectContaining ( {
310+ role : 'system' ,
311+ content : 'Compose a human-readable message using the provided tool data, suitable for posting in Slack.' ,
312+ } ) ,
313+ expect . objectContaining ( {
314+ role : 'user' ,
315+ content : 'prompt' ,
316+ } ) ,
317+ expect . objectContaining ( {
318+ role : 'system' ,
319+ content : 'Here are the results from the tools: ' + JSON . stringify ( expectedToolResults , null , 2 ) ,
320+ } ) ,
321+ ] ) ,
322+ } )
323+ )
324+ } )
179325} )
0 commit comments