Skip to content

Commit 2e4220c

Browse files
Pass in logger (#335)
Co-authored-by: Codebuff <noreply@codebuff.com>
1 parent e0a93f6 commit 2e4220c

File tree

87 files changed

+2805
-1925
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+2805
-1925
lines changed

backend/src/__tests__/agent-registry.test.ts

Lines changed: 191 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ import type { DynamicAgentTemplate } from '@codebuff/common/types/dynamic-agent-
2626
import type { ProjectFileContext } from '@codebuff/common/util/file'
2727
import type { Logger } from '@codebuff/types/logger'
2828

29+
const logger: Logger = {
30+
debug: () => {},
31+
error: () => {},
32+
info: () => {},
33+
warn: () => {},
34+
}
35+
2936
// Create mock static templates that will be used by the agent registry
3037
const mockStaticTemplates: Record<string, AgentTemplate> = {
3138
base: {
@@ -101,16 +108,6 @@ describe('Agent Registry', () => {
101108
desc: (field: any) => ({ type: 'desc', field }),
102109
eq: (field: any, value: any) => ({ type: 'eq', field, value }),
103110
}))
104-
105-
// Mock logger
106-
mockModule('@codebuff/backend/util/logger', () => ({
107-
logger: {
108-
debug: () => {},
109-
log: () => {},
110-
error: () => {},
111-
warn: () => {},
112-
},
113-
}))
114111
})
115112
let mockFileContext: ProjectFileContext
116113

@@ -150,16 +147,6 @@ describe('Agent Registry', () => {
150147
desc: (field: any) => ({ type: 'desc', field }),
151148
eq: (field: any, value: any) => ({ type: 'eq', field, value }),
152149
}))
153-
154-
// Mock logger
155-
mockModule('@codebuff/backend/util/logger', () => ({
156-
logger: {
157-
debug: () => {},
158-
log: () => {},
159-
error: () => {},
160-
warn: () => {},
161-
},
162-
}))
163150
})
164151

165152
beforeEach(async () => {
@@ -253,33 +240,80 @@ describe('Agent Registry', () => {
253240
} as AgentTemplate,
254241
}
255242

256-
const result = await getAgentTemplate('my-agent', localAgents)
243+
const logger = {
244+
debug: () => {},
245+
info: () => {},
246+
warn: () => {},
247+
error: () => {},
248+
}
249+
const result = await getAgentTemplate({
250+
agentId: 'my-agent',
251+
localAgentTemplates: localAgents,
252+
logger,
253+
})
257254
expect(result).toBeTruthy()
258255
expect(result?.id).toBe('my-agent')
259256
})
260257

261258
it('should handle agent IDs with publisher but no version', async () => {
262-
const result = await getAgentTemplate('publisher/agent-name', {})
259+
const logger = {
260+
debug: () => {},
261+
info: () => {},
262+
warn: () => {},
263+
error: () => {},
264+
}
265+
const result = await getAgentTemplate({
266+
agentId: 'publisher/agent-name',
267+
localAgentTemplates: {},
268+
logger,
269+
})
263270
expect(result).toBeNull()
264271
})
265272

266273
it('should handle agent IDs with publisher and version', async () => {
267-
const result = await getAgentTemplate('publisher/agent-name@1.0.0', {})
274+
const logger = {
275+
debug: () => {},
276+
info: () => {},
277+
warn: () => {},
278+
error: () => {},
279+
}
280+
const result = await getAgentTemplate({
281+
agentId: 'publisher/agent-name@1.0.0',
282+
localAgentTemplates: {},
283+
logger,
284+
})
268285
expect(result).toBeNull()
269286
})
270287

271288
it('should return null for invalid agent ID formats', async () => {
272-
const result = await getAgentTemplate(
273-
'invalid/format/with/too/many/slashes',
274-
{},
275-
)
289+
const logger = {
290+
debug: () => {},
291+
info: () => {},
292+
warn: () => {},
293+
error: () => {},
294+
}
295+
const result = await getAgentTemplate({
296+
agentId: 'invalid/format/with/too/many/slashes',
297+
localAgentTemplates: {},
298+
logger,
299+
})
276300
expect(result).toBeNull()
277301
})
278302
})
279303

