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
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,54 @@ public async Task FileRequestHandler_ProcessTransactionForFileLineRequest_Reques
result.IsSuccess.ShouldBeTrue();
}

[Fact]
public async Task ProcessTransactionForFileLine_UsesRecordedProfileVersionAfterActiveProfileChanges()
{
this.FileProcessorManager.GetFileProfile(Arg<Guid>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(TestData.FileProfileVoucher);
this.FileProcessorManager.GetFileProfileVersion(Arg<Guid>.Any(),
TestData.FileProfileVersionId,
Arg<CancellationToken>.Any())
.ReturnsAsync(TestData.FileProfileSafaricom with
{
FileProfileId = TestData.FileProfileId,
FileProfileVersionId = TestData.FileProfileVersionId
});

this.FileAggregateRepository.GetLatestVersion(Arg<Guid>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(TestData.GetFileAggregateWithLines()));
this.FileAggregateRepository.SaveChanges(Arg<FileAggregate>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success());
this.TransactionProcessorClient.PerformTransaction(Arg<String>.Any(),
Arg<SaleTransactionRequest>.Any(),
Arg<CancellationToken>.Any())
.ReturnsAsync(TestData.ClientSaleTransactionResponse);
this.TransactionProcessorClient.GetMerchant(Arg<String>.Any(),
Arg<Guid>.Any(),
Arg<Guid>.Any(),
Arg<CancellationToken>.Any())
.ReturnsAsync(TestData.GetMerchantResponseWithOperator);
this.TransactionProcessorClient.GetMerchantContracts(Arg<String>.Any(),
Arg<Guid>.Any(),
Arg<Guid>.Any(),
Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(TestData.GetMerchantContractsResponse()
.Where(contract => contract.OperatorName == TestData.SafaricomOperatorIdentifier)
.ToList()));
this.SecurityServiceClient.GetToken(Arg<String>.Any(),
Arg<String>.Any(),
Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(TestData.TokenResponse()));
this.FileFormatHandler.FileLineCanBeIgnored(Arg<String>.Any()).Returns(false);
this.FileFormatHandler.ParseFileLine(Arg<String>.Any()).Returns(TestData.TransactionMetadata);

Result result = await this.FileProcessorDomainService.ProcessTransactionForFileLine(
TestData.ProcessTransactionForFileLineCommand,
CancellationToken.None);

result.IsSuccess.ShouldBeTrue();
}

[Theory]
[InlineData("Safaricom")]
[InlineData("Voucher")]
Expand Down Expand Up @@ -830,6 +878,26 @@ public async Task FileRequestHandler_ProcessTransactionForFileLineRequest_FilePr
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.NotFound);
}

