public void MarkAsDelivered_ShouldAddEventToPackageHistory()
        {
            var package = new Package {
                Id = 1, Status = PackageStatus.InDelivery
            };
            var employee = new Employee {
                Id = 1
            };

            employee.Packages.Add(package);

            var mockSet     = new Mock <IDbSet <PackageEvent> >();
            var mockContext = GetEmptyMockContext();

            mockContext.Setup(c => c.Packages).ReturnsDbSet(package);
            mockContext.Setup(c => c.Employees).ReturnsDbSet(employee);
            mockContext.Setup(c => c.PackageEvents).Returns(mockSet.Object);

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

            controller.MarkAsDelivered(package.Id);

            mockSet.Verify(m => m.Add(It.Is((PackageEvent pe) => pe.Package.Id == package.Id &&
                                            pe.Employee.Id == employee.Id &&
                                            pe.EventType == PackageEventType.Delivered)));
        }
        public void MarkAsDelivered_ShouldRemovePackageFromEmployeeCollection()
        {
            var package = new Package {
                Id = 1, Status = PackageStatus.InDelivery
            };
            var employee = new Employee {
                Id = 1
            };

            employee.Packages.Add(package);
            var mockContext = GetEmptyMockContext();

            mockContext.Setup(c => c.Packages).ReturnsDbSet(package);
            mockContext.Setup(c => c.Employees).ReturnsDbSet(employee);
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List <PackageEvent>());

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

            controller.MarkAsDelivered(package.Id);

            Assert.Equal(employee.Packages.Count, 0);
        }