280304
describe('fetchAgentFromDatabase', () => {
281305
it('should return null when agent not found in database', async () => {
282-
const result = await getAgentTemplate('nonexistent/agent@1.0.0', {})
306+
const logger = {
307+
debug: () => {},
308+
info: () => {},
309+
warn: () => {},
310+
error: () => {},
311+
}
312+
const result = await getAgentTemplate({
313+
agentId: 'nonexistent/agent@1.0.0',
314+
localAgentTemplates: {},
315+
logger,
316+
})
283317
expect(result).toBeNull()
284318
})
285319

@@ -317,10 +351,17 @@ describe('Agent Registry', () => {
317351
}) as any,
318352
)
319353

320-
const result = await getAgentTemplate(
321-
'test-publisher/test-agent@1.0.0',
322-
{},
323-
)
354+
const logger = {
355+
debug: () => {},
356+
info: () => {},
357+
warn: () => {},
358+
error: () => {},
359+
}
360+
const result = await getAgentTemplate({
361+
agentId: 'test-publisher/test-agent@1.0.0',
362+
localAgentTemplates: {},
363+
logger,
364+
})
324365
expect(result).toBeTruthy()
325366
expect(result?.id).toBe('test-publisher/test-agent@1.0.0')
326367
})
@@ -347,7 +388,17 @@ describe('Agent Registry', () => {
347388
} as AgentTemplate,
348389
}
349390

350-
const result = await getAgentTemplate('test-agent', localAgents)
391+
const logger = {
392+
debug: () => {},
393+
info: () => {},
394+
warn: () => {},
395+
error: () => {},
396+
}
397+
const result = await getAgentTemplate({
398+
agentId: 'test-agent',
399+
localAgentTemplates: localAgents,
400+
logger,
401+
})
351402
expect(result).toBeTruthy()
352403
expect(result?.displayName).toBe('Local Test Agent')
353404
})
@@ -387,18 +438,20 @@ describe('Agent Registry', () => {
387438
)
388439

389440
// First call - should hit database
390-
const result1 = await getAgentTemplate(
391-
'test-publisher/cached-agent@1.0.0',
392-
{},
393-
)
441+
const result1 = await getAgentTemplate({
442+
agentId: 'test-publisher/cached-agent@1.0.0',
443+
localAgentTemplates: {},
444+
logger,
445+
})
394446
expect(result1).toBeTruthy()
395447
expect(selectSpy).toHaveBeenCalledTimes(1)
396448

397449
// Second call - should use cache
398-
const result2 = await getAgentTemplate(
399-
'test-publisher/cached-agent@1.0.0',
400-
{},
401-
)
450+
const result2 = await getAgentTemplate({
451+
agentId: 'test-publisher/cached-agent@1.0.0',
452+
localAgentTemplates: {},
453+
logger,
454+
})
402455
expect(result2).toBeTruthy()
403456
expect(result2?.displayName).toBe('Cached Agent')
404457
expect(selectSpy).toHaveBeenCalledTimes(1)
@@ -426,7 +479,13 @@ describe('Agent Registry', () => {
426479
},
427480
}
428481

429-
const result = assembleLocalAgentTemplates(fileContext)
482+
const logger = {
483+
debug: () => {},
484+
info: () => {},
485+
warn: () => {},
486+
error: () => {},
487+
}
488+
const result = assembleLocalAgentTemplates({ fileContext, logger })
430489

431490
// Should have dynamic template
432491
expect(result.agentTemplates).toHaveProperty('custom-agent')
@@ -450,7 +509,13 @@ describe('Agent Registry', () => {
450509
},
451510
}
452511

453-
const result = assembleLocalAgentTemplates(fileContext)
512+
const logger = {
513+
debug: () => {},
514+
info: () => {},
515+
warn: () => {},
516+
error: () => {},
517+
}
518+
const result = assembleLocalAgentTemplates({ fileContext, logger })
454519

455520
// Should not have invalid template
456521
expect(result.agentTemplates).not.toHaveProperty('invalid-agent')
@@ -465,7 +530,13 @@ describe('Agent Registry', () => {
465530
agentTemplates: {},
466531
}
467532

468-
const result = assembleLocalAgentTemplates(fileContext)
533+
const logger = {
534+
debug: () => {},
535+
info: () => {},
536+
warn: () => {},
537+
error: () => {},
538+
}
539+
const result = assembleLocalAgentTemplates({ fileContext, logger })
469540

470541
// Should have no validation errors
471542
expect(result.validationErrors).toHaveLength(0)
@@ -511,35 +582,83 @@ describe('Agent Registry', () => {
511582
)
512583

513584
// First call - should hit database and populate cache
514-
await getAgentTemplate('test-publisher/cache-test-agent@1.0.0', {})
585+
const logger = {
586+
debug: () => {},
587+
info: () => {},
588+
warn: () => {},
589+
error: () => {},
590+
}
591+
await getAgentTemplate({
592+
agentId: 'test-publisher/cache-test-agent@1.0.0',
593+
localAgentTemplates: {},
594+
logger,
595+
})
515596
expect(selectSpy).toHaveBeenCalledTimes(1)
516597

517598
// Second call - should use cache
518-
await getAgentTemplate('test-publisher/cache-test-agent@1.0.0', {})
599+
await getAgentTemplate({
600+
agentId: 'test-publisher/cache-test-agent@1.0.0',
601+
localAgentTemplates: {},
602+
logger,
603+
})
519604
expect(selectSpy).toHaveBeenCalledTimes(1)
520605

521606
// Clear cache
522607
clearDatabaseCache()
523608

524609
// Third call - should hit database again after cache clear
525-
await getAgentTemplate('test-publisher/cache-test-agent@1.0.0', {})
610+
await getAgentTemplate({
611+
agentId: 'test-publisher/cache-test-agent@1.0.0',
612+
localAgentTemplates: {},
613+
logger,
614+
})
526615
expect(selectSpy).toHaveBeenCalledTimes(2)
527616
})
528617
})
529618

