Ejemplo n.º 1
0
        public void Can_Serialize_Complex_Types()
        {
            // arrange
            var contextGraphBuilder = new ContextGraphBuilder();

            contextGraphBuilder.AddResource <TestResource>("test-resource");
            var contextGraph = contextGraphBuilder.Build();

            var jsonApiContextMock = new Mock <IJsonApiContext>();

            jsonApiContextMock.SetupAllProperties();
            jsonApiContextMock.Setup(m => m.ContextGraph).Returns(contextGraph);
            jsonApiContextMock.Setup(m => m.Options).Returns(new JsonApiOptions());
            jsonApiContextMock.Setup(m => m.RequestEntity)
            .Returns(contextGraph.GetContextEntity("test-resource"));
            jsonApiContextMock.Setup(m => m.MetaBuilder).Returns(new MetaBuilder());
            jsonApiContextMock.Setup(m => m.PageManager).Returns(new PageManager());

            var documentBuilder = new DocumentBuilder(jsonApiContextMock.Object);
            var serializer      = new JsonApiSerializer(jsonApiContextMock.Object, documentBuilder);
            var resource        = new TestResource
            {
                ComplexMember = new ComplexType
                {
                    CompoundName = "testname"
                }
            };

            // act
            var result = serializer.Serialize(resource);

            // assert
            Assert.NotNull(result);
            Assert.Equal("{\"data\":{\"attributes\":{\"complex-member\":{\"compound-name\":\"testname\"}},\"type\":\"test-resource\",\"id\":\"\"}}", result);
        }
        public void WorksOnHttpErrors()
        {
            var target = new JsonApiSerializer <PersonResource>();
            var result = target.Serialize(new HttpError(), DefaultUrl);

            _output.WriteLine(result.ToString());

            Assert.Null(result["data"]);
            Assert.NotNull(result["errors"]);
        }
        public void Gives()
        {
            var target        = new JsonApiSerializer <PersonResource>();
            var initialPerson = Get.Person();

            var personJson = target.Serialize(initialPerson, DefaultUrl);
            var dsPerson   = (Person)target.Deserialize(personJson, typeof(Person));

            Assert.Equal(initialPerson.FirstName, dsPerson.FirstName);
        }
        public void UsesConverters()
        {
            var target  = new JsonApiSerializer <CompanyResource>();
            var company = Get.Company();

            target.JsonConverters.Add(new StringEnumConverter());
            var result = target.Serialize(company, DefaultUrl);

            _output.WriteLine(result.ToString());

            Assert.Equal(company.Location.ToString(), result["data"]["attributes"].Value <string>("location"));
        }
