public async Task ThenTheRepositoryIsCalledToRetrieveDataLock()
        {
            //Arrange
            var command = new TriageDataLockCommand();

            //Act
            await _handler.Handle(command);

            //Assert
            _dataLockRepository.Verify(x => x.GetDataLock(It.IsAny <long>()));
        }
        public async Task ThenTheCommandIsValidated()
        {
            //Arrange
            var command = new TriageDataLockCommand();

            //Act
            await _handler.Handle(command);

            //Assert
            _validator.Verify(x => x.Validate(It.IsAny <TriageDataLockCommand>()), Times.Once);
        }
        public void ThenDataLockEventIdMustBeSpecified()
        {
            //Arrange
            var command = new TriageDataLockCommand();

            //Act
            var result = _validator.Validate(command);

            //Assert
            Assert.IsFalse(result.IsValid);
            Assert.IsTrue(result.Errors.Any(x => x.PropertyName.Contains(nameof(TriageDataLockCommand.DataLockEventId))));
        }
        public async Task ThenTheRepositoryIsCalledToUpdateTriageStatus()
        {
            //Arrange
            var command = new TriageDataLockCommand
            {
                TriageStatus = TriageStatus.Restart
            };

            //Act
            await _handler.Handle(command);

            //Assert
            _dataLockRepository.Verify(x => x.UpdateDataLockTriageStatus(
                                           It.IsAny <long>(), It.IsAny <TriageStatus>()),
                                       Times.Once);
        }
        public void ThenIfAnOutstandingApprenticeshipUpdateExistsThenAnExceptionIsThrown()
        {
            //Arrange
            _apprenticeshipUpdateRepository.Setup(x => x.GetPendingApprenticeshipUpdate(It.IsAny <long>()))
            .ReturnsAsync(new ApprenticeshipUpdate());

            var command = new TriageDataLockCommand
            {
                TriageStatus = TriageStatus.Restart
            };

            //Act & Assert
            Func <Task> act = async() => await _handler.Handle(command);

            act.ShouldThrow <ValidationException>();
        }
        public async Task ThenIfTriageStatusIsUnchangedThenNoUpdateIsMade()
        {
            //Arrange
            var command = new TriageDataLockCommand
            {
                TriageStatus = TriageStatus.Restart
            };

            _dataLockRepository.Setup(x => x.GetDataLock(It.IsAny <long>()))
            .ReturnsAsync(new DataLockStatus
            {
                TriageStatus = TriageStatus.Restart
            });

            //Act
            await _handler.Handle(command);

            //Assert
            _dataLockRepository.Verify(x => x.UpdateDataLockTriageStatus(
                                           It.IsAny <long>(), It.IsAny <TriageStatus>()),
                                       Times.Never);
        }