530619
describe('edge cases', () => {
531620
it('should handle empty agent ID', async () => {
532-
const result = await getAgentTemplate('', {})
621+
const logger = {
622+
debug: () => {},
623+
info: () => {},
624+
warn: () => {},
625+
error: () => {},
626+
}
627+
const result = await getAgentTemplate({
628+
agentId: '',
629+
localAgentTemplates: {},
630+
logger,
631+
})
533632
expect(result).toBeNull()
534633
})
535634

536635
it('should handle agent ID with multiple @ symbols', async () => {
537-
const result = await getAgentTemplate('publisher/agent@1.0.0@extra', {})
636+
const logger = {
637+
debug: () => {},
638+
info: () => {},
639+
warn: () => {},
640+
error: () => {},
641+
}
642+
const result = await getAgentTemplate({
643+
agentId: 'publisher/agent@1.0.0@extra',
644+
localAgentTemplates: {},
645+
logger,
646+
})
538647
expect(result).toBeNull()
539648
})
540649

541650
it('should handle agent ID with only @ symbol', async () => {
542-
const result = await getAgentTemplate('publisher/agent@', {})
651+
const logger = {
652+
debug: () => {},
653+
info: () => {},
654+
warn: () => {},
655+
error: () => {},
656+
}
657+
const result = await getAgentTemplate({
658+
agentId: 'publisher/agent@',
659+
localAgentTemplates: {},
660+
logger,
661+
})
543662
expect(result).toBeNull()
544663
})
545664

@@ -549,7 +668,17 @@ describe('Agent Registry', () => {
549668
throw new Error('Database connection failed')
550669
})
551670

552-
const result = await getAgentTemplate('publisher/agent@1.0.0', {})
671+
const logger = {
672+
debug: () => {},
673+
info: () => {},
674+
warn: () => {},
675+
error: () => {},
676+
}
677+
const result = await getAgentTemplate({
678+
agentId: 'publisher/agent@1.0.0',
679+
localAgentTemplates: {},
680+
logger,
681+
})
553682
expect(result).toBeNull()
554683
})
555684

@@ -579,10 +708,17 @@ describe('Agent Registry', () => {
579708
}) as any,
580709
)
581710

582-
const result = await getAgentTemplate(
583-
'publisher/malformed-agent@1.0.0',
584-
{},
585-
)
711+
const logger = {
712+
debug: () => {},
713+
info: () => {},
714+
warn: () => {},
715+
error: () => {},
716+
}
717+
const result = await getAgentTemplate({
718+
agentId: 'publisher/malformed-agent@1.0.0',
719+
localAgentTemplates: {},
720+
logger,
721+
})
586722
expect(result).toBeNull()
587723
})
588724
})

backend/src/__tests__/cost-aggregation.integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ describe('Cost Aggregation Integration Tests', () => {
229229

230230
// Mock getAgentTemplate to return our mock templates
231231
spyOn(agentRegistry, 'getAgentTemplate').mockImplementation(
232-
async (agentId, localAgentTemplates) => {
232+
async ({ agentId, localAgentTemplates }) => {
233233
return localAgentTemplates[agentId] || null
234234
},
235235
)

0 commit comments

Comments
 (0)