[Fact]
public async Task ProcessTransactionForFileLine_WhenRecordedProfileVersionIsMissing_ReturnsActionableFailure()
{
this.FileAggregateRepository.GetLatestVersion(Arg<Guid>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(TestData.GetFileAggregateWithLines()));
this.FileProcessorManager.GetFileProfileVersion(Arg<Guid>.Any(),
Arg<Guid>.Any(),
Arg<CancellationToken>.Any())
.ReturnsAsync(Result.NotFound());

Result result = await this.FileProcessorDomainService.ProcessTransactionForFileLine(
TestData.ProcessTransactionForFileLineCommand,
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Message.ShouldContain(TestData.FileId.ToString());
result.Message.ShouldContain(TestData.FileProfileId.ToString());
result.Message.ShouldContain(TestData.FileProfileVersionId.ToString());
}

[Fact]
public async Task FileRequestHandler_ProcessTransactionForFileLineRequest_FileLineIgnored_RequestIsHandled()
Expand Down
30 changes: 21 additions & 9 deletions FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ public async Task<Result> ProcessUploadedFile(FileCommands.ProcessUploadedFileCo
CancellationToken cancellationToken) {
Result result = await ApplyFileUpdates(async (FileAggregate fileAggregate) => {
Logger.LogWarning("In ProcessUploadedFile action");
Result<Guid> operatorIdResult = await GetOperatorIdForFileProfile(command.EstateId,
Result<Guid> operatorIdResult = await GetOperatorIdForFileProfile(command.FileId,
command.EstateId,
command.FileProfileId,
command.FileProfileVersionId,
cancellationToken);
Expand Down Expand Up @@ -317,12 +318,14 @@ private async Task MoveAcceptedFileToFailedDirectory(Guid fileProfileId,
file.MoveTo($"{fileProfileResult.Data.FailedDirectory}/{file.Name}", overwrite: true);
}

private async Task<Result<Guid>> GetOperatorIdForFileProfile(Guid estateId,
private async Task<Result<Guid>> GetOperatorIdForFileProfile(Guid fileId,
Guid estateId,
Guid fileProfileId,
Guid fileProfileVersionId,
CancellationToken cancellationToken){

Result<FileProfileModel> fileProfileResult = await this.GetFileProfileForProcessing(fileProfileId,
Result<FileProfileModel> fileProfileResult = await this.GetFileProfileForProcessing(fileId,
fileProfileId,
fileProfileVersionId,
cancellationToken);

Expand Down Expand Up @@ -434,7 +437,8 @@ public async Task<Result> ProcessTransactionForFileLine(FileCommands.ProcessTran
}

processingContext.Stage = FileLineProcessingStage.FileProfileLookup;
Result<FileProfileModel> fileProfileResult = await this.GetFileProfileForProcessing(fileDetails.FileProfileId,
Result<FileProfileModel> fileProfileResult = await this.GetFileProfileForProcessing(command.FileId,
fileDetails.FileProfileId,
fileDetails.FileProfileVersionId,
cancellationToken);
if (fileProfileResult.IsFailed)
Expand Down Expand Up @@ -756,7 +760,7 @@ private async Task<Result> ProcessFile(Guid fileId,
FileProfileModel fileProfile = null;

Result<FileProfileModel> fileProfileResult =
await this.GetFileProfileForProcessing(fileProfileId, fileProfileVersionId, cancellationToken);
await this.GetFileProfileForProcessing(fileId, fileProfileId, fileProfileVersionId, cancellationToken);

if (fileProfileResult.IsFailed)
return ResultHelpers.CreateFailure(fileProfileResult);
Expand Down Expand Up @@ -913,16 +917,24 @@ private async Task<Result> ProcessFile(Guid fileId,
return result;
}

private async Task<Result<FileProfileModel>> GetFileProfileForProcessing(Guid fileProfileId,
private async Task<Result<FileProfileModel>> GetFileProfileForProcessing(Guid fileId,
Guid fileProfileId,
Guid fileProfileVersionId,
CancellationToken cancellationToken)
{
if (fileProfileVersionId == Guid.Empty)
return await this.FileProcessorManager.GetFileProfile(fileProfileId, cancellationToken);

return await this.FileProcessorManager.GetFileProfileVersion(fileProfileId,
fileProfileVersionId,
cancellationToken);
Result<FileProfileModel> versionResult = await this.FileProcessorManager.GetFileProfileVersion(fileProfileId,
fileProfileVersionId,
cancellationToken);
if (versionResult.IsFailed == false)
return versionResult;

if (versionResult.Status == ResultStatus.NotFound)
return Result.NotFound($"File [{fileId}] references unavailable file profile version [{fileProfileVersionId}] for profile [{fileProfileId}]");

return ResultHelpers.CreateFailure(versionResult);
}

private static Int32 TransactionNumber = 0;
Expand Down
20 changes: 18 additions & 2 deletions FileProcessor.Testing/TestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,15 @@ public static FileAggregate GetCreatedFileAggregate()
{
FileAggregate fileAggregate = new FileAggregate();

FileAggregateExtensions.CreateFileRequest createFileRequest = new FileAggregateExtensions.CreateFileRequest(TestData.FileImportLogId, TestData.EstateId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FileUploadedDateTime, TestData.SafaricomOperatorId);
FileAggregateExtensions.CreateFileRequest createFileRequest = new FileAggregateExtensions.CreateFileRequest(TestData.FileImportLogId,
TestData.EstateId,
TestData.MerchantId,
TestData.UserId,
TestData.FileProfileId,
TestData.OriginalFileName,
TestData.FileUploadedDateTime,
TestData.SafaricomOperatorId,
TestData.FileProfileVersionId);

fileAggregate.CreateFile(createFileRequest);

Expand Down Expand Up @@ -302,7 +310,15 @@ public static FileAggregate GetFileAggregateWithLines()
{
FileAggregate fileAggregate = new FileAggregate();

FileAggregateExtensions.CreateFileRequest createFileRequest = new FileAggregateExtensions.CreateFileRequest(TestData.FileImportLogId, TestData.EstateId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FileUploadedDateTime, TestData.SafaricomOperatorId);
FileAggregateExtensions.CreateFileRequest createFileRequest = new FileAggregateExtensions.CreateFileRequest(TestData.FileImportLogId,
TestData.EstateId,
TestData.MerchantId,
TestData.UserId,
TestData.FileProfileId,
TestData.OriginalFileName,
TestData.FileUploadedDateTime,
TestData.SafaricomOperatorId,
TestData.FileProfileVersionId);

fileAggregate.CreateFile(createFileRequest);
fileAggregate.AddFileLine("D,1,2");
Expand Down
Loading