From cfbaefb7f9e95d26815ad6e19b1d083aa0e6ee6f Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Thu, 13 Aug 2026 13:39:32 +0200 Subject: [PATCH] =?UTF-8?q?Deux=20tests=20sur=20ConversationId=20=E2=80=94?= =?UTF-8?q?=20le=20lien=20entre=20deux=20tours=20n'=C3=A9tait=20couvert=20?= =?UTF-8?q?par=20rien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le repli Guid.NewGuid() s'appliquait à chaque appel puisque aucun client n'envoyait le champ : chaque question formait sa propre conversation en base, y compris deux questions d'affilée dans le même chat. Les clients l'envoient depuis aujourd'hui, ces tests fixent les deux branches. dotnet test : 201 passés, 14 sautés, 0 échec. Co-Authored-By: Claude Opus 5 --- .../Controllers/AiControllerTests.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/ManagerService.Tests/Controllers/AiControllerTests.cs b/ManagerService.Tests/Controllers/AiControllerTests.cs index 665a4ab..bc28bf4 100644 --- a/ManagerService.Tests/Controllers/AiControllerTests.cs +++ b/ManagerService.Tests/Controllers/AiControllerTests.cs @@ -140,6 +140,42 @@ namespace ManagerService.Tests.Controllers Assert.Equal(42, db.Instances.First().AiTokensThisMonth); } + /// + /// Deux tours d'une même conversation partagent leur ConversationId — c'est le seul + /// lien entre eux côté serveur, l'historique étant reconstruit par le client. + /// ⚠️ Aucun client ne l'envoyait jusqu'au 2026-08-13 : le repli `Guid.NewGuid()` + /// s'appliquait à chaque appel, donc chaque question formait sa propre conversation. + /// + [Fact] + public async Task Chat_SameConversationId_LinksBothTurns() + { + using var db = DbContextFactory.Create(); + SeedAssistantInstance(db); + + var controller = BuildController(db); + var first = MakeRequest("i1"); + first.ConversationId = "conv-1"; + var second = MakeRequest("i1"); + second.ConversationId = "conv-1"; + + await controller.Chat(first); + await controller.Chat(second); + + Assert.Equal(2, db.VisitorQuestions.Count()); + Assert.All(db.VisitorQuestions, q => Assert.Equal("conv-1", q.ConversationId)); + } + + [Fact] + public async Task Chat_NoConversationId_FallsBackToAGeneratedOne() + { + using var db = DbContextFactory.Create(); + SeedAssistantInstance(db); + + await BuildController(db).Chat(MakeRequest("i1")); + + Assert.False(string.IsNullOrWhiteSpace(db.VisitorQuestions.First().ConversationId)); + } + private static void SeedAssistantInstance(MyInfoMateDbContext db) { db.Instances.Add(new Instance