public async Task <IActionResult> Post(string conversationId, [FromBody] AddMessageDto dto) { using (logger.BeginScope("This log is for {conversationId}", conversationId)) { var stopWatch = Stopwatch.StartNew(); try { var message = await store.AddMessage(conversationId, new Message(dto)); await CreateMessagePayloadAndSend(conversationId, message); logger.LogInformation(Events.MessageAdded, "Message Added Successfully", DateTime.UtcNow); var messageDto = new GetMessageDto(message); return(Ok(messageDto)); } catch (StorageUnavailableException e) { logger.LogError(Events.StorageError, e, $"Storage was not available to add message", DateTime.UtcNow); return(StatusCode(503, "Failed to reach Storage")); } catch (ConversationNotFoundException e) { logger.LogError(Events.ConversationNotFound, e, $"Conversation of Id = {conversationId} was not found", DateTime.UtcNow); return(NotFound($"Conversation of Id = {conversationId} was not found")); } catch (InvalidDataException e) { logger.LogError(Events.UsernameNotFound, e, $"Username is not in participants", DateTime.UtcNow); return(StatusCode(400, "Sender Username doesn't exist in conversation")); } catch (Exception e) { logger.LogError(Events.InternalError, e, $"Failed to send messages for {conversationId}", DateTime.UtcNow); return(StatusCode(500, $"Failed to send message")); } finally { PostMessageMetric.TrackValue((double)stopWatch.ElapsedMilliseconds); } } }
public async void AddMessage_ReturnsValidValues() { //arrange var getMessage = new GetMessageDto() { Content = "TestContent" }; var fixture = new Fixture().Customize(new AutoMoqCustomization()); var mockMap = fixture.Freeze <Mock <IMapper> >(); mockMap.Setup(m => m.Map <GetMessageDto>(It.Is <Message>(m => m.Content == getMessage.Content))) .Returns(getMessage); var messageService = fixture.Create <MessageService>(); //act var result = await messageService.AddMessageAsync(new AddMessageDto { Content = "TestContent" }); //assert Assert.True(result.Content == getMessage.Content); }