public void GetValueToBeValidatedShouldExposeTheCorrectValueWhenItIsReadable(ValueToBeValidatedProvider sut,
                                                                              [ManifestModel] ManifestValue manifestValue,
                                                                              object parentValue,
                                                                              ResolvedValidationOptions validationOptions,
                                                                              object expected)
 {
     manifestValue.AccessorFromParent = obj => expected;
     Assert.That(() => sut.GetValueToBeValidated(manifestValue, parentValue, validationOptions),
                 Has.Property(nameof(SuccessfulGetValueToBeValidatedResponse.Value)).EqualTo(expected));
 }
 public void GetValueToBeValidatedShouldReturnErrorResultIfAccessorThrowsAndExceptionBehaviourIsError([Frozen] IGetsAccessorExceptionBehaviour behaviourProvider,
                                                                                                      ValueToBeValidatedProvider sut,
                                                                                                      [ManifestModel] ManifestValue manifestValue,
                                                                                                      object parentValue,
                                                                                                      ResolvedValidationOptions validationOptions,
                                                                                                      Exception exception)
 {
     Mock.Get(behaviourProvider).Setup(x => x.GetBehaviour(manifestValue, validationOptions)).Returns(ValueAccessExceptionBehaviour.TreatAsError);
     manifestValue.AccessorFromParent = obj => throw exception;
     Assert.That(() => sut.GetValueToBeValidated(manifestValue, parentValue, validationOptions), Is.InstanceOf <ErrorGetValueToBeValidatedResponse>());
 }
 public void GetValueToBeValidatedShouldThrowIfTheAccessorThrowsAndExceptionBehaviourIsThrow([Frozen] IGetsAccessorExceptionBehaviour behaviourProvider,
                                                                                             ValueToBeValidatedProvider sut,
                                                                                             [ManifestModel] ManifestValue manifestValue,
                                                                                             object parentValue,
                                                                                             ResolvedValidationOptions validationOptions,
                                                                                             Exception exception)
 {
     Mock.Get(behaviourProvider).Setup(x => x.GetBehaviour(manifestValue, validationOptions)).Returns(ValueAccessExceptionBehaviour.Throw);
     manifestValue.AccessorFromParent = obj => throw exception;
     Assert.That(() => sut.GetValueToBeValidated(manifestValue, parentValue, validationOptions),
                 Throws.InstanceOf <ValidationException>().And.InnerException.SameAs(exception));
 }
 public void GetValueToBeValidatedShouldReturnIgnoredResultIfTheParentValueIsNull(ValueToBeValidatedProvider sut,
                                                                                  [ManifestModel] ManifestValue manifestValue,
                                                                                  ResolvedValidationOptions validationOptions)
 {
     Assert.That(() => sut.GetValueToBeValidated(manifestValue, null, validationOptions), Is.InstanceOf <IgnoredGetValueToBeValidatedResponse>());
 }
 public void GetValueToBeValidatedShouldReturnSuccessResponseIfTheValueIsReadable(ValueToBeValidatedProvider sut,
                                                                                  [ManifestModel] ManifestValue manifestValue,
                                                                                  object parentValue,
                                                                                  ResolvedValidationOptions validationOptions,
                                                                                  object value)
 {
     manifestValue.AccessorFromParent = obj => value;
     Assert.That(() => sut.GetValueToBeValidated(manifestValue, parentValue, validationOptions), Is.InstanceOf <SuccessfulGetValueToBeValidatedResponse>());
 }