public void LinkFieldSerialization(IServiceProvider serviceProvider, IObjectRepositoryContainer container, string name, string path)
        {
            // Arrange
            var sut       = CreateJsonRepositorySerializer(serviceProvider, new ModelObjectSerializationContext(container));
            var link      = new LazyLink <Page>(container, new ObjectPath(UniqueId.CreateNew(), path));
            var linkField = new Field.Builder(serviceProvider)
            {
                Id      = UniqueId.CreateNew(),
                Name    = name,
                Content = FieldContent.NewLink(new FieldLinkContent(link))
            }.ToImmutable();

            // Act
            var json = Serialize(sut, linkField);

            using (var stream = new MemoryStream(Encoding.Default.GetBytes(json)))
            {
                var deserialized         = (Field)sut.Deserialize(stream, _ => throw new NotSupportedException());
                var deserializedLazyLink = deserialized.Content.MatchOrDefault(matchLink: c => c.Target);

                // Assert
                Assert.That(deserialized.Id, Is.EqualTo(linkField.Id));
                Assert.That(deserialized.Name, Is.EqualTo(name));
                Assert.That(deserializedLazyLink.Path.Path, Is.EqualTo(path));
            }
        }
Пример #2
0
        public void LinkWithWrongObjectPathIsDetected(IObjectRepositoryContainer container, ObjectRepository repository)
        {
            // Arrange
            var linkField = repository.Flatten().OfType <Field>().FirstOrDefault(
                f => f.Content.MatchOrDefault(matchLink: l => true));

            // Act
            var failingLink = new LazyLink <Page>(container, new ObjectPath(linkField.Repository.Id, "foo"));
            var modified    = repository.With(linkField, f => f.Content, FieldContent.NewLink(new FieldLinkContent(failingLink)));
            var result      = modified.Repository.Validate();

            // Assert
            Assert.That(result, Has.Property(nameof(ValidationResult.IsValid)).False);
            Assert.That(result.Errors, Has.Count.EqualTo(1));
            Assert.That(result.ToString(), Does.Contain("Unexisting object"));
            Assert.That(result.Errors[0], Has.Property(nameof(ValidationFailure.PropertyName)).EqualTo("Content.fieldLinkContent.<Target>k__BackingField.Path"));
            Assert.That(result.Errors[0].Context.Instance, Is.EqualTo(modified));
            Assert.That(result.Errors[0].Context.Parent.Instance, Is.EqualTo(modified.Parent));
        }
Пример #3
0
        public void LazyLinkDoesNotCacheLambdaResult(Field parent, Page page)
        {
            // Arrange
            var count = 0;
            var sut   = new LazyLink <Page>(parent.Container, () =>
            {
                count++;
                return(page);
            });

            // Act
            var resolved         = sut.Link;
            var yetAgainResolved = sut.Link;

            // Assert
            Assert.That(resolved, Is.SameAs(page));
            Assert.That(yetAgainResolved, Is.SameAs(page));
            Assert.That(count, Is.EqualTo(2));
        }