public void GetManifestItemShouldThrowIfAncestorIsNegative([ManifestModel] ModelToManifestConversionContext context,
                                                                   ContextToRecursiveManifestItemConverter sut)
        {
            context.ConversionType = ModelToManifestConversionType.RecursiveManifestValue;
            context.CurrentValue.ValidateRecursivelyAsAncestor = -1;

            Assert.That(() => sut.GetManifestItem(context), Throws.InstanceOf <ValidationException>());
        }
        public void GetManifestItemShouldThrowIfNotEnoughAncestors([ManifestModel] ModelToManifestConversionContext context,
                                                                   ContextToRecursiveManifestItemConverter sut,
                                                                   [ManifestModel] ManifestValue parent,
                                                                   [ManifestModel] ManifestValue grandparent)
        {
            parent.Parent = grandparent;
            context.ParentManifestValue = parent;
            grandparent.Parent          = null;
            context.ConversionType      = ModelToManifestConversionType.RecursiveManifestValue;
            context.CurrentValue.ValidateRecursivelyAsAncestor = 3;

            Assert.That(() => sut.GetManifestItem(context), Throws.InstanceOf <ValidationException>());
        }
        public void GetManifestItemShouldReturnARecuriveManifestItem([ManifestModel] ModelToManifestConversionContext context,
                                                                     ContextToRecursiveManifestItemConverter sut,
                                                                     [ManifestModel] ManifestValue parent,
                                                                     [ManifestModel] ManifestValue grandparent)
        {
            parent.Parent = grandparent;
            context.ParentManifestValue = parent;
            context.ConversionType      = ModelToManifestConversionType.RecursiveManifestValue;
            context.CurrentValue.ValidateRecursivelyAsAncestor = 2;

            var result = sut.GetManifestItem(context);

            Assert.Multiple(() =>
            {
                Assert.That(result, Is.InstanceOf <RecursiveManifestValue>(), "Correct type");
                Assert.That(result, Has.Property(nameof(RecursiveManifestValue.WrappedValue)).SameAs(grandparent), "Correct wrapped value");
                Assert.That(result, Has.Property(nameof(IManifestValue.MemberName)).EqualTo(context.MemberName), "Correct member name");
                Assert.That(result, Has.Property(nameof(IManifestValue.AccessorFromParent)).EqualTo(context.AccessorFromParent), "Correct accessor");
                Assert.That(parent.Children, Does.Contain(result), "Parent contains the result");
            });
        }