Skip to content

Commit 30d82b4

Browse files
DaMandal0rianclaude
andcommitted
fix: resolve all ESLint errors for CI compatibility
Fixed 15 ESLint violations identified during container-based validation: Code Quality Improvements: - Fixed empty block statements in circuit-breaker.test.ts (8 locations) Added meaningful comments explaining expected test behavior - Replaced require() usage with proper Jest mocking patterns in metrics-collector.test.ts - Removed unused variables and imports across multiple files - Replaced explicit 'any' types with proper TypeScript interfaces Type Safety Enhancements: - Changed exportData from 'any' to 'Record<string, unknown>' - Updated warmupCriticalData generic from 'any' to 'unknown' - Removed unused componentName variables and imports Testing Improvements: - Enhanced error handling patterns in test files - Added descriptive comments for expected failures in circuit breaker tests - Improved Jest mocking patterns for system module testing Container-Based CI Validation: ✅ Prettier formatting (previously completed) ✅ ESLint validation (all errors resolved) ✅ Container compatibility with Podman ✅ Clean linting validation This ensures full CI/CD pipeline compatibility and maintains high code quality standards. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent fa770b1 commit 30d82b4

File tree

12 files changed

+701
-586
lines changed

12 files changed

+701
-586
lines changed

packages/indexer-common/src/performance/__tests__/circuit-breaker.test.ts

Lines changed: 140 additions & 119 deletions
Large diffs are not rendered by default.

packages/indexer-common/src/performance/__tests__/metrics-collector.test.ts

Lines changed: 88 additions & 84 deletions
Large diffs are not rendered by default.

packages/indexer-common/src/performance/__tests__/network-cache.test.ts

Lines changed: 73 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { Logger } from '@graphprotocol/common-ts'
77
import { NetworkDataCache, CacheOptions } from '../network-cache'
8-
import { CacheError, CacheEvictionError } from '../errors'
8+
import { CacheError } from '../errors'
99

