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 @@ -468,6 +468,31 @@ public async Task FileRequestHandler_ProcessUploadedFileRequest_FileIsInFailedFo
this.VerifyFileProcessing("home/txnproc/bulkfiles/safaricom/processed");
}

[Fact]
public async Task FileRequestHandler_ProcessUploadedFileRequest_FileIsInProcessedFolder_RequestIsHandled()
{
this.FileProcessorManager.Setup(f => f.GetFileProfile(It.IsAny<Guid>(), It.IsAny<CancellationToken>())).ReturnsAsync(TestData.FileProfileSafaricom);

this.FileAggregateRepository.Setup(f => f.GetLatestVersion(It.IsAny<Guid>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Success(TestData.GetCreatedFileAggregate()));
this.FileAggregateRepository.Setup(f => f.SaveChanges(It.IsAny<FileAggregate>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Success);

this.FileSystem.AddFile(TestData.ProcessedSafaricomFilePathWithName, new MockFileData(String.Empty));

this.FileSystem.AddDirectory("home/txnproc/bulkfiles/safaricom/inprogress");
this.FileSystem.AddDirectory("home/txnproc/bulkfiles/safaricom/processed");
this.FileSystem.AddDirectory("home/txnproc/bulkfiles/safaricom/failed");

this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Success(TestData.TokenResponse()));

this.EstateClient.Setup(e => e.GetOperators(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>())).ReturnsAsync(TestData.OperatorList);

Result result = await this.FileProcessorDomainService.ProcessUploadedFile(TestData.ProcessUploadedFileCommand, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();

this.FileAggregateRepository.Verify(f => f.SaveChanges(It.IsAny<FileAggregate>(), It.IsAny<CancellationToken>()), Times.Exactly(2));
this.VerifyFileProcessing("home/txnproc/bulkfiles/safaricom/processed");
}

[Theory]
[InlineData("Safaricom")]
Expand Down
21 changes: 16 additions & 5 deletions FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -460,16 +460,27 @@ private async Task<Result> ProcessFile(Guid fileId,
inProgressFile = this.FileSystem.FileInfo.New(fileName);

if (inProgressFile.Exists == false) {
// We also want to check the failed folder incase this is an event replay
// We also want to check the processed and failed folders incase this is an event replay
IFileInfo failedFileInfo =
this.FileSystem.FileInfo.New($"{fileProfile.FailedDirectory}/{inProgressFile.Name}");
IFileInfo processedFileInfo =
this.FileSystem.FileInfo.New($"{fileProfile.ProcessedDirectory}/{inProgressFile.Name}");

if (failedFileInfo.Exists == false) {
(Boolean, Boolean) fileStatus = (failedFileInfo.Exists, processedFileInfo.Exists);

IFileInfo fileInfo = fileStatus switch
{
(true, false) => failedFileInfo,
(false, true) => processedFileInfo,
_ => null
};

if (fileInfo == null) {
return Result.NotFound($"File {inProgressFile.FullName} not found");
}

// Overwrite the inprogress file info object with the file found in the failed folder
inProgressFile = failedFileInfo;
inProgressFile = fileInfo;
}

Result result = await ApplyFileUpdates(async (FileAggregate fileAggregate) => {
Expand Down Expand Up @@ -499,10 +510,10 @@ private async Task<Result> ProcessFile(Guid fileId,
Logger.LogInformation($"About to move file {inProgressFile.Name} to [{fileProfile.ProcessedDirectory}]");

// Move file now
inProgressFile.MoveTo($"{fileProfile.ProcessedDirectory}/{inProgressFile.Name}");
inProgressFile.MoveTo($"{fileProfile.ProcessedDirectory}/{inProgressFile.Name}", true);
}
else {
inProgressFile.MoveTo($"{fileProfile.FailedDirectory}/{inProgressFile.Name}");
inProgressFile.MoveTo($"{fileProfile.FailedDirectory}/{inProgressFile.Name}", true);
}

return result;
Expand Down
1 change: 1 addition & 0 deletions FileProcessor.Testing/TestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class TestData
public static String FilePathWithName = "home/txnproc/bulkfiles/Example.csv";
public static String InProgressSafaricomFilePathWithName = "home/txnproc/bulkfiles/safaricom/inprogress/Example.csv";
public static String FailedSafaricomFilePathWithName = "home/txnproc/bulkfiles/safaricom/failed/Example.csv";
public static String ProcessedSafaricomFilePathWithName = "home/txnproc/bulkfiles/safaricom/processed/Example.csv";

public static Guid FileProfileId = Guid.Parse("D0D3A4E5-870E-42F6-AD0E-5E24252BC95E");

Expand Down
Loading