Skip to content
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
### Fixes

- The SDK now logs a `Warning` instead of an `Error` when being ratelimited ([#4927](https://github.com/getsentry/sentry-dotnet/pull/4927))
- Common tags such as `Environment` and `Release` are now correctly applied to CaptureFeedback events ([#4942](https://github.com/getsentry/sentry-dotnet/pull/4942))

## 6.2.0-alpha.0

Expand Down
11 changes: 9 additions & 2 deletions src/Sentry/SentryClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,19 @@ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResu
evt.Level = scope.Level;
}

if (SentryEventHelper.ProcessEvent(evt, scope.GetAllEventProcessors(), hint, _options) is not { } processedEvent)
{
_options.LogWarning("Feedback dropped by event processor");
result = CaptureFeedbackResult.UnknownError;
return SentryId.Empty; // Dropped by an event processor
}

var attachments = hint.Attachments.ToList();
var envelope = Envelope.FromFeedback(evt, _options.DiagnosticLogger, attachments, scope.SessionUpdate);
var envelope = Envelope.FromFeedback(processedEvent, _options.DiagnosticLogger, attachments, scope.SessionUpdate);
if (CaptureEnvelope(envelope))
{
result = CaptureFeedbackResult.Success;
return evt.EventId;
return processedEvent.EventId;
}
result = CaptureFeedbackResult.UnknownError;
return SentryId.Empty;
Expand Down
32 changes: 32 additions & 0 deletions test/Sentry.Tests/SentryClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,38 @@ public void CaptureFeedback_WithScope_ScopeCopiedToEvent()
Assert.Equal(scope.Breadcrumbs, @event.Breadcrumbs);
}

[Fact]
public void CaptureFeedback_EventProcessorApplied()
{
//Arrange
var feedback = new SentryFeedback("Everything is great!");
var eventProcessor = Substitute.For<ISentryEventProcessor>();
eventProcessor.Process(Arg.Any<SentryEvent>()).Returns(e =>
{
var evt = (SentryEvent)e[0];
evt.Environment = "testing 123";
return evt;
});
_fixture.SentryOptions.AddEventProcessor(eventProcessor);
var sut = _fixture.GetSut();

Envelope envelope = null;
sut.Worker.When(w => w.EnqueueEnvelope(Arg.Any<Envelope>()))
.Do(callback => envelope = callback.Arg<Envelope>());

//Act
var result = sut.CaptureFeedback(feedback);

//Assert
result.Should().NotBe(SentryId.Empty);
_ = sut.Worker.Received(1).EnqueueEnvelope(Arg.Any<Envelope>());
envelope.Should().NotBeNull();
envelope.Items.Should().Contain(item => item.TryGetType() == EnvelopeItem.TypeValueFeedback);
var item = envelope.Items.First(x => x.TryGetType() == EnvelopeItem.TypeValueFeedback);
var @event = (SentryEvent)((JsonSerializable)item.Payload).Source;
@event.Environment.Should().Be("testing 123");
}

[Fact]
public void CaptureFeedback_WithHint_HasHintAttachment()
{
Expand Down
Loading