test: increase strategic coverage
This commit is contained in:
84
src/utils/noteOpenPerformance.test.ts
Normal file
84
src/utils/noteOpenPerformance.test.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import {
|
||||
beginNoteOpenTrace,
|
||||
failNoteOpenTrace,
|
||||
finishNoteOpenTrace,
|
||||
logKeyboardNavigationTrace,
|
||||
markNoteOpenTrace,
|
||||
} from './noteOpenPerformance'
|
||||
|
||||
const VITEST_WORKER_DESCRIPTOR = Object.getOwnPropertyDescriptor(globalThis, '__vitest_worker__')
|
||||
|
||||
describe('noteOpenPerformance', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
if (VITEST_WORKER_DESCRIPTOR) {
|
||||
Reflect.deleteProperty(globalThis, '__vitest_worker__')
|
||||
}
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
if (VITEST_WORKER_DESCRIPTOR) {
|
||||
Object.defineProperty(globalThis, '__vitest_worker__', VITEST_WORKER_DESCRIPTOR)
|
||||
}
|
||||
})
|
||||
|
||||
it('logs a completed note-open trace with detailed stage timing', () => {
|
||||
const debugSpy = vi.spyOn(console, 'debug').mockImplementation(() => {})
|
||||
const nowSpy = vi.spyOn(performance, 'now')
|
||||
nowSpy
|
||||
.mockReturnValueOnce(100)
|
||||
.mockReturnValueOnce(120)
|
||||
.mockReturnValueOnce(150)
|
||||
.mockReturnValueOnce(170)
|
||||
.mockReturnValueOnce(200)
|
||||
.mockReturnValueOnce(245)
|
||||
.mockReturnValueOnce(290)
|
||||
|
||||
beginNoteOpenTrace('/vault/note.md', 'sidebar')
|
||||
markNoteOpenTrace('/vault/note.md', 'beforeNavigateStart')
|
||||
markNoteOpenTrace('/vault/note.md', 'beforeNavigateEnd')
|
||||
markNoteOpenTrace('/vault/note.md', 'cacheReady')
|
||||
markNoteOpenTrace('/vault/note.md', 'contentLoadStart')
|
||||
markNoteOpenTrace('/vault/note.md', 'contentLoadEnd')
|
||||
finishNoteOpenTrace('/vault/note.md')
|
||||
|
||||
expect(debugSpy).toHaveBeenCalledWith(
|
||||
'[perf] noteOpen path=/vault/note.md source=sidebar total=190.0ms beforeNavigate=30.0ms contentLoad=45.0ms editorSwap=45.0ms cache=hit',
|
||||
)
|
||||
})
|
||||
|
||||
it('logs when an in-flight note open is superseded by another one', () => {
|
||||
const debugSpy = vi.spyOn(console, 'debug').mockImplementation(() => {})
|
||||
const nowSpy = vi.spyOn(performance, 'now')
|
||||
nowSpy
|
||||
.mockReturnValueOnce(10)
|
||||
.mockReturnValueOnce(35)
|
||||
.mockReturnValueOnce(55)
|
||||
|
||||
beginNoteOpenTrace('/vault/alpha.md', 'sidebar')
|
||||
beginNoteOpenTrace('/vault/beta.md', 'search')
|
||||
failNoteOpenTrace('/vault/beta.md', 'cleanup')
|
||||
|
||||
expect(debugSpy).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
'[perf] noteOpen cancel path=/vault/alpha.md source=sidebar total=25.0ms reason=superseded',
|
||||
)
|
||||
expect(debugSpy).toHaveBeenNthCalledWith(
|
||||
2,
|
||||
'[perf] noteOpen cancel path=/vault/beta.md source=search total=20.0ms reason=cleanup',
|
||||
)
|
||||
})
|
||||
|
||||
it('only logs keyboard traces when the list is large or slow enough', () => {
|
||||
const debugSpy = vi.spyOn(console, 'debug').mockImplementation(() => {})
|
||||
|
||||
logKeyboardNavigationTrace('down', 100, 3)
|
||||
logKeyboardNavigationTrace('up', 600, 5)
|
||||
|
||||
expect(debugSpy).toHaveBeenCalledTimes(1)
|
||||
expect(debugSpy).toHaveBeenCalledWith(
|
||||
'[perf] noteListKeyboard direction=up items=600 move=5.0ms',
|
||||
)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user