using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using LCU.API.Collections.RepoApi.Services.AutoIms; using LCU.Shared.Collections.RepoApiLib.Models; using LCU.Shared.Collections.RepoApiLib.Repositories; using Moq; using Xunit; namespace LCU.API.Collections.RepoApiTests.Processor { public class AutoImsNoteProcessorServiceTest { private readonly IAutoImsNoteProcessorService autoImsNoteProcessorService; private readonly Mock mockAuctionAssignmentNoteRepository; private readonly Mock mockUnitOfWork; public AutoImsNoteProcessorServiceTest() { mockAuctionAssignmentNoteRepository = new Mock(); mockUnitOfWork = new Mock(); autoImsNoteProcessorService = new AutoImsNoteProcessorService(mockAuctionAssignmentNoteRepository.Object, mockUnitOfWork.Object); } [Fact] public void Basic_Construct_Test() { Assert.NotNull(autoImsNoteProcessorService); } [Fact] public void Import_Notes_Test() { mockAuctionAssignmentNoteRepository.Setup(service => service.FindConflictingNotes(It.IsAny(), "test1", It.IsAny())) .Returns(Task.FromResult(CreateEmptyNotes())).Verifiable("Call find duplicate"); mockAuctionAssignmentNoteRepository.Setup(service => service.FindConflictingNotes(It.IsAny(), "test2", It.IsAny())) .Returns(Task.FromResult(CreateDummyNotes())); mockAuctionAssignmentNoteRepository.Setup(service => service.AddAsync(It.IsAny())) .Verifiable("Call add note"); var notes = CreateDummyNotes(); var results = new List(); foreach (var auctionAssignmentNote in notes) { var result = autoImsNoteProcessorService.ImportSingleNoteRow(auctionAssignmentNote); if (result != null) { results.Add(result); } } mockAuctionAssignmentNoteRepository.Verify( foo => foo.FindConflictingNotes(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); mockAuctionAssignmentNoteRepository.Verify(foo => foo.AddAsync(It.IsAny()), Times.Exactly(1)); Assert.NotNull(results); Assert.Equal(2, results.Count()); } private IEnumerable CreateEmptyNotes() { return new List(); } private IEnumerable CreateDummyNotes() { return new[] { new AuctionAssignmentNote() { Text = "test1", AuctionCustomerNo = "123456-789", DateWritten = DateTime.Today, Origin = "testing", Writer = "tester", Type = "XX", AuctionAssignmentId = 12345 }, new AuctionAssignmentNote() { Text = "test2", AuctionCustomerNo = "223456-789", DateWritten = DateTime.Today, Origin = "testing", Writer = "tester", Type = "XX", AuctionAssignmentId = 12346 } }; } } }