@@ -836,6 +836,7 @@ public void CaptureUserFeedback_EventIdEmpty_FeedbackIgnored()
836836 //Assert
837837 _ = sut . Worker . DidNotReceive ( ) . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) ;
838838 }
839+
839840 [ Fact ]
840841 public void Dispose_should_only_flush ( )
841842 {
@@ -849,6 +850,93 @@ public void Dispose_should_only_flush()
849850 client . CaptureEvent ( new SentryEvent { Message = "Test" } ) ;
850851 }
851852
853+ [ Fact ]
854+ public void CaptureFeedback_DisposedClient_DoesNotThrow ( )
855+ {
856+ // Arrange
857+ var feedback = new SentryFeedback ( "Everything is great!" ) ;
858+
859+ var sut = _fixture . GetSut ( ) ;
860+ sut . Dispose ( ) ;
861+
862+ // Act / Assert
863+ sut . CaptureFeedback ( feedback ) ;
864+ }
865+
866+ [ Fact ]
867+ public void CaptureFeedback_NoMessage_FeedbackIgnored ( )
868+ {
869+ //Arrange
870+ var sut = _fixture . GetSut ( ) ;
871+ var feedback = new SentryFeedback ( string . Empty ) ;
872+
873+ //Act
874+ sut . CaptureFeedback ( feedback ) ;
875+
876+ //Assert
877+ _ = sut . Worker . DidNotReceive ( ) . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) ;
878+ }
879+
880+ [ Fact ]
881+ public void CaptureFeedback_ValidUserFeedback_FeedbackRegistered ( )
882+ {
883+ //Arrange
884+ var sut = _fixture . GetSut ( ) ;
885+ var feedback = new SentryFeedback ( "Everything is great!" ) ;
886+
887+ //Act
888+ sut . CaptureFeedback ( feedback ) ;
889+
890+ //Assert
891+ _ = sut . Worker . Received ( 1 ) . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) ;
892+ }
893+
894+ [ Fact ]
895+ public void CaptureFeedback_WithScope_ScopeCopiedToEvent ( )
896+ {
897+ //Arrange
898+ const string expectedBreadcrumb = "test" ;
899+ var scope = new Scope ( _fixture . SentryOptions ) ;
900+ scope . AddBreadcrumb ( expectedBreadcrumb ) ;
901+ scope . Level = SentryLevel . Warning ;
902+ var feedback = new SentryFeedback ( "Everything is great!" ) ;
903+ var sut = _fixture . GetSut ( ) ;
904+
905+ Envelope envelope = null ;
906+ sut . Worker . When ( w => w . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) )
907+ . Do ( callback => envelope = callback . Arg < Envelope > ( ) ) ;
908+
909+ //Act
910+ sut . CaptureFeedback ( feedback , scope ) ;
911+
912+ //Assert
913+ _ = sut . Worker . Received ( 1 ) . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) ;
914+ envelope . Should ( ) . NotBeNull ( ) ;
915+ envelope . Items . Should ( ) . Contain ( item => item . TryGetType ( ) == EnvelopeItem . TypeValueFeedback ) ;
916+ var item = envelope . Items . First ( x => x . TryGetType ( ) == EnvelopeItem . TypeValueFeedback ) ;
917+ var @event = ( SentryEvent ) ( ( JsonSerializable ) item . Payload ) . Source ;
918+ @event . Level . Should ( ) . Be ( scope . Level ) ;
919+ Assert . Equal ( scope . Breadcrumbs , @event . Breadcrumbs ) ;
920+ }
921+
922+ [ Fact ]
923+ public void CaptureFeedback_WithHint_HasHintAttachment ( )
924+ {
925+ //Arrange
926+ var sut = _fixture . GetSut ( ) ;
927+ var feedback = new SentryFeedback ( "Everything is great!" ) ;
928+ var hint = new SentryHint ( ) ;
929+ hint . Attachments . Add ( AttachmentHelper . FakeAttachment ( "foo.txt" ) ) ;
930+
931+ //Act
932+ sut . CaptureFeedback ( feedback , null , hint ) ;
933+
934+ //Assert
935+ _ = sut . Worker . Received ( 1 ) . EnqueueEnvelope ( Arg . Any < Envelope > ( ) ) ;
936+ sut . Worker . Received ( 1 ) . EnqueueEnvelope ( Arg . Is < Envelope > ( envelope =>
937+ envelope . Items . Count ( item => item . TryGetType ( ) == "attachment" ) == 1 ) ) ;
938+ }
939+
852940 [ Fact ]
853941 public void CaptureUserFeedback_DisposedClient_DoesNotThrow ( )
854942 {
0 commit comments