Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,21 +94,25 @@ public async Task FileProcessingManager_GetFileProfile_FileProfileReturned()
[Fact]
public async Task FileProcessingManager_GetFileImportLogs_NoMerchantId_ImportLogsReturned()
{
this.FileAggregateRepository.GetLatestVersion(Arg<Guid>.Any(), Arg<CancellationToken>.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();

Result<FileImportLogQueryResult> getFileImportLogsResult = await this.Manager.GetFileImportLogs(TestData.EstateId, DateOnly.FromDateTime(TestData.ImportLogStartDate), DateOnly.FromDateTime(TestData.ImportLogEndDate), null, 1, 50, false, CancellationToken.None);
getFileImportLogsResult.IsSuccess.ShouldBeTrue();
List<FileImportLog> 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<Guid>.Any(), Arg<CancellationToken>.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.Context.FileImportLogs.AddRange(TestData.FileImportLogs);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
Expand All @@ -119,11 +123,13 @@ public async Task FileProcessingManager_GetFileImportLogs_WithMerchantId_ImportL
Result<FileImportLogQueryResult> 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<Guid>.Any(), Arg<CancellationToken>.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.Context.FileImportLogs.AddRange(TestData.FileImportLogs);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
Expand All @@ -134,11 +140,13 @@ public async Task FileProcessingManager_GetFileImportLog_NoMerchantId_ImportLogR
Result<FileImportLog> 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<Guid>.Any(), Arg<CancellationToken>.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.Context.FileImportLogs.AddRange(TestData.FileImportLogs);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
Expand All @@ -149,6 +157,7 @@ public async Task FileProcessingManager_GetFileImportLog_WithMerchantId_ImportLo
Result<FileImportLog> 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]
Expand Down Expand Up @@ -180,6 +189,7 @@ public async Task FileProcessingManager_GetFileImportLogs_DateOnlyRangeIsInclusi
[Fact]
public async Task FileProcessingManager_GetFileImportLog_FilesAreScopedToRequestedImportLog()
{
this.FileAggregateRepository.GetLatestVersion(Arg<Guid>.Any(), Arg<CancellationToken>.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.Context.FileImportLogs.AddRange(TestData.FileImportLogs);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
this.Context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
Expand All @@ -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<Guid>.Any(), Arg<CancellationToken>.Any()).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.Context.FileImportLogs.Add(TestData.FileImportLog1);
this.Context.FileImportLogFiles.Add(TestData.FileImportLog1Files.First());
await this.Context.SaveChangesAsync();
Expand All @@ -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]
Expand Down
2 changes: 1 addition & 1 deletion FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,4 @@ private void VerifyImportLogs(List<TransactionProcessor.Database.Entities.FileIm

#endregion
}
}
}
55 changes: 53 additions & 2 deletions FileProcessor.BusinessLogic/Managers/FileProcessorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,12 @@ public async Task<Result<FileImportLogQueryResult>> GetFileImportLogs(Guid estat
}

List<FileImportLog> model = this.ModelFactory.ConvertFrom(estateId, importLogQuery, entityData);
Result enrichResult = await this.EnrichFileProfileVersionIds(model, cancellationToken);
if (enrichResult.IsFailed)
{
return ResultHelpers.CreateFailure<FileImportLogQueryResult>(enrichResult);
}

return Result.Success(new FileImportLogQueryResult
{
FileImportLogs = model,
Expand Down Expand Up @@ -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<FileImportLog>(enrichResult);
}

return Result.Success(x);
}

Expand All @@ -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,
Expand All @@ -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<FileImportLog>(enrichResult);
}

return Result.Success(model);
}

public async Task<Result<FileDetails>> GetFile(Guid fileId,
Expand Down Expand Up @@ -298,5 +318,36 @@ public async Task<Result<FileDetails>> GetFile(Guid fileId,
}

#endregion

// Temporary compatibility path until the import-log read model stores the profile version directly.
private async Task<Result> EnrichFileProfileVersionIds(FileImportLog importLog,
CancellationToken cancellationToken)
{
return await this.EnrichFileProfileVersionIds(new List<FileImportLog> { importLog }, cancellationToken);
}

private async Task<Result> EnrichFileProfileVersionIds(List<FileImportLog> importLogs,
CancellationToken cancellationToken)
{
foreach (FileImportLog importLog in importLogs)
{
foreach (ImportLogFile importLogFile in importLog.Files)
{
Result<FileAggregate> fileAggregateResult = await this.FileAggregateRepository.GetLatestVersion(importLogFile.FileId,
cancellationToken);
Comment thread
StuartFerguson marked this conversation as resolved.
Resolved
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();
}
}
}
Loading