diff --git a/packages/node/src/breadcrumbs/FileBreadcrumbsStorage.ts b/packages/node/src/breadcrumbs/FileBreadcrumbsStorage.ts index 07f8f865..d0d694a7 100644 --- a/packages/node/src/breadcrumbs/FileBreadcrumbsStorage.ts +++ b/packages/node/src/breadcrumbs/FileBreadcrumbsStorage.ts @@ -86,16 +86,13 @@ export class FileBreadcrumbsStorage implements BreadcrumbsStorage { public getAttachments(): BacktraceAttachment[] { const files = [...this._sink.files].map((f) => f.path.toString('utf-8')); - return files.map((f) => new BacktraceFileAttachment(f, f, this._fileSystem)); + return files.map((f) => new BacktraceFileAttachment(f, path.basename(f), this._fileSystem)); } public getAttachmentProviders(): BacktraceAttachmentProvider[] { return [ { - get: () => { - const files = [...this._sink.files].map((f) => f.path.toString('utf-8')); - return files.map((f) => new BacktraceFileAttachment(f, f, this._fileSystem)); - }, + get: () => this.getAttachments(), type: 'dynamic', }, ]; diff --git a/packages/node/tests/breadcrumbs/FileBreadcrumbsStorage.spec.ts b/packages/node/tests/breadcrumbs/FileBreadcrumbsStorage.spec.ts index a5b7d2cf..2fc66bb2 100644 --- a/packages/node/tests/breadcrumbs/FileBreadcrumbsStorage.spec.ts +++ b/packages/node/tests/breadcrumbs/FileBreadcrumbsStorage.spec.ts @@ -327,4 +327,98 @@ describe('FileBreadcrumbsStorage', () => { expect(actualMain).toEqual(expectedMain); expect(actualFallback).toEqual(expectedFallback); }); + + it('should return attachments with a valid name from getAttachments', async () => { + const fs = mockStreamFileSystem(); + const session = new SessionFiles(fs, '.', 'sessionId'); + + const breadcrumbs: RawBreadcrumb[] = [ + { + level: BreadcrumbLogLevel.Info, + message: 'a', + type: BreadcrumbType.Manual, + attributes: { + foo: 'bar', + }, + }, + { + level: BreadcrumbLogLevel.Debug, + message: 'b', + type: BreadcrumbType.Http, + }, + { + level: BreadcrumbLogLevel.Warning, + message: 'c', + type: BreadcrumbType.Navigation, + attributes: {}, + }, + ]; + + const storage = new FileBreadcrumbsStorage(session, fs, { + maximumBreadcrumbs: 4, + }); + + for (const breadcrumb of breadcrumbs) { + storage.add(breadcrumb); + await nextTick(); + } + + // FileBreadcrumbsStorage is asynchronous in nature + await nextTick(); + + const [fallbackAttachment, mainAttachment] = storage.getAttachments(); + + expect(fallbackAttachment.name).toEqual(expect.stringMatching(/^bt-breadcrumbs-0/)); + expect(mainAttachment.name).toEqual(expect.stringMatching(/^bt-breadcrumbs-1/)); + }); + + it('should return attachments with a valid name from getAttachmentProviders', async () => { + const fs = mockStreamFileSystem(); + const session = new SessionFiles(fs, '.', 'sessionId'); + + const breadcrumbs: RawBreadcrumb[] = [ + { + level: BreadcrumbLogLevel.Info, + message: 'a', + type: BreadcrumbType.Manual, + attributes: { + foo: 'bar', + }, + }, + { + level: BreadcrumbLogLevel.Debug, + message: 'b', + type: BreadcrumbType.Http, + }, + { + level: BreadcrumbLogLevel.Warning, + message: 'c', + type: BreadcrumbType.Navigation, + attributes: {}, + }, + ]; + + const storage = new FileBreadcrumbsStorage(session, fs, { + maximumBreadcrumbs: 4, + }); + + for (const breadcrumb of breadcrumbs) { + storage.add(breadcrumb); + await nextTick(); + } + + // FileBreadcrumbsStorage is asynchronous in nature + await nextTick(); + + const providers = storage.getAttachmentProviders(); + + const [fallbackAttachment, mainAttachment] = providers + .map((v) => v.get()) + .map((v) => (Array.isArray(v) ? v : [v])) + .filter((f) => !!f) + .reduce((acc, arr) => [...acc, ...arr], []); + + expect(fallbackAttachment?.name).toEqual(expect.stringMatching(/^bt-breadcrumbs-0/)); + expect(mainAttachment?.name).toEqual(expect.stringMatching(/^bt-breadcrumbs-1/)); + }); });