public void RegisterPackage_AddsPackageToDatabase()
        {
            var mockSet     = MockDbSetHelper.CreateMockSet(new Package[] { }.AsQueryable());
            var mockContext = new Mock <InstantDeliveryContext>();

            mockContext.Setup(m => m.Packages).Returns(mockSet.Object);
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List <PackageEvent>());
            var pricingMock = new Mock <IPricingStrategy>();
            var package     = new Package
            {
                Width  = 100,
                Height = 200,
                Length = 150,
                Weight = 100
            };

            var controller = new PackagesController(mockContext.Object, pricingMock.Object);
            var packageDto = new PackageDto();

            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));
            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.IsAny <Package>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
        public void RegisterPackage_ForValidatedPackage_ShouldAddNewPackage()
        {
            var package = new Package
            {
                Id     = 1,
                Height = 100,
                Weight = 100,
                Width  = 100,
                Length = 100,
                Status = PackageStatus.InWarehouse
            };
            var packages        = new List <Package>().AsQueryable();
            var packagesMockSet = MockDbSetHelper.CreateMockSet(packages);

            var mockContext = new Mock <InstantDeliveryContext>();

            mockContext.Setup(c => c.Packages).Returns(packagesMockSet.Object);
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List <PackageEvent>());
            var pricingStrategy = new Mock <IPricingStrategy>().Object;
            var controller      = new PackagesController(mockContext.Object, pricingStrategy);
            var packageDto      = new PackageDto();

            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));
            controller.RegisterPackage(packageDto);

            packagesMockSet.Verify(m => m.Add(It.IsAny <Package>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
        public void RegisterPackage_SetsStatusToNew()
        {
            var mockContext = GetEmptyMockContext();

            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List <PackageEvent>());
            var mockPricingStrategy = new Mock <IPricingStrategy>();
            var controller          = new PackagesController(mockContext.Object, mockPricingStrategy.Object);

            var package    = new Package();
            var packageDto = new PackageDto();

            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));

            controller.RegisterPackage(packageDto);

            Assert.Equal(PackageStatus.InWarehouse, package.Status);
        }
        public void RegisterPackage_ShouldAddEventToPackageHistory()
        {
            var mockSet     = new Mock <IDbSet <PackageEvent> >();
            var mockContext = new Mock <InstantDeliveryContext>();

            mockContext.Setup(c => c.Packages).ReturnsDbSet(new List <Package>());
            mockContext.Setup(c => c.PackageEvents).Returns(mockSet.Object);
            var packageDto = new PackageDto {
                Id = 1
            };

            var mockPricingStrategy = new Mock <IPricingStrategy>();
            var controller          = new PackagesController(mockContext.Object, mockPricingStrategy.Object);

            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.Is((PackageEvent p) => p.Package.Id == 1 &&
                                            p.EventType == PackageEventType.RegisteredInWarehouse)), Times.Once());
        }
        public void RegisterPackage_AssignsCostToThePackage()
        {
            var mockSet     = new Mock <IDbSet <Package> >();
            var mockContext = new Mock <InstantDeliveryContext>();

            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List <PackageEvent>());
            mockContext.Setup(m => m.Packages).Returns(mockSet.Object);
            var packageDto = new PackageDto();

            var mockPricingStrategy = new Mock <IPricingStrategy>();

            mockPricingStrategy.Setup(m => m.GetCost(packageDto)).Returns(10M);

            var controller = new PackagesController(mockContext.Object, mockPricingStrategy.Object);

            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.Is((Package p) => p.Cost == 10M)), Times.Once());
        }