diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cb5f0c695..0dec4e59c2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- `BreadcrumbLevel.Critical` has been renamed to `BreadcrumbLevel.Fatal` for consistency with the other Sentry SDKs ([#4605](https://github.com/getsentry/sentry-dotnet/pull/4605))
- SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device ([#4606](https://github.com/getsentry/sentry-dotnet/pull/4606))
- Remove unnecessary files from SentryCocoaFramework before packing ([#4602](https://github.com/getsentry/sentry-dotnet/pull/4602))
+- CaptureFeedback now returns a `SentryId` and a `CaptureFeedbackResult` out parameter that indicate whether feedback was captured successfully and what the reason for failure was otherwise ([#4613](https://github.com/getsentry/sentry-dotnet/pull/4613))
- Removed obsolete APIs ([#4619](https://github.com/getsentry/sentry-dotnet/pull/4619))
- Removed the unusual constructor from `Sentry.Maui.BreadcrumbEvent` that had been marked as obsolete. That constructor expected a `IEnumerable<(string Key, string Value)>[]` argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples: `IEnumerable<(string Key, string Value)>`.
- Removed `SentrySdk.CaptureUserFeedback` and all associated members. Use the newer `SentrySdk.CaptureFeedback` instead.
diff --git a/src/Sentry/CaptureFeedbackErrorReason.cs b/src/Sentry/CaptureFeedbackErrorReason.cs
new file mode 100644
index 0000000000..728a7b1b47
--- /dev/null
+++ b/src/Sentry/CaptureFeedbackErrorReason.cs
@@ -0,0 +1,43 @@
+namespace Sentry;
+
+///
+/// Result code for requests
+///
+public enum CaptureFeedbackResult
+{
+ ///
+ /// Feedback captured successfully.
+ ///
+ Success,
+ ///
+ ///
+ /// An unknown error occurred (enable debug mode and check the logs for details).
+ ///
+ ///
+ /// Possible causes:
+ ///
+ /// -
+ /// An exception from the configureScope callback
+ ///
+ /// -
+ /// An error when sending the envelope
+ ///
+ /// -
+ /// An attempt to send feedback while the application is shutting down
+ ///
+ /// -
+ /// Something more mysterious...
+ ///
+ ///
+ ///
+ ///
+ UnknownError,
+ ///
+ /// Capture failed because Sentry is disabled (very likely an empty DSN was provided when initialising the SDK).
+ ///
+ DisabledHub,
+ ///
+ /// Capture failed because the message is empty.
+ ///
+ EmptyMessage,
+}
diff --git a/src/Sentry/Extensibility/DisabledHub.cs b/src/Sentry/Extensibility/DisabledHub.cs
index 30d2eefffa..059e5595a1 100644
--- a/src/Sentry/Extensibility/DisabledHub.cs
+++ b/src/Sentry/Extensibility/DisabledHub.cs
@@ -176,15 +176,21 @@ public bool CaptureEnvelope(Envelope envelope)
///
/// No-Op.
///
- public void CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Action configureScope, SentryHint? hint = null)
{
+ result = CaptureFeedbackResult.DisabledHub;
+ return SentryId.Empty;
}
///
/// No-Op.
///
- public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Scope? scope = null, SentryHint? hint = null)
{
+ result = CaptureFeedbackResult.DisabledHub;
+ return SentryId.Empty;
}
///
diff --git a/src/Sentry/Extensibility/HubAdapter.cs b/src/Sentry/Extensibility/HubAdapter.cs
index 25eb86800c..83deacbf0a 100644
--- a/src/Sentry/Extensibility/HubAdapter.cs
+++ b/src/Sentry/Extensibility/HubAdapter.cs
@@ -260,16 +260,18 @@ public SentryId CaptureEvent(SentryEvent evt, Scope? scope, SentryHint? hint = n
///
[DebuggerStepThrough]
[EditorBrowsable(EditorBrowsableState.Never)]
- public void CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
- => SentrySdk.CaptureFeedback(feedback, configureScope, hint);
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Action configureScope, SentryHint? hint = null)
+ => SentrySdk.CaptureFeedback(feedback, out result, configureScope, hint);
///
/// Forwards the call to .
///
[DebuggerStepThrough]
[EditorBrowsable(EditorBrowsableState.Never)]
- public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
- => SentrySdk.CaptureFeedback(feedback, scope, hint);
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result, Scope? scope = null,
+ SentryHint? hint = null)
+ => SentrySdk.CaptureFeedback(feedback, out result, scope, hint);
///
/// Forwards the call to .
diff --git a/src/Sentry/HubExtensions.cs b/src/Sentry/HubExtensions.cs
index eb233b2644..4414c34a64 100644
--- a/src/Sentry/HubExtensions.cs
+++ b/src/Sentry/HubExtensions.cs
@@ -206,6 +206,22 @@ internal static SentryId CaptureExceptionInternal(this IHub hub, Exception ex) =
public static SentryId CaptureException(this IHub hub, Exception ex, Action configureScope) =>
hub.CaptureEvent(new SentryEvent(ex), configureScope);
+ ///
+ /// Captures feedback from the user.
+ ///
+ /// The Sentry hub.
+ /// The feedback to send to Sentry.
+ /// Callback method to configure the scope.
+ ///
+ /// An optional hint providing high-level context for the source of the event, including attachments
+ ///
+ ///
+ /// A that will contain the Id of the new event (if successful) or
+ /// otherwise
+ ///
+ public static SentryId CaptureFeedback(this IHub hub, SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
+ => hub.CaptureFeedback(feedback, out _, configureScope, hint);
+
///
/// Captures a message with a configurable scope callback.
///
diff --git a/src/Sentry/IHub.cs b/src/Sentry/IHub.cs
index 8c3006c149..6ae02d5328 100644
--- a/src/Sentry/IHub.cs
+++ b/src/Sentry/IHub.cs
@@ -133,7 +133,15 @@ public TransactionContext ContinueTrace(
/// Captures feedback from the user.
///
/// The feedback to send to Sentry.
+ /// A indicating either success or a specific error
/// Callback method to configure the scope.
- /// An optional hint providing high level context for the source of the event, including attachments
- public void CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null);
+ ///
+ /// An optional hint providing high-level context for the source of the event, including attachments
+ ///
+ ///
+ /// A that will contain the Id of the new event (if successful) or
+ /// otherwise
+ ///
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result, Action configureScope,
+ SentryHint? hint = null);
}
diff --git a/src/Sentry/ISentryClient.cs b/src/Sentry/ISentryClient.cs
index ae8f93dc0c..b3d87f0f0b 100644
--- a/src/Sentry/ISentryClient.cs
+++ b/src/Sentry/ISentryClient.cs
@@ -32,9 +32,17 @@ public interface ISentryClient
/// Captures feedback from the user.
///
/// The feedback to send to Sentry.
- /// An optional scope to be applied to the event.
- /// An optional hint providing high level context for the source of the event
- public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null);
+ /// A indicating either success or a specific error
+ /// An optional scope to be applied to the feedback event.
+ ///
+ /// An optional hint providing high-level context for the source of the event, including attachments
+ ///
+ ///
+ /// A that will contain the Id of the new event (if successful) or
+ /// otherwise
+ ///
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result, Scope? scope = null,
+ SentryHint? hint = null);
///
/// Captures a transaction.
diff --git a/src/Sentry/Internal/Hub.cs b/src/Sentry/Internal/Hub.cs
index 2bc02c2185..252c33e131 100644
--- a/src/Sentry/Internal/Hub.cs
+++ b/src/Sentry/Internal/Hub.cs
@@ -590,11 +590,13 @@ private SentryId CaptureEvent(SentryEvent evt, SentryHint? hint, Scope scope)
}
}
- public void CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Action configureScope, SentryHint? hint = null)
{
if (!IsEnabled)
{
- return;
+ result = CaptureFeedbackResult.DisabledHub;
+ return SentryId.Empty;
}
try
@@ -602,19 +604,23 @@ public void CaptureFeedback(SentryFeedback feedback, Action configureScop
var clonedScope = CurrentScope.Clone();
configureScope(clonedScope);
- CaptureFeedback(feedback, clonedScope, hint);
+ return CaptureFeedback(feedback, out result, clonedScope, hint);
}
catch (Exception e)
{
_options.LogError(e, "Failure to capture feedback");
+ result = CaptureFeedbackResult.UnknownError;
+ return SentryId.Empty;
}
}
- public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result, Scope? scope = null,
+ SentryHint? hint = null)
{
if (!IsEnabled)
{
- return;
+ result = CaptureFeedbackResult.DisabledHub;
+ return SentryId.Empty;
}
try
@@ -626,11 +632,13 @@ public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, Sentry
}
scope ??= CurrentScope;
- CurrentClient.CaptureFeedback(feedback, scope, hint);
+ return CurrentClient.CaptureFeedback(feedback, out result, scope, hint);
}
catch (Exception e)
{
_options.LogError(e, "Failure to capture feedback");
+ result = CaptureFeedbackResult.UnknownError;
+ return SentryId.Empty;
}
}
@@ -842,7 +850,8 @@ public void Dispose()
}
//Don't dispose of ScopeManager since we want dangling transactions to still be able to access tags.
- _backpressureMonitor?.Dispose();
+ // Don't dispose of _backpressureMonitor since we want the client to continue to process envelopes without
+ // throwing an ObjectDisposedException.
#if __IOS__
// TODO
diff --git a/src/Sentry/SentryClient.cs b/src/Sentry/SentryClient.cs
index d42fe8c44f..9ad20efec8 100644
--- a/src/Sentry/SentryClient.cs
+++ b/src/Sentry/SentryClient.cs
@@ -85,12 +85,14 @@ public SentryId CaptureEvent(SentryEvent? @event, Scope? scope = null, SentryHin
}
///
- public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
+ public SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Scope? scope = null, SentryHint? hint = null)
{
if (string.IsNullOrEmpty(feedback.Message))
{
_options.LogWarning("Feedback dropped due to empty message.");
- return;
+ result = CaptureFeedbackResult.EmptyMessage;
+ return SentryId.Empty;
}
scope ??= new Scope(_options);
@@ -116,7 +118,13 @@ public void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, Sentry
var attachments = hint.Attachments.ToList();
var envelope = Envelope.FromFeedback(evt, _options.DiagnosticLogger, attachments, scope.SessionUpdate);
- CaptureEnvelope(envelope);
+ if (CaptureEnvelope(envelope))
+ {
+ result = CaptureFeedbackResult.Success;
+ return evt.EventId;
+ }
+ result = CaptureFeedbackResult.UnknownError;
+ return SentryId.Empty;
}
///
diff --git a/src/Sentry/SentryClientExtensions.cs b/src/Sentry/SentryClientExtensions.cs
index fc0b120b8e..abcf1dc099 100644
--- a/src/Sentry/SentryClientExtensions.cs
+++ b/src/Sentry/SentryClientExtensions.cs
@@ -43,12 +43,26 @@ public static SentryId CaptureMessage(this ISentryClient client, string message,
///
/// Captures feedback from the user.
///
- public static void CaptureFeedback(this ISentryClient client, string message, string? contactEmail = null,
+ public static SentryId CaptureFeedback(this ISentryClient client, string message, string? contactEmail = null,
string? name = null, string? replayId = null, string? url = null, SentryId? associatedEventId = null,
Scope? scope = null, SentryHint? hint = null)
=> client.CaptureFeedback(new SentryFeedback(message, contactEmail, name, replayId, url, associatedEventId),
scope, hint);
+ ///
+ /// Captures feedback from the user.
+ ///
+ /// The Sentry client.
+ /// The feedback to send to Sentry.
+ /// An optional scope to be applied to the event.
+ /// An optional hint providing high level context for the source of the event
+ ///
+ /// A that will contain the Id of the new event (if successful) or
+ /// otherwise
+ ///
+ public static SentryId CaptureFeedback(this ISentryClient client, SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
+ => client.CaptureFeedback(feedback, out _, scope, hint);
+
///
/// Flushes the queue of captured events until the timeout set in
/// is reached.
diff --git a/src/Sentry/SentrySdk.cs b/src/Sentry/SentrySdk.cs
index 982dbb6c3a..ab32c294b1 100644
--- a/src/Sentry/SentrySdk.cs
+++ b/src/Sentry/SentrySdk.cs
@@ -542,25 +542,33 @@ public static SentryId CaptureMessage(string message, SentryLevel level = Sentry
public static SentryId CaptureMessage(string message, Action configureScope, SentryLevel level = SentryLevel.Info)
=> CurrentHub.CaptureMessage(message, configureScope, level);
- ///
- /// Captures feedback from the user.
- ///
+ ///
[DebuggerStepThrough]
- public static void CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
+ public static SentryId CaptureFeedback(SentryFeedback feedback, Action configureScope, SentryHint? hint = null)
=> CurrentHub.CaptureFeedback(feedback, configureScope, hint);
- ///
- /// Captures feedback from the user.
- ///
+ ///
+ [DebuggerStepThrough]
+ public static SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Action configureScope, SentryHint? hint = null)
+ => CurrentHub.CaptureFeedback(feedback, out result, configureScope, hint);
+
+ ///
[DebuggerStepThrough]
- public static void CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
+ public static SentryId CaptureFeedback(SentryFeedback feedback, Scope? scope = null, SentryHint? hint = null)
=> CurrentHub.CaptureFeedback(feedback, scope, hint);
+ ///
+ [DebuggerStepThrough]
+ public static SentryId CaptureFeedback(SentryFeedback feedback, out CaptureFeedbackResult result,
+ Scope? scope = null, SentryHint? hint = null)
+ => CurrentHub.CaptureFeedback(feedback, out result, scope, hint);
+
///
/// Captures feedback from the user.
///
[DebuggerStepThrough]
- public static void CaptureFeedback(string message, string? contactEmail = null, string? name = null,
+ public static SentryId CaptureFeedback(string message, string? contactEmail = null, string? name = null,
string? replayId = null, string? url = null, SentryId? associatedEventId = null, Scope? scope = null,
SentryHint? hint = null)
=> CurrentHub.CaptureFeedback(new SentryFeedback(message, contactEmail, name, replayId, url, associatedEventId),
diff --git a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet10_0.verified.txt b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet10_0.verified.txt
index b955fd5d7f..bb5e9d0a7f 100644
--- a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet10_0.verified.txt
+++ b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet10_0.verified.txt
@@ -45,6 +45,13 @@ namespace Sentry
public ByteAttachmentContent(byte[] bytes) { }
public System.IO.Stream GetStream() { }
}
+ public enum CaptureFeedbackResult
+ {
+ Success = 0,
+ UnknownError = 1,
+ DisabledHub = 2,
+ EmptyMessage = 3,
+ }
public enum CheckInStatus
{
InProgress = 0,
@@ -139,6 +146,7 @@ namespace Sentry
public static void AddBreadcrumb(this Sentry.IHub hub, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static void AddBreadcrumb(this Sentry.IHub hub, Sentry.Infrastructure.ISystemClock? clock, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static Sentry.SentryId CaptureException(this Sentry.IHub hub, System.Exception ex, System.Action configureScope) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.IHub hub, Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.IHub hub, string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void LockScope(this Sentry.IHub hub) { }
public static System.IDisposable PushAndLockScope(this Sentry.IHub hub) { }
@@ -191,7 +199,7 @@ namespace Sentry
void BindException(System.Exception exception, Sentry.ISpan span);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope);
- void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null);
Sentry.TransactionContext ContinueTrace(Sentry.SentryTraceHeader? traceHeader, Sentry.BaggageHeader? baggageHeader, string? name = null, string? operation = null);
Sentry.TransactionContext ContinueTrace(string? traceHeader, string? baggageHeader, string? name = null, string? operation = null);
void EndSession(Sentry.SessionEndStatus status = 0);
@@ -218,7 +226,7 @@ namespace Sentry
Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null);
bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
- void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
void CaptureSession(Sentry.SessionUpdate sessionUpdate);
void CaptureTransaction(Sentry.SentryTransaction transaction);
void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint);
@@ -446,7 +454,7 @@ namespace Sentry
public Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null) { }
public bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent? @event, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -456,7 +464,8 @@ namespace Sentry
public static class SentryClientExtensions
{
public static Sentry.SentryId CaptureException(this Sentry.ISentryClient client, System.Exception ex) { }
- public static void CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.ISentryClient client, string message, Sentry.SentryLevel level = 1) { }
public static void Flush(this Sentry.ISentryClient client) { }
public static void Flush(this Sentry.ISentryClient client, System.TimeSpan timeout) { }
@@ -838,9 +847,11 @@ namespace Sentry
public static Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public static Sentry.SentryId CaptureException(System.Exception exception) { }
public static Sentry.SentryId CaptureException(System.Exception exception, System.Action configureScope) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(string message, Sentry.SentryLevel level = 1) { }
public static Sentry.SentryId CaptureMessage(string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
@@ -1367,8 +1378,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -1417,8 +1428,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public Sentry.SentryId CaptureException(System.Exception exception) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
diff --git a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet8_0.verified.txt b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet8_0.verified.txt
index b955fd5d7f..bb5e9d0a7f 100644
--- a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet8_0.verified.txt
+++ b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet8_0.verified.txt
@@ -45,6 +45,13 @@ namespace Sentry
public ByteAttachmentContent(byte[] bytes) { }
public System.IO.Stream GetStream() { }
}
+ public enum CaptureFeedbackResult
+ {
+ Success = 0,
+ UnknownError = 1,
+ DisabledHub = 2,
+ EmptyMessage = 3,
+ }
public enum CheckInStatus
{
InProgress = 0,
@@ -139,6 +146,7 @@ namespace Sentry
public static void AddBreadcrumb(this Sentry.IHub hub, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static void AddBreadcrumb(this Sentry.IHub hub, Sentry.Infrastructure.ISystemClock? clock, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static Sentry.SentryId CaptureException(this Sentry.IHub hub, System.Exception ex, System.Action configureScope) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.IHub hub, Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.IHub hub, string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void LockScope(this Sentry.IHub hub) { }
public static System.IDisposable PushAndLockScope(this Sentry.IHub hub) { }
@@ -191,7 +199,7 @@ namespace Sentry
void BindException(System.Exception exception, Sentry.ISpan span);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope);
- void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null);
Sentry.TransactionContext ContinueTrace(Sentry.SentryTraceHeader? traceHeader, Sentry.BaggageHeader? baggageHeader, string? name = null, string? operation = null);
Sentry.TransactionContext ContinueTrace(string? traceHeader, string? baggageHeader, string? name = null, string? operation = null);
void EndSession(Sentry.SessionEndStatus status = 0);
@@ -218,7 +226,7 @@ namespace Sentry
Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null);
bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
- void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
void CaptureSession(Sentry.SessionUpdate sessionUpdate);
void CaptureTransaction(Sentry.SentryTransaction transaction);
void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint);
@@ -446,7 +454,7 @@ namespace Sentry
public Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null) { }
public bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent? @event, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -456,7 +464,8 @@ namespace Sentry
public static class SentryClientExtensions
{
public static Sentry.SentryId CaptureException(this Sentry.ISentryClient client, System.Exception ex) { }
- public static void CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.ISentryClient client, string message, Sentry.SentryLevel level = 1) { }
public static void Flush(this Sentry.ISentryClient client) { }
public static void Flush(this Sentry.ISentryClient client, System.TimeSpan timeout) { }
@@ -838,9 +847,11 @@ namespace Sentry
public static Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public static Sentry.SentryId CaptureException(System.Exception exception) { }
public static Sentry.SentryId CaptureException(System.Exception exception, System.Action configureScope) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(string message, Sentry.SentryLevel level = 1) { }
public static Sentry.SentryId CaptureMessage(string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
@@ -1367,8 +1378,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -1417,8 +1428,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public Sentry.SentryId CaptureException(System.Exception exception) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
diff --git a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet9_0.verified.txt b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet9_0.verified.txt
index b955fd5d7f..bb5e9d0a7f 100644
--- a/test/Sentry.Tests/ApiApprovalTests.Run.DotNet9_0.verified.txt
+++ b/test/Sentry.Tests/ApiApprovalTests.Run.DotNet9_0.verified.txt
@@ -45,6 +45,13 @@ namespace Sentry
public ByteAttachmentContent(byte[] bytes) { }
public System.IO.Stream GetStream() { }
}
+ public enum CaptureFeedbackResult
+ {
+ Success = 0,
+ UnknownError = 1,
+ DisabledHub = 2,
+ EmptyMessage = 3,
+ }
public enum CheckInStatus
{
InProgress = 0,
@@ -139,6 +146,7 @@ namespace Sentry
public static void AddBreadcrumb(this Sentry.IHub hub, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static void AddBreadcrumb(this Sentry.IHub hub, Sentry.Infrastructure.ISystemClock? clock, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static Sentry.SentryId CaptureException(this Sentry.IHub hub, System.Exception ex, System.Action configureScope) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.IHub hub, Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.IHub hub, string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void LockScope(this Sentry.IHub hub) { }
public static System.IDisposable PushAndLockScope(this Sentry.IHub hub) { }
@@ -191,7 +199,7 @@ namespace Sentry
void BindException(System.Exception exception, Sentry.ISpan span);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope);
- void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null);
Sentry.TransactionContext ContinueTrace(Sentry.SentryTraceHeader? traceHeader, Sentry.BaggageHeader? baggageHeader, string? name = null, string? operation = null);
Sentry.TransactionContext ContinueTrace(string? traceHeader, string? baggageHeader, string? name = null, string? operation = null);
void EndSession(Sentry.SessionEndStatus status = 0);
@@ -218,7 +226,7 @@ namespace Sentry
Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null);
bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
- void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
void CaptureSession(Sentry.SessionUpdate sessionUpdate);
void CaptureTransaction(Sentry.SentryTransaction transaction);
void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint);
@@ -446,7 +454,7 @@ namespace Sentry
public Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null) { }
public bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent? @event, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -456,7 +464,8 @@ namespace Sentry
public static class SentryClientExtensions
{
public static Sentry.SentryId CaptureException(this Sentry.ISentryClient client, System.Exception ex) { }
- public static void CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.ISentryClient client, string message, Sentry.SentryLevel level = 1) { }
public static void Flush(this Sentry.ISentryClient client) { }
public static void Flush(this Sentry.ISentryClient client, System.TimeSpan timeout) { }
@@ -838,9 +847,11 @@ namespace Sentry
public static Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public static Sentry.SentryId CaptureException(System.Exception exception) { }
public static Sentry.SentryId CaptureException(System.Exception exception, System.Action configureScope) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(string message, Sentry.SentryLevel level = 1) { }
public static Sentry.SentryId CaptureMessage(string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
@@ -1367,8 +1378,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -1417,8 +1428,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public Sentry.SentryId CaptureException(System.Exception exception) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
diff --git a/test/Sentry.Tests/ApiApprovalTests.Run.Net4_8.verified.txt b/test/Sentry.Tests/ApiApprovalTests.Run.Net4_8.verified.txt
index 4acd40d0ff..8707c7daa2 100644
--- a/test/Sentry.Tests/ApiApprovalTests.Run.Net4_8.verified.txt
+++ b/test/Sentry.Tests/ApiApprovalTests.Run.Net4_8.verified.txt
@@ -45,6 +45,13 @@ namespace Sentry
public ByteAttachmentContent(byte[] bytes) { }
public System.IO.Stream GetStream() { }
}
+ public enum CaptureFeedbackResult
+ {
+ Success = 0,
+ UnknownError = 1,
+ DisabledHub = 2,
+ EmptyMessage = 3,
+ }
public enum CheckInStatus
{
InProgress = 0,
@@ -127,6 +134,7 @@ namespace Sentry
public static void AddBreadcrumb(this Sentry.IHub hub, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static void AddBreadcrumb(this Sentry.IHub hub, Sentry.Infrastructure.ISystemClock? clock, string message, string? category = null, string? type = null, System.Collections.Generic.IDictionary? data = null, Sentry.BreadcrumbLevel level = 0) { }
public static Sentry.SentryId CaptureException(this Sentry.IHub hub, System.Exception ex, System.Action configureScope) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.IHub hub, Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.IHub hub, string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void LockScope(this Sentry.IHub hub) { }
public static System.IDisposable PushAndLockScope(this Sentry.IHub hub) { }
@@ -179,7 +187,7 @@ namespace Sentry
void BindException(System.Exception exception, Sentry.ISpan span);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope);
- void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null);
Sentry.TransactionContext ContinueTrace(Sentry.SentryTraceHeader? traceHeader, Sentry.BaggageHeader? baggageHeader, string? name = null, string? operation = null);
Sentry.TransactionContext ContinueTrace(string? traceHeader, string? baggageHeader, string? name = null, string? operation = null);
void EndSession(Sentry.SessionEndStatus status = 0);
@@ -206,7 +214,7 @@ namespace Sentry
Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null);
bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope);
Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
- void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
+ Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null);
void CaptureSession(Sentry.SessionUpdate sessionUpdate);
void CaptureTransaction(Sentry.SentryTransaction transaction);
void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint);
@@ -434,7 +442,7 @@ namespace Sentry
public Sentry.SentryId CaptureCheckIn(string monitorSlug, Sentry.CheckInStatus status, Sentry.SentryId? sentryId = default, System.TimeSpan? duration = default, Sentry.Scope? scope = null, System.Action? configureMonitorOptions = null) { }
public bool CaptureEnvelope(Sentry.Protocol.Envelopes.Envelope envelope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent? @event, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -444,7 +452,8 @@ namespace Sentry
public static class SentryClientExtensions
{
public static Sentry.SentryId CaptureException(this Sentry.ISentryClient client, System.Exception ex) { }
- public static void CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(this Sentry.ISentryClient client, string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(this Sentry.ISentryClient client, string message, Sentry.SentryLevel level = 1) { }
public static void Flush(this Sentry.ISentryClient client) { }
public static void Flush(this Sentry.ISentryClient client, System.TimeSpan timeout) { }
@@ -814,9 +823,11 @@ namespace Sentry
public static Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public static Sentry.SentryId CaptureException(System.Exception exception) { }
public static Sentry.SentryId CaptureException(System.Exception exception, System.Action configureScope) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
- public static void CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public static Sentry.SentryId CaptureFeedback(string message, string? contactEmail = null, string? name = null, string? replayId = null, string? url = null, Sentry.SentryId? associatedEventId = default, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public static Sentry.SentryId CaptureMessage(string message, Sentry.SentryLevel level = 1) { }
public static Sentry.SentryId CaptureMessage(string message, System.Action configureScope, Sentry.SentryLevel level = 1) { }
public static void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
@@ -1343,8 +1354,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, System.Action configureScope) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
@@ -1393,8 +1404,8 @@ namespace Sentry.Extensibility
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.Scope? scope, Sentry.SentryHint? hint = null) { }
public Sentry.SentryId CaptureEvent(Sentry.SentryEvent evt, Sentry.SentryHint? hint, System.Action configureScope) { }
public Sentry.SentryId CaptureException(System.Exception exception) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
- public void CaptureFeedback(Sentry.SentryFeedback feedback, System.Action configureScope, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, Sentry.Scope? scope = null, Sentry.SentryHint? hint = null) { }
+ public Sentry.SentryId CaptureFeedback(Sentry.SentryFeedback feedback, out Sentry.CaptureFeedbackResult result, System.Action configureScope, Sentry.SentryHint? hint = null) { }
public void CaptureSession(Sentry.SessionUpdate sessionUpdate) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction) { }
public void CaptureTransaction(Sentry.SentryTransaction transaction, Sentry.Scope? scope, Sentry.SentryHint? hint) { }
diff --git a/test/Sentry.Tests/HubTests.cs b/test/Sentry.Tests/HubTests.cs
index b1dc382b3e..5fe895ff9c 100644
--- a/test/Sentry.Tests/HubTests.cs
+++ b/test/Sentry.Tests/HubTests.cs
@@ -2034,8 +2034,20 @@ public void CaptureEvent_HubEnabled(bool enabled)
public void CaptureFeedback_HubEnabled(bool enabled)
{
// Arrange
+ var expectedId = enabled ? SentryId.Create() : SentryId.Empty;
+ var expectedResult = enabled ? CaptureFeedbackResult.Success : CaptureFeedbackResult.DisabledHub;
var hub = _fixture.GetSut();
- if (!enabled)
+ if (enabled)
+ {
+ _fixture.Client.CaptureFeedback(Arg.Any(), out Arg.Any(),
+ Arg.Any(), Arg.Any())
+ .Returns(callInfo =>
+ {
+ callInfo[1] = expectedResult; // Set the out parameter
+ return expectedId; // Return value of the method
+ });
+ }
+ else
{
hub.Dispose();
}
@@ -2043,10 +2055,13 @@ public void CaptureFeedback_HubEnabled(bool enabled)
var feedback = new SentryFeedback("Test feedback");
// Act
- hub.CaptureFeedback(feedback);
+ var id = hub.CaptureFeedback(feedback, out var result);
// Assert
- _fixture.Client.Received(enabled ? 1 : 0).CaptureFeedback(Arg.Any(), Arg.Any(), Arg.Any());
+ id.Should().Be(expectedId);
+ result.Should().Be(expectedResult);
+ _fixture.Client.Received(enabled ? 1 : 0).CaptureFeedback(Arg.Any(),
+ out Arg.Any(), Arg.Any(), Arg.Any());
}
[Theory]
diff --git a/test/Sentry.Tests/SentryClientTests.cs b/test/Sentry.Tests/SentryClientTests.cs
index 2a2987b9ef..f4d0da026d 100644
--- a/test/Sentry.Tests/SentryClientTests.cs
+++ b/test/Sentry.Tests/SentryClientTests.cs
@@ -864,8 +864,12 @@ public void CaptureFeedback_DisposedClient_DoesNotThrow()
var sut = _fixture.GetSut();
sut.Dispose();
- // Act / Assert
- sut.CaptureFeedback(feedback);
+ // Act
+ var id = sut.CaptureFeedback(feedback, out var result);
+
+ // Assert
+ result.Should().Be(CaptureFeedbackResult.Success);
+ id.Should().NotBe(SentryId.Empty);
}
[Fact]
@@ -876,10 +880,12 @@ public void CaptureFeedback_NoMessage_FeedbackIgnored()
var feedback = new SentryFeedback(string.Empty);
//Act
- sut.CaptureFeedback(feedback);
+ var id = sut.CaptureFeedback(feedback, out var result);
//Assert
_ = sut.Worker.DidNotReceive().EnqueueEnvelope(Arg.Any());
+ result.Should().Be(CaptureFeedbackResult.EmptyMessage);
+ id.Should().Be(SentryId.Empty);
}
[Fact]
@@ -890,10 +896,11 @@ public void CaptureFeedback_ValidUserFeedback_FeedbackRegistered()
var feedback = new SentryFeedback("Everything is great!");
//Act
- sut.CaptureFeedback(feedback);
+ var result = sut.CaptureFeedback(feedback);
//Assert
_ = sut.Worker.Received(1).EnqueueEnvelope(Arg.Any());
+ result.Should().NotBe(SentryId.Empty);
}
[Fact]
@@ -912,9 +919,10 @@ public void CaptureFeedback_WithScope_ScopeCopiedToEvent()
.Do(callback => envelope = callback.Arg());
//Act
- sut.CaptureFeedback(feedback, scope);
+ var result = sut.CaptureFeedback(feedback, scope);
//Assert
+ result.Should().NotBe(SentryId.Empty);
_ = sut.Worker.Received(1).EnqueueEnvelope(Arg.Any());
envelope.Should().NotBeNull();
envelope.Items.Should().Contain(item => item.TryGetType() == EnvelopeItem.TypeValueFeedback);
@@ -934,9 +942,10 @@ public void CaptureFeedback_WithHint_HasHintAttachment()
hint.Attachments.Add(AttachmentHelper.FakeAttachment("foo.txt"));
//Act
- sut.CaptureFeedback(feedback, null, hint);
+ var result = sut.CaptureFeedback(feedback, null, hint);
//Assert
+ result.Should().NotBe(SentryId.Empty);
_ = sut.Worker.Received(1).EnqueueEnvelope(Arg.Any());
sut.Worker.Received(1).EnqueueEnvelope(Arg.Is(envelope =>
envelope.Items.Count(item => item.TryGetType() == "attachment") == 1));