public void AddNewSoftwareReturnAddedSoftware()
      {
         //Arrange 
         var customerRepository = new StubICustomerRepository();
         var orderRepository = new StubIOrderRepository();
         var productRepository = new StubIProductRepository();

         productRepository.UnitOfWorkGet = () =>
         {
            var uow = new StubIUnitOfWork();
            uow.Commit = () => { };

            return uow;
         };

         productRepository.AddProduct = (product) => { };

         var salesManagement = new SalesAppService(productRepository, orderRepository, customerRepository);

         var dto = new SoftwareDto()
         {
            Title = "The title",
            Description = "description",
            LicenseCode = "license code",
            AmountInStock = 10,
            UnitPrice = 10
         };

         //Act
         var result = salesManagement.AddNewSoftware(dto);

         //Assert
         Assert.IsNotNull(result);
         Assert.IsTrue(result.Id != Guid.Empty);
         Assert.AreEqual(result.Title, dto.Title);
         Assert.AreEqual(result.Description, dto.Description);
         Assert.AreEqual(result.LicenseCode, dto.LicenseCode);
         Assert.AreEqual(result.AmountInStock, dto.AmountInStock);
         Assert.AreEqual(result.UnitPrice, dto.UnitPrice);
      }
      public void AddNewSoftwareWithNullDataThrowArgumentException()
      {
         //Arrange 
         var customerRepository = new StubICustomerRepository();
         var productRepository = new StubIProductRepository();
         var orderRepository = new StubIOrderRepository();

         var salesManagement = new SalesAppService(productRepository, orderRepository, customerRepository);

         //Act

         var result = salesManagement.AddNewSoftware(null);
      }
      public void AddNewSoftwareThrowExceptionWhenDataIsInvalid()
      {
         //Arrange 
         var customerRepository = new StubICustomerRepository();
         var productRepository = new StubIProductRepository();
         var orderRepository = new StubIOrderRepository();

         var salesManagement = new SalesAppService(productRepository, orderRepository, customerRepository);

         var dto = new SoftwareDto()
         {
            Title = "The title",
            Description = "the description",
            LicenseCode = "license",
            AmountInStock = 10,
            UnitPrice = -1 //this is a not valid value
         };

         //Act
         var result = salesManagement.AddNewSoftware(dto);
      }
        public void AddNewSoftwareWithNullDataReturnNull()
        {
            //Arrange
            var adapter = PrepareTypeAdapter();
            var customerRepository = new SICustomerRepository();
            var productRepository = new SIProductRepository();
            var orderRepository = new SIOrderRepository();

            var salesManagement = new SalesAppService(adapter, productRepository, orderRepository,customerRepository);

            //Act

            var result = salesManagement.AddNewSoftware(null);

            //Assert
            Assert.IsNull(result);
        }