Exemple #1
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }