public void CreateParameterTest_NoScript_Success()
        {
            var parameterResource = new ParameterResource();

            _scriptRepository.Setup(sr => sr.GetAsync(1)).Returns(Task.Run(() => default(Script)));

            var scriptMappingProfile = new Mock <IScriptMappingProfile>();

            var dateTime = new Mock <IDateTime>();

            dateTime.Setup(dt => dt.Now).Returns(new System.DateTime());

            var createParameterCommand = new CreateParameterCommand.Handler(
                _scriptRepository.Object, _parameterRepository.Object,
                _unitOfWork.Object, scriptMappingProfile.Object, dateTime.Object);

            var command = new CreateParameterCommand
            {
                ScriptId     = 1,
                Name         = "new",
                ValueOptions = new List <ValueOptionResource>()
            };

            Assert.ThrowsAsync <NotFoundException>(() => createParameterCommand.Handle(command, CancellationToken.None));
        }
        public void CreateParameterTest_Success()
        {
            var parameterResource = new ParameterResource();
            var parameter         = new Parameter();

            _scriptRepository.Setup(sr => sr.GetAsync(1))
            .Returns(Task.Run(() => new Script()));
            _parameterRepository.Setup(pr => pr.AddAsync(parameter))
            .Returns(Task.FromResult(default(object)));
            _unitOfWork.Setup(uow => uow.CompleteAsync())
            .Returns(Task.FromResult(1));

            var scriptMappingProfile = new Mock <IScriptMappingProfile>();

            var dateTime = new Mock <IDateTime>();

            dateTime.Setup(dt => dt.Now).Returns(new System.DateTime());

            var createParameterCommand = new CreateParameterCommand.Handler(
                _scriptRepository.Object, _parameterRepository.Object,
                _unitOfWork.Object, scriptMappingProfile.Object, dateTime.Object);

            var cancellationToken = CancellationToken.None;
            var command           = new CreateParameterCommand
            {
                ScriptId     = 1,
                Name         = "new",
                ValueOptions = new List <ValueOptionResource>()
            };
            var result = createParameterCommand.Handle(command, cancellationToken).Result;

            _parameterRepository.Verify(pr => pr.AddAsync(It.IsAny <Parameter>()));
            _unitOfWork.Verify(sr => sr.CompleteAsync(cancellationToken));
            scriptMappingProfile.Verify(smp => smp.UpdateValueOptions(command.ValueOptions, It.IsAny <Parameter>()));
            scriptMappingProfile.Verify(smp => smp.RemoveNotAddedValueOptions(command.ValueOptions, It.IsAny <Parameter>()));
            scriptMappingProfile.Verify(smp => smp.AddNewValueOptions(command.ValueOptions, It.IsAny <Parameter>()));
            dateTime.Verify(dt => dt.Now);
            Assert.That(result, Is.Not.Null);
        }