diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cf16f5420..f19f9f551e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * Fix: set min sdk version of sentry-android-fragment to API 14 (#1608) +* Fix: Ser/Deser of the UserFeedback from cached envelope (#1611) * Feat: Add request body extraction for Spring MVC integration (#1595) ## 5.1.0-beta.5 diff --git a/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java b/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java index 89d1e28727..b19ab75ca1 100644 --- a/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java +++ b/sentry/src/main/java/io/sentry/SentryEnvelopeItemHeaderAdapter.java @@ -70,9 +70,21 @@ public void write(JsonWriter writer, SentryEnvelopeItemHeader value) throws IOEx break; case "type": try { - final String nextString = StringUtils.capitalize(reader.nextString()); + String nextString = reader.nextString(); + if (nextString != null) { - type = SentryItemType.valueOf(nextString); + // special case the String 'user_report since the enum is called UserFeedback + // instead of UserReport, this is gonna be fixed when we move away from reflection. + if (nextString.equalsIgnoreCase("user_report")) { + type = SentryItemType.UserFeedback; + } else { + final String capitalizedString = StringUtils.capitalize(nextString); + + // NPE check because of uber:nullaway + if (capitalizedString != null) { + type = SentryItemType.valueOf(capitalizedString); + } + } } } catch (IllegalArgumentException ignored) { // invalid type diff --git a/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt b/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt index 350286c0f1..9573e20574 100644 --- a/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt +++ b/sentry/src/test/java/io/sentry/SentryEnvelopeTest.kt @@ -14,10 +14,8 @@ class SentryEnvelopeTest { @Test fun `deserialize sample envelope with event and two attachments`() { - val envelopeReader = EnvelopeReader() - val testFile = this::class.java.classLoader.getResource("envelope-event-attachment.txt") - val stream = testFile!!.openStream() - val envelope = envelopeReader.read(stream) + val envelope = readEnvelope("envelope-event-attachment.txt") + assertNotNull(envelope) assertEquals("9ec79c33ec9942ab8353589fcb2e04dc", envelope.header.eventId.toString()) assertEquals(3, envelope.items.count()) @@ -137,4 +135,25 @@ abcdefghij""".toInputStream() assertEquals(10, secondItem.header.length) assertEquals(10, secondItem.data.size) } + + @Test + fun `deserializes an user feedback`() { + val envelope = readEnvelope("envelope-feedback.txt") + + assertNotNull(envelope) + assertEquals("bdd63725a2b84c1eabd761106e17d390", envelope.header.eventId.toString()) + assertEquals(1, envelope.items.count()) + val firstItem = envelope.items.elementAt(0) + assertEquals(SentryItemType.UserFeedback, firstItem.header.type) + assertEquals("application/json", firstItem.header.contentType) + assertEquals(103, firstItem.header.length) + assertEquals(103, firstItem.data.size) + } + + private fun readEnvelope(fileName: String): SentryEnvelope? { + val envelopeReader = EnvelopeReader() + val testFile = this::class.java.classLoader.getResource(fileName) + val stream = testFile!!.openStream() + return envelopeReader.read(stream) + } } diff --git a/sentry/src/test/resources/envelope-feedback.txt b/sentry/src/test/resources/envelope-feedback.txt new file mode 100644 index 0000000000..2120266986 --- /dev/null +++ b/sentry/src/test/resources/envelope-feedback.txt @@ -0,0 +1,3 @@ +{"event_id":"bdd63725a2b84c1eabd761106e17d390","sdk":{"name":"sentry.dart.flutter","version":"6.0.0-beta.3","packages":[{"name":"pub:sentry","version":"6.0.0-beta.3"},{"name":"pub:sentry_flutter","version":"6.0.0-beta.3"}],"integrations":["isolateErrorIntegration","runZonedGuardedIntegration","widgetsFlutterBindingIntegration","flutterErrorIntegration","widgetsBindingIntegration","nativeSdkIntegration","loadAndroidImageListIntegration","loadReleaseIntegration"]}} +{"content_type":"application/json","type":"user_report","length":103} +{"event_id":"bdd63725a2b84c1eabd761106e17d390","name":"jonas","email":"a@b.com","comments":"bad stuff"}