Ejemplo n.º 5
0
        public void DoesNotIncludeNullData()
        {
            var target = new JsonApiSerializer <PersonResource>();
            var model  = new Person()
            {
                Identifier = "Id",
                Job        = null
            };

            var result = target.Serialize(model, DefaultUrl);

            Assert.Null(result["data"]["relationships"]["job"]["data"]);
        }
        public void ReturnEmptyModelForUnknownFieldsetExpressions()
        {
            var target = new JsonApiSerializer <CompanyResource>
            {
                AllowQuery = true
            };
            var companies = Get.Companies(1).ToList();
            var result    = target.Serialize(companies, new Uri(DefaultUrl, "?fields[corporation]=Notafield"));

            _output.WriteLine(result.ToString());

            Assert.False(((JToken)result["data"][0]["attributes"]).HasValues);
        }
        private string GetResponseBody(object responseObject, IJsonApiContext jsonApiContext, ILogger logger)
        {
            if (responseObject == null)
            {
                return(GetNullDataResponse());
            }

            if (responseObject.GetType() == typeof(Error) || jsonApiContext.RequestEntity == null)
            {
                return(GetErrorJson(responseObject, logger));
            }

            return(JsonApiSerializer.Serialize(responseObject, jsonApiContext));
        }
        public void UsesQueryFieldsetExpressions()
        {
            var target = new JsonApiSerializer <CompanyResource>
            {
                AllowQuery = true
            };
            var companies = Get.Companies(1).ToList();
            var result    = target.Serialize(companies, new Uri(DefaultUrl, "?fields[corporation]=Name,Location"));

            _output.WriteLine(result.ToString());

            Assert.NotNull(result["data"][0]["attributes"]["name"]);
            Assert.NotNull(result["data"][0]["attributes"]["location"]);
            Assert.Null(result["data"][0]["attributes"]["number-of-employees"]);
        }
        public void UsesUrlBuilder()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                UrlPathBuilder = new CanonicalUrlPathBuilder()
            };

            var result = target.Serialize(Get.Person(), DefaultUrl);

            _output.WriteLine(result.ToString());

            var related = result["data"]["relationships"]["job"]["links"]["related"].Value <Uri>()
                          .AbsolutePath;

            Assert.Equal("/corporations/456/", related);
        }
        public void GivesUsefulErrorForEnumerable()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                AllowQuery = true
            };

            var people = Get.People(100);
            var result = target.Serialize(people, new Uri(DefaultUrl, "?sort=fail-me"));

            _output.WriteLine(result.ToString());

            var error = result["errors"][0];

            Assert.Equal("Attribute 'fail-me' not found.", error["title"].Value <string>());
        }
        public void UsesQueryFieldsetExpressionsOnRelationships()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                AllowQuery = true
            };
            var people = Get.People(1).ToList();
            var result = target.Serialize(people, new Uri(DefaultUrl, "?fields[person]=Job"));

            _output.WriteLine(result.ToString());

            var relationships = result["data"][0]["relationships"];

            Assert.Null(relationships["family-members"]);
            Assert.NotNull(relationships["job"]);
        }
        public void AppliesPagination()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                ItemsPerPage = 5,
                Paginate     = true
            };
            var people = Get.People(20).AsQueryable();
            var result = target.Serialize(people, DefaultUrl);

            _output.WriteLine(result.ToString());

            Assert.Equal(5, result["data"].Count());
            Assert.NotNull(result["links"]["next"]);
            Assert.NotNull(result["links"]["first"]);
            Assert.Null(result["links"]["prev"]);
        }
        public void PropertyInteraction()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                ItemsPerPage = 2,
                Paginate     = false
            };
            var people = Get.People(5);
            var result = target.Serialize(people, DefaultUrl);

            _output.WriteLine(result.ToString());

            Assert.Equal(5, result["data"].Count());
            Assert.Null(result["links"]["next"]);
            Assert.Null(result["links"]["first"]);
            Assert.NotNull(result["links"]["self"]);
        }
        public void AppliesFilters()
        {
            var target = new JsonApiSerializer <CompanyResource>
            {
                AllowQuery = true
            };

            var companies = Get.Companies(100).ToList().AsQueryable();
            var result    = target.Serialize(companies, new Uri(DefaultUrl, "?filter[location]=1"));

            _output.WriteLine(result.ToString());

            var filtered = ((JArray)result["data"]).ToList();

            var expected = companies.Where(x => x.Location == LocationType.National).ToList();

            Assert.Equal(expected.Count, filtered.Count);
        }
        public void when_serializing()
        {
            // Given
            JsonConvert.DefaultSettings = GetJsonSerializerSettings;

            var data = new Thing {
                Id = 5,
                SomeString = "some string value",
                SomeGuid = new Guid("77f8195e-ac2e-4c5f-9d0a-f7663ca24435"),
                NullValue = default(Uri),
                Bert = new Bert
                    {
                        Id = 45,
                        Banaan = "fiets"
                    },
                Ernie = new Ernie
                {
                    Banaan = "peer",
                    Apple = "fiets"
                },
                Fietsen = new []
                    {
                        new Fiets { Id = 6, Naam = "batavia" },
                        new Fiets { Id = 7, Naam = "gazelle" },
                        new Fiets { Id = 8, Naam = "canondale" }
                    }
            };

            string expected = "{\"data\":{\"type\":\"things\",\"id\":\"5\",\"attributes\":{\"some-string\":\"some string value\",\"some-guid\":\"77f8195e-ac2e-4c5f-9d0a-f7663ca24435\",\"null-value\":null,\"ernie\":{\"banaan\":\"peer\",\"apple\":\"fiets\"}},\"relationships\":{\"bert\":{\"data\":{\"type\":\"berts\",\"id\":\"45\"}},\"fietsen\":{\"data\":[{\"type\":\"fiets\",\"id\":\"6\"},{\"type\":\"fiets\",\"id\":\"7\"},{\"type\":\"fiets\",\"id\":\"8\"}]}}}}";

            // When
            string actual;
            using (var stream = new MemoryStream())
            {
                ISerializer sut = new JsonApiSerializer();
                sut.Serialize("application/vnd.api+json", data, stream);
                actual = Encoding.UTF8.GetString(stream.ToArray());
            }

            // Then
            Assert.Equal(expected, actual);
        }
        public void AppliesIncluding()
        {
            var target = new JsonApiSerializer <PersonResource>()
            {
                AllowQuery = true
            };
            var people = Get.People(2).AsQueryable();

            var result = target.Serialize(people, new Uri(DefaultUrl, "?include=job,car"));

            _output.WriteLine(result.ToString());

            var included = ((JArray)result["included"])
                           .Where(x =>
                                  x["type"].Value <string>() == "corporation" ||
                                  x["type"].Value <string>() == "car")
                           .ToList();

            Assert.Equal(2, included.Count);
        }
 private string GetResponseBody(object responseObject, IJsonApiContext jsonApiContext, ILogger logger)
 {
     if (responseObject.GetType() == typeof(Error) || jsonApiContext.RequestEntity == null)
     {
         if (responseObject.GetType() == typeof(Error))
         {
             var errors = new ErrorCollection();
             errors.Add((Error)responseObject);
             return(errors.GetJson());
         }
         else
         {
             logger?.LogInformation("Response was not a JSONAPI entity. Serializing as plain JSON.");
             return(JsonConvert.SerializeObject(responseObject));
         }
     }
     else
     {
         return(JsonApiSerializer.Serialize(responseObject, jsonApiContext));
     }
 }
        public void QueryOrderCorrect()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                AllowQuery   = true,
                Paginate     = true,
                ItemsPerPage = 10
            };

            var people = Get.People(100).AsQueryable();
            var result = target.Serialize(people, new Uri(DefaultUrl, "?sort=-id"));

            _output.WriteLine(result.ToString());

            var ids      = ((JArray)result["data"]).Select(t => t["id"].Value <string>());
            var expected = Enumerable.Range(0, 100)
                           .OrderByDescending(i => i)
                           .Take(10)
                           .Select(i => i.ToString());

            Assert.Equal(expected, ids);
        }
