Skip to content

Commit 6428dfa

Browse files
committed
added scope replay id and screen as url
captureFeedback does not update scope lastEventId anymore
1 parent dd2d6a8 commit 6428dfa

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

sentry/src/main/java/io/sentry/ISentryClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,20 @@ public interface ISentryClient {
8888
* @return The Id (SentryId object) of the event
8989
*/
9090
default @NotNull SentryId captureFeedback(
91-
@NotNull Feedback feedback, @Nullable Hint hint, @Nullable IScope scope) {
91+
@NotNull Feedback feedback, @Nullable Hint hint, @NotNull IScope scope) {
9292
SentryEvent event = new SentryEvent();
9393
event.getContexts().setFeedback(feedback);
9494

95+
if (feedback.getReplayId() == null) {
96+
final @NotNull SentryId replayId = scope.getReplayId();
97+
if (!replayId.equals(SentryId.EMPTY_ID)) {
98+
feedback.setReplayId(replayId);
99+
}
100+
}
101+
if (feedback.getUrl() == null) {
102+
feedback.setUrl(scope.getScreen());
103+
}
104+
95105
return captureEvent(event, scope, hint);
96106
}
97107

sentry/src/main/java/io/sentry/Scopes.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ private void assignTraceContext(final @NotNull SentryEvent event) {
171171
getCombinedScopeView().assignTraceContext(event);
172172
}
173173

174-
private IScope buildLocalScope(
174+
private @NotNull IScope buildLocalScope(
175175
final @NotNull IScope parentScope, final @Nullable ScopeCallback callback) {
176176
if (callback != null) {
177177
try {
@@ -249,7 +249,7 @@ private IScope buildLocalScope(
249249
.log(SentryLevel.WARNING, "captureFeedback called with empty message.");
250250
} else {
251251
try {
252-
final IScope localScope = buildLocalScope(getCombinedScopeView(), scopeCallback);
252+
final @NotNull IScope localScope = buildLocalScope(getCombinedScopeView(), scopeCallback);
253253

254254
sentryId = getClient().captureFeedback(feedback, hint, localScope);
255255
} catch (Throwable e) {
@@ -258,7 +258,6 @@ private IScope buildLocalScope(
258258
.log(SentryLevel.ERROR, "Error while capturing feedback: " + feedback.getMessage(), e);
259259
}
260260
}
261-
updateLastEventId(sentryId);
262261
return sentryId;
263262
}
264263

sentry/src/main/java/io/sentry/protocol/Feedback.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
import io.sentry.ObjectWriter;
99
import io.sentry.SentryLevel;
1010
import io.sentry.util.CollectionUtils;
11+
import io.sentry.util.Objects;
1112
import io.sentry.vendor.gson.stream.JsonToken;
1213
import java.io.IOException;
1314
import java.util.HashMap;
1415
import java.util.Map;
15-
import java.util.Objects;
1616
import org.jetbrains.annotations.NotNull;
1717
import org.jetbrains.annotations.Nullable;
1818

sentry/src/test/java/io/sentry/ScopesTest.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,13 +609,21 @@ class ScopesTest {
609609

610610
//region captureFeedback tests
611611
@Test
612-
fun `when captureFeedback is called and message is empty, lastEventId is empty`() {
612+
fun `when captureFeedback is called and message is empty, client is never called`() {
613613
val (sut, mockClient) = getEnabledScopes()
614614
sut.captureFeedback(Feedback(""))
615615
assertEquals(SentryId.EMPTY_ID, sut.lastEventId)
616616
verify(mockClient, never()).captureFeedback(any(), anyOrNull(), anyOrNull())
617617
}
618618

619+
@Test
620+
fun `when captureFeedback is called, lastEventId is not updated`() {
621+
val (sut, mockClient) = getEnabledScopes()
622+
sut.captureFeedback(Feedback("message"))
623+
assertEquals(SentryId.EMPTY_ID, sut.lastEventId)
624+
verify(mockClient).captureFeedback(any(), anyOrNull(), anyOrNull())
625+
}
626+
619627
@Test
620628
fun `when captureFeedback is called on disabled client, do nothing`() {
621629
val (sut, mockClient) = getEnabledScopes()

sentry/src/test/java/io/sentry/SentryClientTest.kt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,14 @@ class SentryClientTest {
295295
var sentEvent: SentryEvent? = null
296296
fixture.sentryOptions.setBeforeSend { e, _ -> sentEvent = e; e }
297297
val sut = fixture.getSut()
298-
sut.captureFeedback(Feedback("message"), null, null)
298+
val scope = createScope()
299+
sut.captureFeedback(Feedback("message"), null, scope)
299300

300301
val sentFeedback = sentEvent!!.contexts.feedback
301302
assertNotNull(sentFeedback)
302303
assertEquals("message", sentFeedback.message)
304+
assertNull(sentFeedback.replayId)
305+
assertNull(sentFeedback.url)
303306

304307
verify(fixture.transport).send(
305308
check {
@@ -309,6 +312,37 @@ class SentryClientTest {
309312
)
310313
}
311314

315+
@Test
316+
fun `when captureFeedback, scope replay id is attached to feedback`() {
317+
var sentEvent: SentryEvent? = null
318+
fixture.sentryOptions.setBeforeSend { e, _ -> sentEvent = e; e }
319+
val replayId = SentryId()
320+
val sut = fixture.getSut()
321+
val scope = createScope()
322+
scope.replayId = replayId
323+
sut.captureFeedback(Feedback("message"), null, scope)
324+
325+
val sentFeedback = sentEvent!!.contexts.feedback
326+
assertNotNull(sentFeedback)
327+
assertEquals(replayId.toString(), sentFeedback.replayId?.toString())
328+
assertNull(sentFeedback.url)
329+
}
330+
331+
@Test
332+
fun `when captureFeedback, screen is attached to feedback as url`() {
333+
var sentEvent: SentryEvent? = null
334+
fixture.sentryOptions.setBeforeSend { e, _ -> sentEvent = e; e }
335+
val sut = fixture.getSut()
336+
val scope = createScope()
337+
scope.screen = "screen"
338+
sut.captureFeedback(Feedback("message"), null, scope)
339+
340+
val sentFeedback = sentEvent!!.contexts.feedback
341+
assertNotNull(sentFeedback)
342+
assertEquals("screen", sentFeedback.url)
343+
assertNull(sentFeedback.replayId)
344+
}
345+
312346
@Test
313347
fun `when event has release, value from options not applied`() {
314348
val event = SentryEvent()

0 commit comments

Comments
 (0)