public static async Task RegisteredType_NullLink( Guid id, Guid parentId, UnequalNonNullPair <NonEmptyString> routes, JsonSerializerSettings serializerSettings) { if (serializerSettings is null) { throw new ArgumentNullException(nameof(serializerSettings)); } var dto = new Registered { Id = id, ParentId = parentId, }; var(route, parentRoute) = routes; var builder = new TransformationMap.Builder <Registered>(r => Const(new Uri($"https://example.invalid/registered/{r.Id}"))); ITransformationMap <Registered> transformationMap = builder; _ = transformationMap.Link("up", _ => (ILinkData?)null); var map = new Dictionary <Type, ITransformationInstructions> { [typeof(Registered)] = builder, }; await using var serviceProvider = new ServiceCollection() .AddScoped <ILinkBuilder <Constant>, LinkBuilder.Constant>() .BuildServiceProvider(); var repo = new HalRepository(map, serviceProvider); serializerSettings.Converters.Add(new LinkCollection.Converter()); var sut = new HalJsonOutputFormatter(serializerSettings, ArrayPool <char> .Shared, new MvcOptions(), repo); using var writer = new StringWriter(); var context = new OutputFormatterWriteContext( new DefaultHttpContext(), (_, _) => writer, typeof(Registered), dto); await sut.WriteResponseBodyAsync(context, new UTF8Encoding(encoderShouldEmitUTF8Identifier : false)).ConfigureAwait(false); var actual = JsonConvert.DeserializeObject <HollowHal>(writer.ToString(), serializerSettings); Assert.NotNull(actual); Assert.Empty(actual.Embedded); Assert.NotNull(actual.Links); var(rel, link) = Assert.Single(actual.Links); Assert.Equal("self", rel); Assert.Equal($"https://example.invalid/registered/{id}", link.Href); }
public static void UnregisteredType_CannotWriteResult(JsonSerializerSettings serializerSettings) { // arrange var repo = new HalRepository(ImmutableDictionary <Type, ITransformationInstructions> .Empty, new ServiceCollection().BuildServiceProvider()); var sut = new HalJsonOutputFormatter(serializerSettings, ArrayPool <char> .Shared, repo); var context = new OutputFormatterWriteContext(new DefaultHttpContext(), (_, __) => new StreamWriter(Stream.Null), typeof(Unregistered), null); // act var actual = sut.CanWriteResult(context); // assert Assert.False(actual); }
public static void RegisteredType_CanWriteResult(JsonSerializerSettings serializerSettings) { // arrange var map = new Dictionary <Type, ITransformationInstructions> { [typeof(Registered)] = new TransformationMap.Builder <Registered>(_ => Const(new Uri("about:blank", Absolute))) }; var repo = new HalRepository(map, new ServiceCollection().BuildServiceProvider()); var sut = new HalJsonOutputFormatter(serializerSettings, ArrayPool <char> .Shared, repo); var context = new OutputFormatterWriteContext(new DefaultHttpContext(), (_, __) => new StreamWriter(Stream.Null), typeof(Registered), null); // act var actual = sut.CanWriteResult(context); //assert Assert.True(actual); }
public static async Task RegisteredType_SelfLink(Guid id, JsonSerializerSettings serializerSettings) { if (serializerSettings is null) { throw new ArgumentNullException(nameof(serializerSettings)); } var dto = new Registered { Id = id, }; var map = new Dictionary <Type, ITransformationInstructions> { [typeof(Registered)] = new TransformationMap.Builder <Registered>( r => Const(new Uri($"https://example.invalid/registered/{r.Id}"))), }; await using var serviceProvider = new ServiceCollection() .AddScoped <ILinkBuilder <Constant>, LinkBuilder.Constant>() .BuildServiceProvider(); var repo = new HalRepository(map, serviceProvider); serializerSettings.Converters.Add(new LinkCollection.Converter()); var sut = new HalJsonOutputFormatter(serializerSettings, ArrayPool <char> .Shared, new MvcOptions(), repo); using var writer = new StringWriter(); var context = new OutputFormatterWriteContext( new DefaultHttpContext(), (_, _) => writer, typeof(Registered), dto); await sut.WriteResponseBodyAsync(context, new UTF8Encoding(encoderShouldEmitUTF8Identifier : false)).ConfigureAwait(false); var actual = JsonConvert.DeserializeObject <HollowHal>(writer.ToString(), serializerSettings); Assert.NotNull(actual); Assert.Empty(actual.Embedded); Assert.NotNull(actual.Links); Assert.Equal(1, actual.Links.Count); var self = Assert.Contains(Relations.Self, actual.Links); Assert.NotNull(self); Assert.Equal($"https://example.invalid/registered/{id}", self.Href); }
public static async Task UnregisteredType_NotModified(Guid id, JsonSerializerSettings serializerSettings) { var dto = new Unregistered { Id = id, }; using var svc = new ServiceContainer(); var repo = new HalRepository(ImmutableDictionary <Type, ITransformationInstructions> .Empty, svc); var sut = new HalJsonOutputFormatter(serializerSettings, ArrayPool <char> .Shared, new MvcOptions(), repo); await using var writer = new StringWriter(); var context = new OutputFormatterWriteContext( new DefaultHttpContext(), (_, _) => writer, typeof(Unregistered), dto); await sut.WriteResponseBodyAsync(context, new UTF8Encoding(encoderShouldEmitUTF8Identifier : false)).ConfigureAwait(false); var actual = JsonConvert.DeserializeObject <Unregistered>(writer.ToString(), serializerSettings); Assert.Equal(id, actual.Id); }