using System; using System.Collections.Generic; using System.IO; using System.Linq; using LCU.API.Collections.RepoApi.Configuration; using LCU.API.Collections.RepoApi.HostedServices; using LCU.API.Collections.RepoApi.Services; using LCU.API.Collections.RepoApi.Services.AutoIms; using LCU.Shared.Collections.RepoApiLib.Models; using Microsoft.AspNetCore.Identity.UI.V3.Pages.Internal.Account.Manage; using Microsoft.Win32.SafeHandles; using Moq; using Xunit; namespace LCU.API.Collections.RepoApiTests.Services { public class AutoImsServiceTest { private readonly AutoImsService _autoImsProcessor; private readonly Mock mockImsAutoFileDataConverter; private readonly Mock mockImsAutoFileNoteConverter; private readonly Mock mockDownloader; private readonly RepoApiConfiguration testConfig; private readonly Mock mockAutoImsImporterService; private readonly Mock mockEmailer; public AutoImsServiceTest() { mockImsAutoFileDataConverter = new Mock(); mockImsAutoFileNoteConverter = new Mock(); mockDownloader = new Mock(); testConfig = new RepoApiConfiguration() { CheckForLocalFiles = true, DownloadNewFiles = true, MoveProcessedFiles = false, LocalDirectoryPath = ".\\SampleData", RemoteFilePath = "." }; mockAutoImsImporterService = new Mock(); mockEmailer = new Mock(); _autoImsProcessor = new AutoImsService(mockDownloader.Object, testConfig, mockAutoImsImporterService.Object, mockImsAutoFileDataConverter.Object, mockImsAutoFileNoteConverter.Object, mockEmailer.Object); } [Fact] public void Test_Download_Exception() { mockDownloader.Setup(down => down.DownLoadAuctionFiles()).Throws(new Exception("oops")); mockDownloader.Setup(down => down.CombineWithLocalFiles(It.IsAny>())).Returns(new Dictionary() { { new FileInfo("filename"), "test1" } }); var res = _autoImsProcessor.Download(); Assert.NotNull(res); Assert.Empty(res); } [Fact] public void Basic_Download_Test() { mockDownloader.Setup(service => service.DownLoadAuctionFiles()) .Verifiable("Call Download"); mockDownloader.Setup(service => service.CombineWithLocalFiles(It.IsAny>())) .Verifiable("Call Download"); mockDownloader.Setup(service => service.ConvertToFileList(It.IsAny>())) .Returns( new List()); Assert.True(testConfig.DownloadNewFiles); Assert.True(testConfig.CheckForLocalFiles); var files = _autoImsProcessor.Download(); mockDownloader.VerifyAll(); } [Fact] public void ProcessDownloadedFiles_Ok() { var fileInfos = new List() { new FileInfo("Test1"), new FileInfo("Test2") }; _autoImsProcessor.ProcessDownloadedFiles(fileInfos); } [Fact] public void ProcessDownloadedFiles_Exception() { List fileInfos = null; Assert.Throws(() => _autoImsProcessor.ProcessDownloadedFiles(fileInfos)); } [Fact] public void Basic_Construct_Test() { Assert.NotNull(_autoImsProcessor); Assert.Throws(() => { _autoImsProcessor.ProcessDownloadedFiles(null); }); } [Fact] public void No_Files_Test() { testConfig.DownloadNewFiles = false; testConfig.CheckForLocalFiles = false; mockDownloader.Setup(service => service.DownLoadAuctionFiles()) .Verifiable("Call Download"); mockDownloader.Setup(service => service.CombineWithLocalFiles(It.IsAny>())) .Verifiable("Call Download"); mockDownloader.Setup(service => service.ConvertToFileList(It.IsAny>())) .Returns( new List()); Assert.False(testConfig.DownloadNewFiles); Assert.False(testConfig.CheckForLocalFiles); var files = _autoImsProcessor.Download(); mockDownloader.Verify(foo => foo.DownLoadAuctionFiles(), Times.Never()); mockDownloader.Verify(foo => foo.CombineWithLocalFiles(It.IsAny>()), Times.Never()); } } }