public void DutyChangesCopied()
        {
            // Arrange
            List<PairingDutyChange> dutyChanges = GetDutyChanges();

            IDataAccess dataAccess = GetMockDataAccess(dutyChanges);
            var sut = new UpdateCPDutyJob();

            // Act
            JobResult result = this.RunJob(sut, dataAccess);

            // Assert
            Assert.AreEqual(Result.Success, result.Result, this.JobOutput);

            IList<object[]> arguments = dataAccess.GetArgumentsForCallsMadeOn(x => x.Save<CPDutyChange>(null, false));
            var savedDutyChanges = (IEnumerable<CPDutyChange>)arguments[0][0];
            Assert.AreEqual(1, savedDutyChanges.Count());

            PairingDutyChange original = dutyChanges[0];
            CPDutyChange dutyChange = savedDutyChanges.First();

            Assert.AreEqual(original.Pairing.StartDate.ToString("d-MMM HH:mm"), dutyChange.DutySignOn);
            Assert.AreEqual(original.Pairing.EndDate.ToString("d-MMM HH:mm"), dutyChange.DutySignOff);
            Assert.AreEqual(original.Pairing.Label, dutyChange.Duty);
            Assert.AreEqual(original.Pairing.Port.IataCode + original.Pairing.ToPort.IataCode, dutyChange.DutyFromTo);
            Assert.AreEqual(1, dutyChange.EmployeeId);

            dataAccess.VerifyAllExpectations();
        }
        public void AcknowledgedDutyChangesCopiedBack()
        {
            // Arrange
            List<PairingDutyChange> dutyChanges = GetDutyChanges();

            IDataAccess dataAccess = GetMockDataAccess(dutyChanges);
            var sut = new UpdateCPDutyJob();
            var parameters = new List<JobParameter>
            {
                new JobParameter { Name = "ShowDutyHoursBefore",  Value = "1" },
                new JobParameter { Name = "ShowDutyHoursAfter",  Value = "1" },
            };

            // Act
            JobResult result = this.RunJob(sut, dataAccess, parameters.ToDictionary(jp => jp.Name));

            // Assert
            Assert.AreEqual(Result.Success, result.Result, this.JobOutput);

            IList<object[]> arguments = dataAccess.GetArgumentsForCallsMadeOn(x => x.Save<PairingDutyChangeEmployee>(null));
            Assert.AreEqual(1, arguments.Count, "Save should be called once.");
            Assert.IsNotNull(arguments[0][0]);
            var entities = arguments[0][0] as IEnumerable<PairingDutyChangeEmployee>;
            Assert.IsNotNull(entities);
            PairingDutyChangeEmployee entity = entities.FirstOrDefault();
            Assert.IsNotNull(entity);
            Assert.AreEqual(1, entity.AcknowledgedBy);
            Assert.AreEqual(2, entity.AcknowledgedType);
            Assert.AreEqual(new DateTime(2011, 1, 1), entity.AcknowledgedDate);
            Assert.AreEqual(2, entity.EmployeeId);
            dataAccess.VerifyAllExpectations();
        }
        public void OldDutyChangesDeleted()
        {
            // Arrange
            List<PairingDutyChange> dutyChanges = GetDutyChanges();

            IDataAccess dataAccess = GetMockDataAccess(dutyChanges);
            var sut = new UpdateCPDutyJob();

            // Act
            JobResult result = this.RunJob(sut, dataAccess);

            // Assert
            Assert.AreEqual(Result.Success, result.Result, this.JobOutput);

            // dataAccess.AssertWasCalled(x=>x.Delete(null), Arg)
            IList<object[]> arguments = dataAccess.GetArgumentsForCallsMadeOn(x => x.Delete<CPDutyChange>(null));
            Assert.IsNotNull(arguments[0][0]);

            dataAccess.VerifyAllExpectations();
        }