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
47 changes: 47 additions & 0 deletions FIleProcessor.Models/FileImportLog.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
namespace FIleProcessor.Models
{
using System;
using System.Collections.Generic;

/// <summary>
///
/// </summary>
public class FileImportLog
{
#region Properties

/// <summary>
/// Gets or sets the estate identifier.
/// </summary>
/// <value>
/// The estate identifier.
/// </value>
public Guid EstateId { get; set; }

/// <summary>
/// Gets or sets the file import log date time.
/// </summary>
/// <value>
/// The file import log date time.
/// </value>
public DateTime FileImportLogDateTime { get; set; }

/// <summary>
/// Gets or sets the file import log identifier.
/// </summary>
/// <value>
/// The file import log identifier.
/// </value>
public Guid FileImportLogId { get; set; }

/// <summary>
/// Gets or sets the files.
/// </summary>
/// <value>
/// The files.
/// </value>
public List<ImportLogFile> Files { get; set; }

#endregion
}
}
8 changes: 0 additions & 8 deletions FIleProcessor.Models/ImportLogFile.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
namespace FIleProcessor.Models
{
using System;
using System.Collections.Generic;

public class FileImportLog
{
public Guid EstateId { get; set; }
public DateTime FileImportLogDateTime { get; set; }
public Guid FileImportLogId { get; set; }
public List<ImportLogFile> Files { get; set; }
}
public class ImportLogFile
{
/// <summary>
Expand Down
125 changes: 123 additions & 2 deletions FileProcessor.BusinessLogic.Tests/FileProcessingManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,29 @@
namespace FileProcessor.BusinessLogic.Tests
{
using System.Threading;
using Common;
using EstateReporting.Database;
using EstateReporting.Database.Entities;
using FIleProcessor.Models;
using Managers;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Moq;
using Shared.EntityFramework;
using Shouldly;
using Testing;
using Xunit;
using FileImportLog = EstateReporting.Database.Entities.FileImportLog;

public class FileProcessingManagerTests
{
[Fact]
public async Task FileProcessingManager_GetAllFileProfiles_AllFileProfilesReturned()
{
var fileProfiles = TestData.FileProfiles;
FileProcessorManager manager = new FileProcessorManager(fileProfiles);
var contextFactory = this.CreateMockContextFactory();
Mock<IModelFactory> modelFactory = new Mock<IModelFactory>();
FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object,modelFactory.Object);

var allFileProfiles = await manager.GetAllFileProfiles(CancellationToken.None);
allFileProfiles.ShouldNotBeNull();
Expand All @@ -29,11 +40,121 @@ public async Task FileProcessingManager_GetAllFileProfiles_AllFileProfilesReturn
public async Task FileProcessingManager_GetFileProfile_FIleProfileReturned()
{
var fileProfiles = TestData.FileProfiles;
FileProcessorManager manager = new FileProcessorManager(fileProfiles);
var contextFactory = this.CreateMockContextFactory();
Mock<IModelFactory> modelFactory = new Mock<IModelFactory>();
FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object, modelFactory.Object);

var fileProfile = await manager.GetFileProfile(TestData.SafaricomFileProfileId, CancellationToken.None);
fileProfile.ShouldNotBeNull();
fileProfile.FileProfileId.ShouldBe(TestData.SafaricomFileProfileId);
}

[Fact]
public async Task FileProcessingManager_GetFileImportLogs_NoMerchantId_ImportLogsReturned()
{
var fileProfiles = TestData.FileProfiles;
var context = await this.GetContext(Guid.NewGuid().ToString("N"));
var contextFactory = this.CreateMockContextFactory();
contextFactory.Setup(c => c.GetContext(It.IsAny<Guid>(), It.IsAny<CancellationToken>())).ReturnsAsync(context);
IModelFactory modelFactory = new ModelFactory();

context.FileImportLogs.AddRange(TestData.FileImportLogs);
context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
context.SaveChanges();

FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object, modelFactory);

var importLogs = await manager.GetFileImportLogs(TestData.EstateId, TestData.ImportLogStartDate, TestData.ImportLogEndDate, null, CancellationToken.None);

this.VerifyImportLogs(importLogs);
}

[Fact]
public async Task FileProcessingManager_GetFileImportLogs_WithMerchantId_ImportLogsReturned()
{
var fileProfiles = TestData.FileProfiles;
var context = await this.GetContext(Guid.NewGuid().ToString("N"));
var contextFactory = this.CreateMockContextFactory();
contextFactory.Setup(c => c.GetContext(It.IsAny<Guid>(), It.IsAny<CancellationToken>())).ReturnsAsync(context);
IModelFactory modelFactory = new ModelFactory();

context.FileImportLogs.AddRange(TestData.FileImportLogs);
context.FileImportLogFiles.AddRange(TestData.FileImportLog1Files);
context.FileImportLogFiles.AddRange(TestData.FileImportLog2Files);
context.SaveChanges();

FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object, modelFactory);

var importLogs = await manager.GetFileImportLogs(TestData.EstateId, TestData.ImportLogStartDate, TestData.ImportLogEndDate, TestData.MerchantId, CancellationToken.None);

this.VerifyImportLogs(importLogs, TestData.MerchantId);
}

private void VerifyImportLogs(List<FIleProcessor.Models.FileImportLog> importLogs, Guid? merchantId = null)
{
importLogs.ShouldNotBeNull();
importLogs.ShouldNotBeEmpty();
importLogs.Count.ShouldBe(TestData.FileImportLogs.Count);
foreach (FileImportLog fileImportLog in TestData.FileImportLogs)
{
var importLog = importLogs.SingleOrDefault(i => i.FileImportLogId == fileImportLog.FileImportLogId);
importLog.ShouldNotBeNull();
importLog.FileImportLogDateTime.ShouldBe(fileImportLog.ImportLogDateTime);
importLog.Files.Count.ShouldBe(importLog.Files.Count);

List<ImportLogFile> filesToVerify = importLog.Files;
if (merchantId.HasValue)
{
filesToVerify = filesToVerify.Where(f => f.MerchantId == merchantId.Value).ToList();
}

foreach (ImportLogFile importLogFile in filesToVerify)
{
var file = importLog.Files.SingleOrDefault(impfile => impfile.FileId == importLogFile.FileId);
file.ShouldNotBeNull();
file.MerchantId.ShouldBe(importLogFile.MerchantId);
file.FilePath.ShouldBe(importLogFile.FilePath);
file.FileProfileId.ShouldBe(importLogFile.FileProfileId);
file.OriginalFileName.ShouldBe(importLogFile.OriginalFileName);
file.UserId.ShouldBe(importLogFile.UserId);
}
}
}

//[Fact]
//public async Task FileProcessingManager_GetFileImportLogs_WithMerchantId_ImportLogsReturned()
//{
// var fileProfiles = TestData.FileProfiles;
// var contextFactory = this.CreateMockContextFactory();
// IModelFactory modelFactory = new ModelFactory();
// FileProcessorManager manager = new FileProcessorManager(fileProfiles, contextFactory.Object, modelFactory);

// var importLogs = await manager.GetFileImportLogs(TestData.EstateId, TestData.ImportLogStartDate, TestData.ImportLogEndDate, TestData.MerchantId, CancellationToken.None);

// importLogs.ShouldNotBeNull();
// importLogs.ShouldNotBeEmpty();
// importLogs.Count.ShouldBe(2);


//}

private Mock<Shared.EntityFramework.IDbContextFactory<EstateReportingContext>> CreateMockContextFactory()
{
return new Mock<Shared.EntityFramework.IDbContextFactory<EstateReportingContext>>();
}

private async Task<EstateReportingContext> GetContext(String databaseName)
{
EstateReportingContext context = null;

DbContextOptionsBuilder<EstateReportingContext> builder = new DbContextOptionsBuilder<EstateReportingContext>()
.UseInMemoryDatabase(databaseName)
.ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning));
context = new EstateReportingContext(builder.Options);


