Skip to content

Commit f5c8af8

Browse files
committed
fix: queries and include test to validate assumption
1 parent 1657785 commit f5c8af8

2 files changed

Lines changed: 158 additions & 14 deletions

File tree

app/_lib/_db/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,11 @@ export async function getLastWeekTransactions(): Promise<LastWeekTransaction[]>
148148
FROM "Transaction" t
149149
JOIN "User" u_from ON u_from.id = t."fromUserId"
150150
JOIN "User" u_to ON u_to.id = t."toUserId"
151-
WHERE t.timestamp >= datetime('now', '-7 days')
151+
WHERE t.timestamp <= datetime('now', '-7 days')
152152
AND u_from.realName IS NOT NULL
153153
AND u_to.realName IS NOT NULL
154154
ORDER BY t.timestamp DESC
155155
`
156-
157156
return result
158157
}
159158

@@ -181,7 +180,6 @@ export async function getLastWeekLeaderboard(): Promise<LeaderboardEntry[]> {
181180
WHERE u.realName IS NOT NULL
182181
ORDER BY q.rank ASC
183182
`
184-
185183
return result.map(entry => ({
186184
...entry,
187185
totalReceived: Number(entry.totalReceived),

tests/e2e/aiWeeklySummary/aiWeeklySummary.spec.ts

Lines changed: 157 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)