Skip to content

Commit 98eb200

Browse files
Merge pull request #202 from TransactionProcessing/bug/#201_preventduplicatefilelines
Prevent duplicate file lines
2 parents 8715e98 + 640679d commit 98eb200

5 files changed

Lines changed: 35 additions & 9 deletions

File tree

FileProcessor.BusinessLogic.Tests/FileRequestHandlerTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,13 @@ public void FileRequestHandler_ProcessTransactionLineForFileRequest_LineInReques
486486
Logger.Initialise(NullLogger.Instance);
487487

488488
ProcessTransactionForFileLineRequest processTransactionForFileLineRequest1 =
489-
new ProcessTransactionForFileLineRequest(TestData.FileId, 1, TestData.FileLine);
489+
new ProcessTransactionForFileLineRequest(TestData.FileId, 1, TestData.FileLine1);
490490
ProcessTransactionForFileLineRequest processTransactionForFileLineRequest2 =
491-
new ProcessTransactionForFileLineRequest(TestData.FileId, 2, TestData.FileLine);
491+
new ProcessTransactionForFileLineRequest(TestData.FileId, 1, TestData.FileLine2);
492492
ProcessTransactionForFileLineRequest processTransactionForFileLineRequest3 =
493-
new ProcessTransactionForFileLineRequest(TestData.FileId, 3, TestData.FileLine);
493+
new ProcessTransactionForFileLineRequest(TestData.FileId, 3, TestData.FileLine3);
494494
ProcessTransactionForFileLineRequest processTransactionForFileLineRequest4 =
495-
new ProcessTransactionForFileLineRequest(TestData.FileId, 4, TestData.FileLine);
495+
new ProcessTransactionForFileLineRequest(TestData.FileId, 4, TestData.FileLine4);
496496

497497
Should.NotThrow(async () =>
498498
{

FileProcessor.BusinessLogic/RequestHandlers/FileRequestHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ private async Task<Unit> ProcessFile(Guid fileId,
297297

298298
foreach (String fileLine in fileLines)
299299
{
300-
fileAggregate.AddFileLine(fileLine);
300+
fileAggregate.AddFileLine(fileLine.Trim());
301301
}
302302

303303
await this.FileAggregateRepository.SaveChanges(fileAggregate, cancellationToken);

FileProcessor.FileAggregate.Tests/FileAggregateTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,22 @@ public void FileAggregate_AddFileLine_FileLineAdded()
9494
fileDetails.ProcessingSummary.IgnoredLines.ShouldBe(0);
9595
}
9696

97+
[Fact]
98+
public void FileAggregate_AddFileLine_AddDuplicateLine_FileLineIsNotAddedAdded()
99+
{
100+
FileAggregate fileAggregate = FileAggregate.Create(TestData.FileId);
101+
fileAggregate.CreateFile(TestData.FileImportLogId, TestData.EstateId, TestData.MerchantId, TestData.UserId,
102+
TestData.FileProfileId, TestData.FileLocation, TestData.FileUploadedDateTime);
103+
fileAggregate.AddFileLine(TestData.FileLine);
104+
fileAggregate.AddFileLine(TestData.FileLine);
105+
106+
FileDetails fileDetails = fileAggregate.GetFile();
107+
fileDetails.FileLines.ShouldNotBeNull();
108+
fileDetails.FileLines.ShouldNotBeEmpty();
109+
fileDetails.FileLines.ShouldHaveSingleItem();
110+
fileDetails.FileLines.Count.ShouldBe(1);
111+
}
112+
97113
[Fact]
98114
public void FileAggregate_AddFileLine_FileNotCreated_FileLineAdded()
99115
{

FileProcessor.FileAggregate/FileAggregate.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,12 @@ public void AddFileLine(String fileLine)
267267
throw new InvalidOperationException($"File Id {this.AggregateId} has not been uploaded yet");
268268
}
269269

270+
Boolean lineAlreadyExists = this.FileLines.Any(f => f.LineData == fileLine);
271+
272+
// We already have this line so just return
273+
if (lineAlreadyExists)
274+
return;
275+
270276
Int32 lineNumber = this.FileLines.Count + 1;
271277

272278
FileLineAddedEvent fileLineAddedEvent = new FileLineAddedEvent(this.AggregateId, this.EstateId, lineNumber, fileLine);

FileProcessor.Testing/TestData.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ public class TestData
3939
public static Int32 LineNumber = 1;
4040

4141
public static Int32 NotFoundLineNumber = 100;
42-
42+
4343
public static String FileLine = "D,124567,100";
44+
public static String FileLine1 = "D,124567,100";
45+
public static String FileLine2 = "D,124568,100";
46+
public static String FileLine3 = "D,124569,100";
47+
public static String FileLine4 = "D,124560,100";
4448

4549
public static String FileLocation = "home/txnproc/bulkfiles/safaricom/ExampleFile.csv";
4650

@@ -269,9 +273,9 @@ public static FileAggregate GetFileAggregateWithLinesAlreadyProcessed()
269273

270274
fileAggregate.CreateFile(TestData.FileImportLogId,TestData.EstateId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FileUploadedDateTime);
271275
fileAggregate.AddFileLine("D,1,2");
272-
fileAggregate.AddFileLine("D,1,2");
273-
fileAggregate.AddFileLine("D,1,2");
274-
fileAggregate.AddFileLine("D,1,2");
276+
fileAggregate.AddFileLine("D,1,3");
277+
fileAggregate.AddFileLine("D,1,4");
278+
fileAggregate.AddFileLine("D,1,5");
275279
fileAggregate.RecordFileLineAsSuccessful(1, TestData.TransactionId);
276280
fileAggregate.RecordFileLineAsRejected(2, TestData.RejectionReason);
277281
fileAggregate.RecordFileLineAsFailed(3, TestData.TransactionId, "-1","Failed");

0 commit comments

Comments
 (0)