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)); } }
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)); }
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)); }