diff --git a/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs b/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs index 45066dc..7215bd2 100644 --- a/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs +++ b/FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs @@ -94,9 +94,11 @@ public async Task FileProcessingManager_GetFileProfile_FileProfileReturned() [Fact] public async Task FileProcessingManager_GetFileImportLogs_NoMerchantId_ImportLogsReturned() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.AddRange(TestData.FileImportLogs); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files); + this.Context.Files.AddRange(TestData.Files1); this.Context.Merchants.Add(new Merchant { MerchantId = TestData.MerchantId, Name = TestData.MerchantName }); await this.Context.SaveChangesAsync(); @@ -104,11 +106,13 @@ public async Task FileProcessingManager_GetFileImportLogs_NoMerchantId_ImportLog getFileImportLogsResult.IsSuccess.ShouldBeTrue(); List importLogs = getFileImportLogsResult.Data.FileImportLogs; this.VerifyImportLogs(TestData.FileImportLogs,importLogs); + importLogs.SelectMany(log => log.Files).ShouldAllBe(file => file.FileProfileVersionId == TestData.FileProfileVersionId); } [Fact] public async Task FileProcessingManager_GetFileImportLogs_WithMerchantId_ImportLogsReturned() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.AddRange(TestData.FileImportLogs); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files); @@ -119,11 +123,13 @@ public async Task FileProcessingManager_GetFileImportLogs_WithMerchantId_ImportL Result importLogsResult = await this.Manager.GetFileImportLogs(TestData.EstateId, DateOnly.FromDateTime(TestData.ImportLogStartDate), DateOnly.FromDateTime(TestData.ImportLogEndDate), TestData.MerchantId, 1, 50, false, CancellationToken.None); this.VerifyImportLogs(TestData.FileImportLogs, importLogsResult.Data.FileImportLogs, TestData.MerchantId); + importLogsResult.Data.FileImportLogs.SelectMany(log => log.Files).ShouldAllBe(file => file.FileProfileVersionId == TestData.FileProfileVersionId); } [Fact] public async Task FileProcessingManager_GetFileImportLog_NoMerchantId_ImportLogReturned() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.AddRange(TestData.FileImportLogs); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files); @@ -134,11 +140,13 @@ public async Task FileProcessingManager_GetFileImportLog_NoMerchantId_ImportLogR Result importLog = await this.Manager.GetFileImportLog(TestData.FileImportLogId1, TestData.EstateId, null, CancellationToken.None); this.VerifyImportLog(TestData.FileImportLogs.First(), importLog); + importLog.Data.Files.ShouldAllBe(file => file.FileProfileVersionId == TestData.FileProfileVersionId); } [Fact] public async Task FileProcessingManager_GetFileImportLog_WithMerchantId_ImportLogReturned() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.AddRange(TestData.FileImportLogs); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files); @@ -149,6 +157,7 @@ public async Task FileProcessingManager_GetFileImportLog_WithMerchantId_ImportLo Result importLog = await this.Manager.GetFileImportLog(TestData.FileImportLogId1, TestData.EstateId, TestData.MerchantId, CancellationToken.None); this.VerifyImportLog(TestData.FileImportLogs.First(),importLog, TestData.MerchantId); + importLog.Data.Files.ShouldAllBe(file => file.FileProfileVersionId == TestData.FileProfileVersionId); } [Fact] @@ -180,6 +189,7 @@ public async Task FileProcessingManager_GetFileImportLogs_DateOnlyRangeIsInclusi [Fact] public async Task FileProcessingManager_GetFileImportLog_FilesAreScopedToRequestedImportLog() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.AddRange(TestData.FileImportLogs); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files); this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files); @@ -192,11 +202,13 @@ public async Task FileProcessingManager_GetFileImportLog_FilesAreScopedToRequest result.IsSuccess.ShouldBeTrue(); result.Data.Files.ShouldNotBeEmpty(); result.Data.Files.ShouldAllBe(file => TestData.FileImportLog1Files.Any(expected => expected.FileId == file.FileId)); + result.Data.Files.ShouldAllBe(file => file.FileProfileVersionId == TestData.FileProfileVersionId); } [Fact] public async Task FileProcessingManager_GetFileImportLogForFile_ReturnsEntryWithoutFileReadModelRow() { + this.FileAggregateRepository.GetLatestVersion(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate())); this.Context.FileImportLogs.Add(TestData.FileImportLog1); this.Context.FileImportLogFiles.Add(TestData.FileImportLog1Files.First()); await this.Context.SaveChangesAsync(); @@ -208,6 +220,7 @@ public async Task FileProcessingManager_GetFileImportLogForFile_ReturnsEntryWith importLog.Data.Files.ShouldHaveSingleItem(); importLog.Data.Files.Single().FileId.ShouldBe(TestData.FileId1); importLog.Data.Files.Single().UploadedDateTime.ShouldBe(TestData.FileUploadedDateTime); + importLog.Data.Files.Single().FileProfileVersionId.ShouldBe(TestData.FileProfileVersionId); } [Fact] diff --git a/FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs b/FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs index ea679f2..9636540 100644 --- a/FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs +++ b/FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs @@ -91,4 +91,4 @@ private void VerifyImportLogs(List> GetFileImportLogs(Guid estat } List model = this.ModelFactory.ConvertFrom(estateId, importLogQuery, entityData); + Result enrichResult = await this.EnrichFileProfileVersionIds(model, cancellationToken); + if (enrichResult.IsFailed) + { + return ResultHelpers.CreateFailure(enrichResult); + } + return Result.Success(new FileImportLogQueryResult { FileImportLogs = model, @@ -206,6 +212,12 @@ join merchant in context.Merchants on file.MerchantId equals merchant.MerchantId } var x = this.ModelFactory.ConvertFrom(estateId, importLogQuery, entityData); + Result enrichResult = await this.EnrichFileProfileVersionIds(x, cancellationToken); + if (enrichResult.IsFailed) + { + return ResultHelpers.CreateFailure(enrichResult); + } + return Result.Success(x); } @@ -226,7 +238,7 @@ join importLog in context.FileImportLogs on fileImportLogFile.FileImportLogId eq return Result.NotFound($"No import log file found for File Id [{fileId}]"); } - return Result.Success(new FileImportLog + FileImportLog model = new FileImportLog { EstateId = estateId, FileImportLogId = importLogFile.importLog.FileImportLogId, @@ -245,7 +257,15 @@ join importLog in context.FileImportLogs on fileImportLogFile.FileImportLogId eq UserId = importLogFile.fileImportLogFile.UserId } } - }); + }; + + Result enrichResult = await this.EnrichFileProfileVersionIds(model, cancellationToken); + if (enrichResult.IsFailed) + { + return ResultHelpers.CreateFailure(enrichResult); + } + + return Result.Success(model); } public async Task> GetFile(Guid fileId, @@ -298,5 +318,36 @@ public async Task> GetFile(Guid fileId, } #endregion + + // Temporary compatibility path until the import-log read model stores the profile version directly. + private async Task EnrichFileProfileVersionIds(FileImportLog importLog, + CancellationToken cancellationToken) + { + return await this.EnrichFileProfileVersionIds(new List { importLog }, cancellationToken); + } + + private async Task EnrichFileProfileVersionIds(List importLogs, + CancellationToken cancellationToken) + { + foreach (FileImportLog importLog in importLogs) + { + foreach (ImportLogFile importLogFile in importLog.Files) + { + Result fileAggregateResult = await this.FileAggregateRepository.GetLatestVersion(importLogFile.FileId, + cancellationToken); + if (fileAggregateResult == null || fileAggregateResult.IsFailed || fileAggregateResult.Data == null || fileAggregateResult.Data.IsCreated == false) + { + continue; + } + + FileDetails fileDetails = fileAggregateResult.Data.GetFile(); + importLogFile.FileProfileVersionId = fileDetails.FileProfileVersionId == Guid.Empty + ? fileDetails.FileProfileId + : fileDetails.FileProfileVersionId; + } + } + + return Result.Success(); + } } }