mirror of
https://github.com/supabase/supabase.git
synced 2026-10-08 02:45:07 +03:00
38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import { Effect, Layer } from 'effect'
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
import { CurrentLocation } from './current-location'
|
|
import { ErrorReporting, ErrorReportingLive } from './error-reporting'
|
|
import { Sentry } from './sentry'
|
|
|
|
describe('ErrorReportingLive', () => {
|
|
it('attaches the current path as context and captures a tagged critical error', async () => {
|
|
const setContextCalls: Array<{ key: string; value: Record<string, unknown> }> = []
|
|
const captureCalls: Array<{ error: Error; tags: Record<string, string> }> = []
|
|
|
|
const fakeSentry = Layer.succeed(Sentry, {
|
|
setContext: (key, value) => Effect.sync(() => void setContextCalls.push({ key, value })),
|
|
captureException: (error, tags) => Effect.sync(() => void captureCalls.push({ error, tags })),
|
|
})
|
|
const fakeCurrentLocation = Layer.succeed(CurrentLocation, {
|
|
path: Effect.succeed('/project/default/explorer'),
|
|
})
|
|
|
|
await Effect.runPromise(
|
|
Effect.provide(
|
|
Effect.gen(function* () {
|
|
const reporting = yield* ErrorReporting
|
|
yield* reporting.captureCriticalError(new Error('boom'), 'test')
|
|
}),
|
|
Layer.provide(ErrorReportingLive, Layer.merge(fakeCurrentLocation, fakeSentry))
|
|
)
|
|
)
|
|
|
|
expect(setContextCalls).toEqual([{ key: 'page', value: { path: '/project/default/explorer' } }])
|
|
expect(captureCalls).toHaveLength(1)
|
|
expect(captureCalls[0].error.message).toBe('boom')
|
|
expect(captureCalls[0].error.name).toBe('CriticalError')
|
|
expect(captureCalls[0].tags).toEqual({ critical: 'true', context: 'test' })
|
|
})
|
|
})
|