public void Can_Deserialize_Object_With_HasManyRelationship() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <OneToManyIndependent>("independents"); resourceGraphBuilder.AddResource <OneToManyDependent>("dependents"); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); jsonApiContextMock.Setup(m => m.RelationshipsToUpdate).Returns(new Dictionary <RelationshipAttribute, object>()); jsonApiContextMock.Setup(m => m.HasManyRelationshipPointers).Returns(new HasManyRelationshipPointers()); var jsonApiOptions = new JsonApiOptions(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var contentString = @"{ ""data"": { ""type"": ""independents"", ""id"": ""1"", ""attributes"": { }, ""relationships"": { ""dependents"": { ""data"": [ { ""type"": ""dependents"", ""id"": ""2"" } ] } } } }"; // act var result = deserializer.Deserialize <OneToManyIndependent>(contentString); // assert Assert.NotNull(result); Assert.Equal(1, result.Id); Assert.NotNull(result.Dependents); Assert.NotEmpty(result.Dependents); Assert.Single(result.Dependents); var dependent = result.Dependents[0]; Assert.Equal(2, dependent.Id); }
public void Can_Deserialize_Independent_Side_Of_One_To_One_Relationship_With_Relationship_Body() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <Independent>("independents"); resourceGraphBuilder.AddResource <Dependent>("dependents"); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); jsonApiContextMock.Setup(m => m.HasOneRelationshipPointers).Returns(new HasOneRelationshipPointers()); var jsonApiOptions = new JsonApiOptions(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var property = Guid.NewGuid().ToString(); var content = new Document { Data = new ResourceObject { Type = "independents", Id = "1", Attributes = new Dictionary <string, object> { { "property", property } }, // a common case for this is deserialization in unit tests Relationships = new Dictionary <string, RelationshipData> { { "dependent", new RelationshipData { SingleData = new ResourceIdentifierObject("dependents", "1") } } } } }; var contentString = JsonConvert.SerializeObject(content); // act var result = deserializer.Deserialize <Independent>(contentString); // assert Assert.NotNull(result); Assert.Equal(property, result.Property); Assert.NotNull(result.Dependent); Assert.Equal(1, result.Dependent.Id); }
public QueryParametersUnitTestCollection() { var builder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); builder.AddResource <Article>(); builder.AddResource <Person>(); builder.AddResource <Blog>(); builder.AddResource <Food>(); builder.AddResource <Song>(); _resourceGraph = builder.Build(); _articleResourceContext = _resourceGraph.GetResourceContext <Article>(); }
public QueryParametersUnitTestCollection() { var builder = new ResourceGraphBuilder(); builder.AddResource <Article>(); builder.AddResource <Person>(); builder.AddResource <Blog>(); builder.AddResource <Food>(); builder.AddResource <Song>(); _resourceGraph = builder.Build(); _articleResourceContext = _resourceGraph.GetResourceContext <Article>(); }
public void Sets_The_DocumentMeta_Property_In_JsonApiContext() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <Independent>("independents"); resourceGraphBuilder.AddResource <Dependent>("dependents"); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); var jsonApiOptions = new JsonApiOptions(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var property = Guid.NewGuid().ToString(); var content = new Document { Meta = new Dictionary <string, object>() { { "foo", "bar" } }, Data = new ResourceObject { Type = "independents", Id = "1", Attributes = new Dictionary <string, object> { { "property", property } }, // a common case for this is deserialization in unit tests Relationships = new Dictionary <string, RelationshipData> { { "dependent", new RelationshipData { } } } } }; var contentString = JsonConvert.SerializeObject(content); // act var result = deserializer.Deserialize <Independent>(contentString); // assert jsonApiContextMock.VerifySet(mock => mock.DocumentMeta = content.Meta); }
public static IResourceGraph CreateResourceGraph() { IResourceGraphBuilder builder = new ResourceGraphBuilder(); builder.AddResource <BenchmarkResource>(BenchmarkResourcePublicNames.Type); return(builder.Build()); }
public static IResourceGraph CreateResourceGraph(IJsonApiOptions options) { IResourceGraphBuilder builder = new ResourceGraphBuilder(options, NullLoggerFactory.Instance); builder.AddResource <BenchmarkResource>(BenchmarkResourcePublicNames.Type); return(builder.Build()); }
protected IResponseDeserializer GetDeserializer() { var formatter = GetService <IResourceNameFormatter>(); var resourcesContexts = GetService <IResourceGraph>().GetResourceContexts(); var builder = new ResourceGraphBuilder(formatter); foreach (var rc in resourcesContexts) { if (rc.ResourceType == typeof(TodoItem) || rc.ResourceType == typeof(TodoItemCollection)) { continue; } builder.AddResource(rc.ResourceType, rc.IdentityType, rc.ResourceName); } builder.AddResource <TodoItemClient>(formatter.FormatResourceName(typeof(TodoItem))); builder.AddResource <TodoItemCollectionClient, Guid>(formatter.FormatResourceName(typeof(TodoItemCollection))); return(new ResponseDeserializer(builder.Build())); }
protected IResponseDeserializer GetDeserializer() { var options = GetService <IJsonApiOptions>(); var formatter = new ResourceNameFormatter(options); var resourcesContexts = GetService <IResourceGraph>().GetResourceContexts(); var builder = new ResourceGraphBuilder(options, NullLoggerFactory.Instance); foreach (var rc in resourcesContexts) { if (rc.ResourceType == typeof(TodoItem) || rc.ResourceType == typeof(TodoItemCollection)) { continue; } builder.AddResource(rc.ResourceType, rc.IdentityType, rc.ResourceName); } builder.AddResource <TodoItemClient>(formatter.FormatResourceName(typeof(TodoItem))); builder.AddResource <TodoItemCollectionClient, Guid>(formatter.FormatResourceName(typeof(TodoItemCollection))); return(new ResponseDeserializer(builder.Build(), new ResourceFactory(_factory.ServiceProvider))); }
public void Can_Deserialize_Independent_Side_Of_One_To_One_Relationship() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <Independent>("independents"); resourceGraphBuilder.AddResource <Dependent>("dependents"); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); var jsonApiOptions = new JsonApiOptions(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var property = Guid.NewGuid().ToString(); var content = new Document { Data = new ResourceObject { Type = "independents", Id = "1", Attributes = new Dictionary <string, object> { { "property", property } } } }; var contentString = JsonConvert.SerializeObject(content); // act var result = deserializer.Deserialize <Independent>(contentString); // assert Assert.NotNull(result); Assert.Equal(property, result.Property); }
public void Immutable_Attrs_Are_Not_Included_In_AttributesToUpdate() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <TestResource>("test-resource"); var resourceGraph = resourceGraphBuilder.Build(); var attributesToUpdate = new Dictionary <AttrAttribute, object>(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(attributesToUpdate); var jsonApiOptions = new JsonApiOptions(); jsonApiOptions.SerializerSettings.ContractResolver = new DasherizedResolver(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var content = new Document { Data = new ResourceObject { Type = "test-resource", Id = "1", Attributes = new Dictionary <string, object> { { "complex-member", new Dictionary <string, string> { { "compound-name", "testName" } } }, { "immutable", "value" } } } }; var contentString = JsonConvert.SerializeObject(content); // act var result = deserializer.Deserialize <TestResource>(contentString); // assert Assert.NotNull(result.ComplexMember); Assert.Single(attributesToUpdate); foreach (var attr in attributesToUpdate) { Assert.False(attr.Key.IsImmutable); } }
public void AddDbContext_Does_Not_Throw_If_Context_Contains_Members_That_Do_Not_Implement_IIdentifiable() { // Arrange var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); // Act resourceGraphBuilder.AddResource(typeof(TestContext)); var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build(); // Assert Assert.Empty(resourceGraph.GetResourceContexts()); }
public void GetResourceContext_Yields_Right_Type_For_Identifiable() { // Arrange var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); resourceGraphBuilder.AddResource <Bar>(); var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build(); // Act var result = resourceGraph.GetResourceContext(typeof(Bar)); // Assert Assert.Equal(typeof(Bar), result.ResourceType); }
public void Resources_Without_Names_Specified_Will_Use_Default_Formatter() { // arrange var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // act var graph = builder.Build(); // assert var resource = graph.GetContextEntity(typeof(TestResource)); Assert.Equal("test-resources", resource.EntityName); }
public void Attrs_Without_Names_Specified_Will_Use_Default_Formatter() { // Arrange var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Contains(resource.Attributes, (i) => i.PublicAttributeName == "compoundAttribute"); }
public void Resources_Without_Names_Specified_Will_Use_Configured_Formatter() { // Arrange var builder = new ResourceGraphBuilder(new CamelCaseNameFormatter()); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Equal("testResources", resource.ResourceName); }
public void Attrs_Without_Names_Specified_Will_Use_Default_Formatter() { // arrange var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // act var graph = builder.Build(); // assert var resource = graph.GetContextEntity(typeof(TestResource)); Assert.Equal("compound-attribute", resource.Attributes.Single().PublicAttributeName); }
public void Resources_Without_Names_Specified_Will_Use_Configured_Formatter() { // Arrange var builder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Equal("testResources", resource.ResourceName); }
public void Attrs_Without_Names_Specified_Will_Use_Configured_Formatter() { // Arrange var builder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Contains(resource.Attributes, (i) => i.PublicName == "compoundAttribute"); }
public void Relationships_Without_Names_Specified_Will_Use_Configured_Formatter() { // Arrange var builder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Equal("relatedResource", resource.Relationships.Single(r => r is HasOneAttribute).PublicName); Assert.Equal("relatedResources", resource.Relationships.Single(r => !(r is HasOneAttribute)).PublicName); }
public void Resources_Without_Names_Specified_Will_Use_Configured_Formatter() { // arrange JsonApiOptions.ResourceNameFormatter = new CamelCaseNameFormatter(); var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // act var graph = builder.Build(); // assert var resource = graph.GetContextEntity(typeof(TestResource)); Assert.Equal("testResources", resource.EntityName); }
public void Attrs_Without_Names_Specified_Will_Use_Configured_Formatter() { // arrange JsonApiOptions.ResourceNameFormatter = new CamelCaseNameFormatter(); var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // act var graph = builder.Build(); // assert var resource = graph.GetContextEntity(typeof(TestResource)); Assert.Contains(resource.Attributes, (i) => i.PublicAttributeName == "compoundAttribute"); }
public void Adding_DbContext_Members_That_Do_Not_Implement_IIdentifiable_Logs_Warning() { // Arrange var loggerFactory = new FakeLoggerFactory(); var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), loggerFactory); resourceGraphBuilder.AddResource(typeof(TestContext)); // Act resourceGraphBuilder.Build(); // Assert Assert.Single(loggerFactory.Logger.Messages); Assert.Equal(LogLevel.Warning, loggerFactory.Logger.Messages[0].LogLevel); Assert.Equal("Entity 'UnitTests.Internal.ResourceGraphBuilder_Tests+TestContext' does not implement 'IIdentifiable'.", loggerFactory.Logger.Messages[0].Text); }
public void GetResourceContext_Yields_Right_Type_For_LazyLoadingProxy() { // Arrange var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance); resourceGraphBuilder.AddResource <Bar>(); var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build(); var proxyGenerator = new ProxyGenerator(); // Act var proxy = proxyGenerator.CreateClassProxy <Bar>(); var result = resourceGraph.GetResourceContext(proxy.GetType()); // Assert Assert.Equal(typeof(Bar), result.ResourceType); }
public void Relationships_Without_Names_Specified_Will_Use_Configured_Formatter() { // Arrange var builder = new ResourceGraphBuilder(new JsonApiOptions()); builder.AddResource <TestResource>(); // Act var resourceGraph = builder.Build(); // Assert var resource = resourceGraph.GetResourceContext(typeof(TestResource)); Assert.Equal("relatedResource", resource.Relationships.Single(r => r.IsHasOne).PublicRelationshipName); Assert.Equal("relatedResources", resource.Relationships.Single(r => r.IsHasMany).PublicRelationshipName); }
public void Relationships_Without_Names_Specified_Will_Use_Default_Formatter() { // arrange var builder = new ResourceGraphBuilder(); builder.AddResource <TestResource>(); // act var graph = builder.Build(); // assert var resource = graph.GetContextEntity(typeof(TestResource)); Assert.Equal("related-resource", resource.Relationships.Single(r => r.IsHasOne).PublicRelationshipName); Assert.Equal("related-resources", resource.Relationships.Single(r => r.IsHasMany).PublicRelationshipName); }
public void Can_Serialize_Complex_Types() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <TestResource>("test-resource"); var serializer = GetSerializer(resourceGraphBuilder); var resource = new TestResource { ComplexMember = new ComplexType { CompoundName = "testname" } }; // act var result = serializer.Serialize(resource); // assert Assert.NotNull(result); var expectedFormatted = @"{ ""data"": { ""attributes"": { ""complex-member"": { ""compound-name"": ""testname"" } }, ""relationships"": { ""children"": { ""links"": { ""self"": ""/test-resource//relationships/children"", ""related"": ""/test-resource//children"" } } }, ""type"": ""test-resource"", ""id"": """" } }"; var expected = Regex.Replace(expectedFormatted, @"\s+", ""); Assert.Equal(expected, result); }
public void Can_Deserialize_Complex_Types_With_Dasherized_Attrs() { // arrange var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <TestResource>("test-resource"); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); var jsonApiOptions = new JsonApiOptions(); jsonApiOptions.SerializerSettings.ContractResolver = new DasherizedResolver(); // <-- jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); var deserializer = new JsonApiDeSerializer(jsonApiContextMock.Object); var content = new Document { Data = new ResourceObject { Type = "test-resource", Id = "1", Attributes = new Dictionary <string, object> { { "complex-member", new Dictionary <string, string> { { "compound-name", "testName" } } } } } }; // act var result = deserializer.Deserialize <TestResource>(JsonConvert.SerializeObject(content)); // assert Assert.NotNull(result.ComplexMember); Assert.Equal("testName", result.ComplexMember.CompoundName); }
public JsonApiDeserializer_Benchmarks() { var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <SimpleType>(TYPE_NAME); var resourceGraph = resourceGraphBuilder.Build(); var jsonApiContextMock = new Mock <IJsonApiContext>(); jsonApiContextMock.SetupAllProperties(); jsonApiContextMock.Setup(m => m.ResourceGraph).Returns(resourceGraph); jsonApiContextMock.Setup(m => m.AttributesToUpdate).Returns(new Dictionary <AttrAttribute, object>()); var jsonApiOptions = new JsonApiOptions(); jsonApiOptions.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonApiContextMock.Setup(m => m.Options).Returns(jsonApiOptions); _jsonApiDeSerializer = new JsonApiDeSerializer(jsonApiContextMock.Object); }
protected ResourceServiceTestEnvironmentBase(string resourceName) { _resourceName = resourceName; var resourceGraphBuilder = new ResourceGraphBuilder(); resourceGraphBuilder.AddResource <TResource, string>(_resourceName); SetupResourceGraph(resourceGraphBuilder); ResourceGraph = resourceGraphBuilder.Build(); JsonApiContext = Substitute.For <IJsonApiContext>(); JsonApiContext.ResourceGraph.Returns(ResourceGraph); JsonApiContext.RequestEntity.Returns(ResourceGraph.GetContextEntity(_resourceName)); JsonApiContext.Options.Returns(new JsonApiOptions { IncludeTotalRecordCount = true }); Entities = new MemoryRepository <TEntity>(GetUniqueKeySelectors(), GetInitialData()); var config = new MapperConfiguration(cfg => { cfg.ValidateInlineMaps = false; cfg.AddProfile(new XFMapperProfile(SiteId)); SetupMapper(cfg); }); Mapper = config.CreateMapper(); UserAccessor = Substitute.For <IUserAccessor>(); UserAccessor.IsAuthenticated.Returns(false); SiteOptions = Substitute.For <IOptions <SiteOptions> >(); SiteOptions.Value.Returns(new SiteOptions { Id = SiteId, Name = "xForge", Origin = new Uri("http://" + SiteAuthority), SiteDir = SiteDir, SharedDir = SharedDir }); }