return context;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
<PackageReference Include="Moq" Version="4.16.1" />
<PackageReference Include="Shouldly" Version="4.0.3" />
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="13.2.29" />
Expand Down
78 changes: 78 additions & 0 deletions FileProcessor.BusinessLogic.Tests/ModelFactoryTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileProcessor.BusinessLogic.Tests
{
using Common;
using EstateReporting.Database.Entities;
using FIleProcessor.Models;
using Shouldly;
using Testing;
using Xunit;
using FileImportLog = FIleProcessor.Models.FileImportLog;

public class ModelFactoryTests
{
[Fact]
public void ModelFactory_ConvertFrom_FileImportLog_IsConverted()
{
IModelFactory modelFactory = new ModelFactory();
List<FileImportLogFile> files = new List<FileImportLogFile>();
files.AddRange(TestData.FileImportLog1Files);
files.AddRange(TestData.FileImportLog2Files);
List<FileImportLog> result = modelFactory.ConvertFrom(TestData.FileImportLogs, files);

this.VerifyImportLogs(result);
}

[Fact]
public void ModelFactory_ConvertFrom_FileImportLog_NoFiles_IsConverted()
{
IModelFactory modelFactory = new ModelFactory();
List<FileImportLogFile> files = new List<FileImportLogFile>();
List<FileImportLog> result = modelFactory.ConvertFrom(TestData.FileImportLogs, files);

this.VerifyImportLogs(result);
}

[Fact]
public void ModelFactory_ConvertFrom_FileImportLog_NoImportLogs_IsConverted()
{
IModelFactory modelFactory = new ModelFactory();
List<EstateReporting.Database.Entities.FileImportLog> fileImportLogs = new List<EstateReporting.Database.Entities.FileImportLog>();
List<FileImportLogFile> files = new List<FileImportLogFile>();
List<FileImportLog> result = modelFactory.ConvertFrom(fileImportLogs, files);

result.ShouldNotBeNull();
result.ShouldBeEmpty();
}

private void VerifyImportLogs(List<FIleProcessor.Models.FileImportLog> importLogs)
{
importLogs.ShouldNotBeNull();
importLogs.ShouldNotBeEmpty();
importLogs.Count.ShouldBe(TestData.FileImportLogs.Count);
foreach (EstateReporting.Database.Entities.FileImportLog fileImportLog in TestData.FileImportLogs)
{
var importLog = importLogs.SingleOrDefault(i => i.FileImportLogId == fileImportLog.FileImportLogId);
importLog.ShouldNotBeNull();
importLog.FileImportLogDateTime.ShouldBe(fileImportLog.ImportLogDateTime);
importLog.Files.Count.ShouldBe(importLog.Files.Count);

foreach (ImportLogFile importLogFile in importLog.Files)
{
var file = importLog.Files.SingleOrDefault(impfile => impfile.FileId == importLogFile.FileId);
file.ShouldNotBeNull();
file.MerchantId.ShouldBe(importLogFile.MerchantId);
file.FilePath.ShouldBe(importLogFile.FilePath);
file.FileProfileId.ShouldBe(importLogFile.FileProfileId);
file.OriginalFileName.ShouldBe(importLogFile.OriginalFileName);
file.UserId.ShouldBe(importLogFile.UserId);
}
}
}
}
}
25 changes: 25 additions & 0 deletions FileProcessor.BusinessLogic/Common/IModelFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace FileProcessor.BusinessLogic.Common
{
using System.Collections.Generic;
using EstateReporting.Database.Entities;
using FileImportLogModel = FIleProcessor.Models.FileImportLog;

/// <summary>
///
/// </summary>
public interface IModelFactory
{
#region Methods

/// <summary>
/// Converts from.
/// </summary>
/// <param name="importLogs">The import logs.</param>
/// <param name="importLogFilesList">The import log files list.</param>
/// <returns></returns>
List<FileImportLogModel> ConvertFrom(List<FileImportLog> importLogs,
List<FileImportLogFile> importLogFilesList);

#endregion
}
}
61 changes: 61 additions & 0 deletions FileProcessor.BusinessLogic/Common/ModelFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
namespace FileProcessor.BusinessLogic.Common
{
using System.Collections.Generic;
using System.Linq;
using EstateReporting.Database.Entities;
using FIleProcessor.Models;
using FileImportLog = FIleProcessor.Models.FileImportLog;

/// <summary>
///
/// </summary>
/// <seealso cref="FileProcessor.BusinessLogic.Common.IModelFactory" />
public class ModelFactory : IModelFactory
{
#region Methods

/// <summary>
/// Converts from.
/// </summary>
/// <param name="importLogs">The import logs.</param>
/// <param name="importLogFilesList">The import log files list.</param>
/// <returns></returns>
public List<FileImportLog> ConvertFrom(List<EstateReporting.Database.Entities.FileImportLog> importLogs,
List<FileImportLogFile> importLogFilesList)
{
List<FileImportLog> models = new List<FileImportLog>();

foreach (EstateReporting.Database.Entities.FileImportLog fileImportLog in importLogs)
{
var model = new FileImportLog();

model.FileImportLogId = fileImportLog.FileImportLogId;
model.FileImportLogDateTime = fileImportLog.ImportLogDateTime;
model.EstateId = fileImportLog.EstateId;
model.Files = new List<ImportLogFile>();

var currentImportLogFiles = importLogFilesList.Where(fi => fi.FileImportLogId == fileImportLog.FileImportLogId);

foreach (var importLogFile in currentImportLogFiles)
{
model.Files.Add(new ImportLogFile
{
MerchantId = importLogFile.MerchantId,
EstateId = importLogFile.EstateId,
FileId = importLogFile.FileId,
FilePath = importLogFile.FilePath,
FileProfileId = importLogFile.FileProfileId,
OriginalFileName = importLogFile.OriginalFileName,
UserId = importLogFile.UserId
});
}

models.Add(model);
}

return models;
}

#endregion
}
}
Loading