Skip to content

Commit a2ceaa6

Browse files
Prevent duplicate file lines
1 parent 151a6d1 commit a2ceaa6

3 files changed

Lines changed: 23 additions & 1 deletion

File tree

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);

0 commit comments

Comments
 (0)