diff --git a/src/Tests/ConversationStorageTests.cs b/src/Tests/ConversationStorageTests.cs index d3aaf8f..342c8ca 100644 --- a/src/Tests/ConversationStorageTests.cs +++ b/src/Tests/ConversationStorageTests.cs @@ -60,5 +60,15 @@ await storage.SaveAsync(new ContentMessage( Assert.NotNull(text.AdditionalProperties); Assert.Equal("ContentValue", (string)text.AdditionalProperties["ContentProp"]!); } + + message.AdditionalProperties?["Agent"] = "Calendar"; + + await storage.SaveAsync(message); + + var updatedMessage = await storage.GetMessageAsync(user.Number, messageId); + + Assert.NotNull(updatedMessage?.AdditionalProperties); + Assert.Equal("Calendar", updatedMessage.AdditionalProperties?["Agent"]); + Assert.Equal("MessageValue", (string)updatedMessage.AdditionalProperties!["MessageProp"]!); } } diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj index 5e9b940..c41eccb 100644 --- a/src/Tests/Tests.csproj +++ b/src/Tests/Tests.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + Preview false true diff --git a/src/WhatsApp/ConversationStorage.cs b/src/WhatsApp/ConversationStorage.cs index 8f3ad81..4cc24d9 100644 --- a/src/WhatsApp/ConversationStorage.cs +++ b/src/WhatsApp/ConversationStorage.cs @@ -38,7 +38,16 @@ public async Task SaveAsync(IMessage message, CancellationToken cancellationToke var conversation = await conversationsRepository.Value.GetAsync(message.UserNumber, message.ConversationId, cancellationToken) ?? new(message.UserNumber, message.ConversationId, [], message.Timestamp); - conversation.Messages.Add(message); + if (conversation.Messages.FirstOrDefault(x => x.Id == message.Id) is { } existing) + { + // Message is being updated, so we can just replace it + var index = conversation.Messages.IndexOf(existing); + conversation.Messages[index] = message; + } + else + { + conversation.Messages.Add(message); + } // Save the conversation await conversationsRepository.Value.PutAsync(conversation, cancellationToken);