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_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());
        }
        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_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_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());
        }