public void AddsTheCourierToListOfValidCouriers_WhenModelIsValidAndCourierDoesNotExist()
        {
            //Arrange
            var fakeProductService  = new Mock <IProductService>();
            var mockCourierService  = new Mock <ICourierService>();
            var fakeSupplierService = new Mock <ISupplierService>();

            mockCourierService.Setup(s => s.CourierExistsByName(It.IsAny <string>(), It.IsAny <string>())).Returns(false);
            var fakeJsonService = new Mock <IJsonService>();
            var fakeCourier     = new CourierImportModel()
            {
                FirstName = "Pesho",
                LastName  = "Goshov"
            };

            fakeJsonService.Setup(s => s.DeserializeCouriers(It.IsAny <string>())).Returns(new[] { fakeCourier });
            var fakeFileReader = new Mock <IFileReader>();
            var fakeValidator  = new Mock <IValidator>();

            fakeValidator.Setup(s => s.IsValid(It.IsAny <object>())).Returns(true);
            var importService = new MockImportService(fakeProductService.Object, mockCourierService.Object,
                                                      fakeSupplierService.Object, fakeFileReader.Object, fakeValidator.Object, fakeJsonService.Object);

            //Act
            importService.ExposedImportCouriersFunction();

            //Assert
            Assert.IsTrue(importService.ExposedValidCouriers.Any(a => a.FirstName == fakeCourier.FirstName && a.LastName == fakeCourier.LastName));
        }
        public void ReturnCorrectMessage_WhenMethodReturns()
        {
            //Arrange
            var fakeProductService  = new Mock <IProductService>();
            var mockCourierService  = new Mock <ICourierService>();
            var fakeSupplierService = new Mock <ISupplierService>();

            mockCourierService.Setup(s => s.CourierExistsByName(It.IsAny <string>(), It.IsAny <string>())).Returns(false);
            var fakeJsonService = new Mock <IJsonService>();
            var fakeCourier1    = new CourierImportModel()
            {
                FirstName = "Pesho",
                LastName  = "Goshov"
            };
            var fakeCourier2 = new CourierImportModel();

            fakeJsonService.Setup(s => s.DeserializeCouriers(It.IsAny <string>())).Returns(new[] { fakeCourier1, fakeCourier2 });
            var fakeFileReader = new Mock <IFileReader>();
            var fakeValidator  = new Mock <IValidator>();

            fakeValidator.SetupSequence(s => s.IsValid(It.IsAny <object>())).Returns(true).Returns(false);
            var importService = new MockImportService(fakeProductService.Object, mockCourierService.Object,
                                                      fakeSupplierService.Object, fakeFileReader.Object, fakeValidator.Object, fakeJsonService.Object);
            string expectedMessage =
                $"Courier {fakeCourier1.FirstName} {fakeCourier1.LastName} added successfully!\r\n" +
                "Import rejected. Input is with invalid format.\r\n";
            //Act
            string actualMessage = importService.ExposedImportCouriersFunction();

            //Assert
            Assert.AreEqual(expectedMessage, actualMessage);
        }
        public void ReturnsCorrectMessage_WhenModelIsValidAndCourierExists()
        {
            //Arrange
            var fakeProductService  = new Mock <IProductService>();
            var mockCourierService  = new Mock <ICourierService>();
            var fakeSupplierService = new Mock <ISupplierService>();

            mockCourierService.Setup(s => s.CourierExistsByName(It.IsAny <string>(), It.IsAny <string>())).Returns(true);
            var fakeJsonService = new Mock <IJsonService>();
            var fakeCourier     = new CourierImportModel()
            {
                FirstName = "Pesho",
                LastName  = "Goshov"
            };

            fakeJsonService.Setup(s => s.DeserializeCouriers(It.IsAny <string>())).Returns(new[] { fakeCourier });
            var fakeFileReader = new Mock <IFileReader>();
            var fakeValidator  = new Mock <IValidator>();

            fakeValidator.Setup(s => s.IsValid(It.IsAny <object>())).Returns(true);
            var importService = new MockImportService(fakeProductService.Object, mockCourierService.Object,
                                                      fakeSupplierService.Object, fakeFileReader.Object, fakeValidator.Object, fakeJsonService.Object);
            string expectedMessage = $"Courier {fakeCourier.FirstName} {fakeCourier.LastName} already exists!\r\n";
            //Act
            string actualMessage = importService.ExposedImportCouriersFunction();

            //Assert
            Assert.AreEqual(expectedMessage, actualMessage);
        }