Ejemplo n.º 19
0
        /// <inheritdoc/>
        public override async Task WriteToStreamAsync(
            Type type,
            object value,
            Stream writeStream,
            HttpContent content,
            TransportContext transportContext)
        {
            PreprocessResult preprocessed;

            if (_request.Properties.ContainsKey(Constants.PreprocessResultPropertyName))
            {
                preprocessed = _request.Properties[Constants.PreprocessResultPropertyName]
                               as PreprocessResult;
            }
            else
            {
                // backwards compatibility with old way to do Saule setup
                preprocessed = PreprocessingDelegatingHandler.PreprocessRequest(value, _request, _config);
            }

            var json = JsonApiSerializer.Serialize(preprocessed);

            await WriteJsonToStream(json, writeStream);
        }
        public void AppliesSorting()
        {
            var target = new JsonApiSerializer <PersonResource>
            {
                AllowQuery = true
            };

            // people needs to be > 80 so we always get doubles and we can
            // verify the -id properly
            var people = Get.People(100).AsQueryable();
            var result = target.Serialize(people, new Uri(DefaultUrl, "?sort=+age,-id"));

            _output.WriteLine(result.ToString());

            var props = ((JArray)result["data"]).Select(t => new
            {
                Age = t["attributes"]["age"].Value <int>(),
                Id  = t["id"].Value <string>()
            }).ToList();

            var expected = props.OrderBy(p => p.Age).ThenByDescending(p => p.Id);

            Assert.Equal(expected, props);
        }
        public void HasAContract()
        {
            var target = new JsonApiSerializer <PersonResource>();

            Assert.Throws <ArgumentNullException>(() => target.Serialize(Get.Person(), null));
        }