1010
const createMockLogger = (): Logger =>
1111
({
@@ -39,10 +39,10 @@ describe('NetworkDataCache', () => {
3939
describe('Basic Cache Operations', () => {
4040
it('should store and retrieve values', async () => {
4141
const testValue = { data: 'test-data' }
42-
42+
4343
cache.set('test-key', testValue)
4444
const retrieved = await cache.get('test-key')
45-
45+
4646
expect(retrieved).toEqual(testValue)
4747
})
4848

@@ -54,29 +54,27 @@ describe('NetworkDataCache', () => {
5454
it('should handle multiple concurrent gets of same key', async () => {
5555
const testValue = { data: 'concurrent-test' }
5656
cache.set('concurrent-key', testValue)
57-
58-
const promises = Array.from({ length: 10 }, () =>
59-
cache.get('concurrent-key')
60-
)
61-
57+
58+
const promises = Array.from({ length: 10 }, () => cache.get('concurrent-key'))
59+
6260
const results = await Promise.all(promises)
63-
results.forEach(result => {
61+
results.forEach((result) => {
6462
expect(result).toEqual(testValue)
6563
})
6664
})
6765

6866
it('should handle cache hits and misses correctly', async () => {
6967
const testValue = { id: 'test', value: 'data' }
7068
cache.set('hit-key', testValue)
71-
69+
7270
// Cache hit
7371
const hit = await cache.get('hit-key')
7472
expect(hit).toEqual(testValue)
75-
73+
7674
// Cache miss
7775
const miss = await cache.get('miss-key')
7876
expect(miss).toBeUndefined()
79-
77+
8078
const metrics = cache.getMetrics()
8179
expect(metrics.hits).toBe(1)
8280
expect(metrics.misses).toBe(1)
@@ -89,13 +87,13 @@ describe('NetworkDataCache', () => {
8987
cache.set('key1', { data: 'value1' })
9088
cache.set('key2', { data: 'value2' })
9189
cache.set('key3', { data: 'value3' })
92-
90+
9391
// Access key1 to make it more recently used
9492
await cache.get('key1')
95-
93+
9694
// Add new item, should evict key2 (least recently used)
9795
cache.set('key4', { data: 'value4' })
98-
96+
9997
expect(await cache.get('key1')).toBeDefined() // Most recently used
10098
expect(await cache.get('key2')).toBeUndefined() // Should be evicted
10199
expect(await cache.get('key3')).toBeDefined() // Still present
@@ -107,7 +105,7 @@ describe('NetworkDataCache', () => {
107105
for (let i = 0; i < 5; i++) {
108106
cache.set(`key${i}`, { data: `value${i}` })
109107
}
110-
108+
111109
const metrics = cache.getMetrics()
112110
expect(metrics.evictions).toBe(2) // 5 items - 3 max size = 2 evictions
113111
})
@@ -116,13 +114,13 @@ describe('NetworkDataCache', () => {
116114
// Mock eviction failure
117115
const originalDelete = cache['cache'].delete
118116
cache['cache'].delete = jest.fn().mockReturnValue(false)
119-
117+
120118
expect(() => {
121119
for (let i = 0; i < 5; i++) {
122120
cache.set(`key${i}`, { data: `value${i}` })
123121
}
124122
}).not.toThrow()
125-
123+
126124
// Restore original method
127125
cache['cache'].delete = originalDelete
128126
})
@@ -134,18 +132,18 @@ describe('NetworkDataCache', () => {
134132
ttl: 50, // 50ms TTL
135133
maxSize: 10,
136134
})
137-
135+
138136
shortTTLCache.set('expire-key', { data: 'will-expire' })
139-
137+
140138
// Should be available immediately
141139
expect(await shortTTLCache.get('expire-key')).toBeDefined()
142-
140+
143141
// Wait for expiration
144-
await new Promise(resolve => setTimeout(resolve, 100))
145-
142+
await new Promise((resolve) => setTimeout(resolve, 100))
143+
146144
// Should be expired
147145
expect(await shortTTLCache.get('expire-key')).toBeUndefined()
148-
146+
149147
shortTTLCache.dispose()
150148
})
151149

@@ -155,25 +153,25 @@ describe('NetworkDataCache', () => {
155153
maxSize: 10,
156154
cleanupInterval: 25, // Clean every 25ms
157155
})
158-
156+
159157
cleanupCache.set('cleanup-key', { data: 'test' })
160-
158+
161159
// Wait for cleanup cycle
162-
await new Promise(resolve => setTimeout(resolve, 100))
163-
160+
await new Promise((resolve) => setTimeout(resolve, 100))
161+
164162
const metrics = cleanupCache.getMetrics()
165163
expect(metrics.cleanupRuns).toBeGreaterThan(0)
166-
164+
167165
cleanupCache.dispose()
168166
})
169167

170168
it('should update TTL on cache hit', async () => {
171169
const testValue = { data: 'refresh-ttl' }
172170
cache.set('refresh-key', testValue)
173-
171+
174172
// Access the key to refresh TTL
175173
await cache.get('refresh-key')
176-
174+
177175
// Value should still be available
178176
expect(await cache.get('refresh-key')).toEqual(testValue)
179177
})
@@ -183,12 +181,12 @@ describe('NetworkDataCache', () => {
183181
it('should fetch and cache on miss', async () => {
184182
const fetchedValue = { data: 'fetched-data' }
185183
const fetcher = jest.fn().mockResolvedValue(fetchedValue)
186-
184+
187185
const result = await cache.getCachedOrFetch('fetch-key', fetcher)
188-
186+
189187
expect(result).toEqual(fetchedValue)
190188
expect(fetcher).toHaveBeenCalledTimes(1)
191-
189+
192190
// Second call should use cache
193191
const cachedResult = await cache.getCachedOrFetch('fetch-key', fetcher)
194192
expect(cachedResult).toEqual(fetchedValue)
@@ -198,24 +196,25 @@ describe('NetworkDataCache', () => {
198196
it('should handle fetcher errors', async () => {
199197
const fetchError = new Error('Fetch failed')
200198
const fetcher = jest.fn().mockRejectedValue(fetchError)
201-
202-
await expect(cache.getCachedOrFetch('error-key', fetcher))
203-
.rejects.toThrow(CacheError)
199+
200+
await expect(cache.getCachedOrFetch('error-key', fetcher)).rejects.toThrow(
201+
CacheError,
202+
)
204203
})
205204

206205
it('should not cache failed fetch results', async () => {
207-
const fetcher = jest.fn()
206+
const fetcher = jest
207+
.fn()
208208
.mockRejectedValueOnce(new Error('First failure'))
209209
.mockResolvedValueOnce({ data: 'success' })
210-
210+
211211
// First call fails
212-
await expect(cache.getCachedOrFetch('retry-key', fetcher))
213-
.rejects.toThrow()
214-
212+
await expect(cache.getCachedOrFetch('retry-key', fetcher)).rejects.toThrow()
213+
215214
// Second call succeeds and caches
216215
const result = await cache.getCachedOrFetch('retry-key', fetcher)
217216
expect(result).toEqual({ data: 'success' })
218-
217+
219218
expect(fetcher).toHaveBeenCalledTimes(2)
220219
})
221220
})
@@ -225,16 +224,16 @@ describe('NetworkDataCache', () => {
225224
// Generate various cache operations
226225
cache.set('metrics1', { data: 'value1' })
227226
cache.set('metrics2', { data: 'value2' })
228-
227+
229228
await cache.get('metrics1') // Hit
230229
await cache.get('nonexistent') // Miss
231-
230+
232231
// Trigger eviction
233232
cache.set('metrics3', { data: 'value3' })
234233
cache.set('metrics4', { data: 'value4' }) // Should evict metrics2
235-
234+
236235
const metrics = cache.getMetrics()
237-
236+
238237
expect(metrics.hits).toBe(1)
239238
expect(metrics.misses).toBe(1)
240239
expect(metrics.sets).toBe(4)
@@ -246,12 +245,12 @@ describe('NetworkDataCache', () => {
246245
it('should reset metrics on demand', async () => {
247246
cache.set('reset-key', { data: 'test' })
248247
await cache.get('reset-key')
249-
248+
250249
let metrics = cache.getMetrics()
251250
expect(metrics.hits).toBe(1)
252-
251+
253252
cache.resetMetrics()
254-
253+
255254
metrics = cache.getMetrics()
256255
expect(metrics.hits).toBe(0)
257256
expect(metrics.misses).toBe(0)
@@ -262,14 +261,14 @@ describe('NetworkDataCache', () => {
262261
// Create known hit/miss pattern
263262
cache.set('hit1', { data: 'value1' })
264263
cache.set('hit2', { data: 'value2' })
265-
264+
266265
// 2 hits, 3 misses = 2/5 = 0.4 hit rate
267266
await cache.get('hit1') // Hit
268267
await cache.get('hit2') // Hit
269268
await cache.get('miss1') // Miss
270269
await cache.get('miss2') // Miss
271270
await cache.get('miss3') // Miss
272-
271+
273272
const metrics = cache.getMetrics()
274273
expect(metrics.hitRate).toBeCloseTo(0.4)
275274
})
@@ -279,11 +278,11 @@ describe('NetworkDataCache', () => {
279278
it('should clear all entries', async () => {
280279
cache.set('clear1', { data: 'value1' })
281280
cache.set('clear2', { data: 'value2' })
282-
281+
283282
expect(cache.getMetrics().size).toBe(2)
284-
283+
285284
cache.clear()
286-
285+
287286
expect(cache.getMetrics().size).toBe(0)
288287
expect(await cache.get('clear1')).toBeUndefined()
289288
expect(await cache.get('clear2')).toBeUndefined()
@@ -292,21 +291,21 @@ describe('NetworkDataCache', () => {
292291
it('should delete specific entries', async () => {
293292
cache.set('delete-key', { data: 'to-delete' })
294293
cache.set('keep-key', { data: 'to-keep' })
295-
294+
296295
const deleted = cache.delete('delete-key')
297296
expect(deleted).toBe(true)
298-
297+
299298
expect(await cache.get('delete-key')).toBeUndefined()
300299
expect(await cache.get('keep-key')).toBeDefined()
301-
300+
302301
// Deleting non-existent key
303302
const notDeleted = cache.delete('non-existent')
304303
expect(notDeleted).toBe(false)
305304
})
306305

307306
it('should check key existence', () => {
308307
cache.set('exists-key', { data: 'exists' })
309-
308+
310309
expect(cache.has('exists-key')).toBe(true)
311310
expect(cache.has('non-existent')).toBe(false)
312311
})
@@ -316,7 +315,7 @@ describe('NetworkDataCache', () => {
316315
it('should handle memory pressure gracefully', () => {
317316
// Simulate memory-intensive cache operations
318317
const largeData = { data: 'x'.repeat(10000) }
319-
318+
320319
expect(() => {
321320
for (let i = 0; i < 100; i++) {
322321
cache.set(`large-${i}`, { ...largeData, id: i })
@@ -326,30 +325,30 @@ describe('NetworkDataCache', () => {
326325

327326
it('should handle concurrent modifications safely', async () => {
328327
const operations = []
329-
328+
330329
// Concurrent sets
331330
for (let i = 0; i < 50; i++) {
332331
operations.push(
333-
new Promise<void>(resolve => {
332+
new Promise<void>((resolve) => {
334333
cache.set(`concurrent-${i}`, { data: `value-${i}` })
335334
resolve()
336-
})
335+
}),
337336
)
338337
}
339-
338+
340339
// Concurrent gets
341340
for (let i = 0; i < 50; i++) {
342341
operations.push(cache.get(`concurrent-${i}`))
343342
}
344-
343+
345344
await expect(Promise.all(operations)).resolves.not.toThrow()
346345
})
347346

348347
it('should dispose resources properly', () => {
349348
const disposeSpy = jest.spyOn(cache, 'dispose')
350-
349+
351350
cache.dispose()
352-
351+
353352
expect(disposeSpy).toHaveBeenCalled()
354353
expect(logger.info).toHaveBeenCalledWith('NetworkDataCache disposed')
355354
})
@@ -361,12 +360,12 @@ describe('NetworkDataCache', () => {
361360
ttl: 100,
362361
maxSize: 5,
363362
})
364-
363+
365364
customCache.set('ttl-key', { data: 'test' })
366-
365+
367366
// Should be available within TTL
368367
expect(await customCache.get('ttl-key')).toBeDefined()
369-
368+
370369
customCache.dispose()
371370
})
372371

@@ -376,13 +375,13 @@ describe('NetworkDataCache', () => {
376375
maxSize: 10,
377376
enableMetrics: false,
378377
})
379-
378+
380379
noMetricsCache.set('no-metrics', { data: 'test' })
381-
380+
382381
const metrics = noMetricsCache.getMetrics()
383382
expect(typeof metrics).toBe('object')
384-
383+
385384
noMetricsCache.dispose()
386385
})
387386
})
388-
})
387+
})

0 commit comments

Comments
 (0)