public void CanBuildRelationsBetweenMutuallyDependentTypes() { //-- Arrange var cache = new TypeMetadataCache(new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true)); //-- Act var orderMetadata = cache.GetTypeMetadata(typeof(TestDataObjects.Repository1.IOrder)); var orderLineMetadata = cache.GetTypeMetadata(typeof(TestDataObjects.Repository1.IOrderLine)); //-- Assert var orderToOrderLine = orderMetadata.Properties.Single(p => p.Name == "OrderLines").Relation; var orderLineToOrder = orderLineMetadata.Properties.Single(p => p.Name == "Order").Relation; var orderLineToProdyct = orderLineMetadata.Properties.Single(p => p.Name == "Product").Relation; Assert.That(Jsonlike.Stringify(orderToOrderLine), Is.EqualTo( "{relationKind:OneToMany,thisPartyKind:Principal,thisPartyKey:PK_Order,relatedPartyType:OrderLine,relatedPartyKind:Dependent,relatedPartyKey:FK_Order}" )); Assert.That(Jsonlike.Stringify(orderLineToOrder), Is.EqualTo( "{relationKind:ManyToOne,thisPartyKind:Dependent,thisPartyKey:FK_Order,relatedPartyType:Order,relatedPartyKind:Principal,relatedPartyKey:PK_Order}" )); Assert.That(Jsonlike.Stringify(orderLineToProdyct), Is.EqualTo( "{relationKind:ManyToOne,thisPartyKind:Dependent,thisPartyKey:FK_Product,relatedPartyType:Product,relatedPartyKind:Principal,relatedPartyKey:PK_Product}" )); //Console.WriteLine(JsonlikeMetadataStringifier.Stringify(orderMetadata)); //Console.WriteLine(JsonlikeMetadataStringifier.Stringify(productMetadata)); //Console.WriteLine(JsonlikeMetadataStringifier.Stringify(orderLineMetadata)); }
public void CanBuildScalarPrimaryKey() { //-- Arrange var cache = new TypeMetadataCache(new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true)); //-- Act var product = cache.GetTypeMetadata(typeof(TestDataObjects.Repository1.IProduct)); //-- Assert Assert.That(product.PrimaryKey.Properties.Single().Name, Is.EqualTo("Id")); }
public void CanBuildScalarProperties() { //-- Arrange var cache = new TypeMetadataCache(new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true)); //-- Act var product = cache.GetTypeMetadata(typeof(TestDataObjects.Repository1.IProduct)); //-- Assert Assert.That( product.Properties.Select(p => p.Name).ToArray(), Is.EqualTo(new[] { "Id", "Name", "Price" })); Assert.That( product.Properties.Select(p => p.ClrType.Name).ToArray(), Is.EqualTo(new[] { "Int32", "String", "Decimal" })); }
public void CanIncludeMixinContracts() { //-- Arrange var cache = new TypeMetadataCache( new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true), new[] { new MixinRegistration(typeof(TestDataObjects.Repository2.IPrimaryContract), typeof(TestDataObjects.Repository2.IFirstMixinContract)), new MixinRegistration(typeof(TestDataObjects.Repository2.IPrimaryContract), typeof(TestDataObjects.Repository2.ISecondMixinContract)) }); //-- Act var primaryContractMetadata = cache.GetTypeMetadata(typeof(TestDataObjects.Repository2.IPrimaryContract)); //-- Assert Assert.That(primaryContractMetadata.ContractType, Is.EqualTo(typeof(TestDataObjects.Repository2.IPrimaryContract))); Assert.That(primaryContractMetadata.MixinContractTypes, Is.EquivalentTo(new[] { typeof(TestDataObjects.Repository2.IFirstMixinContract), typeof(TestDataObjects.Repository2.ISecondMixinContract) })); var propertyNames = primaryContractMetadata.Properties.Select(p => p.Name).ToArray(); Assert.That(propertyNames, Is.EquivalentTo(new[] { "PrimaryProperty", "FirstMixinProperty", "SecondMixinPropertyA", "SecondMixinPropertyB" })); }
public void CanIncludePropertyDefaultValue() { //-- Arrange var cache = new TypeMetadataCache(new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true)); //-- Act var orderType = cache.GetTypeMetadata(typeof(TestDataObjects.Repository1.IOrder)); var statusProperty = orderType.GetPropertyByName("Status"); //-- Assert Assert.That(statusProperty.DefaultValue, Is.EqualTo(TestDataObjects.Repository1.OrderStatus.New)); }
public void CanCreateMetadata() { //-- Arrange var metadataCache = new TypeMetadataCache( new DataObjectConventions(), new PascalCaseRelationalMappingConvention(usePluralTableNames: true), GetRepositoryMixinsRegistrations()); //-- Act var userAccountMetadata = metadataCache.GetTypeMetadata(typeof(IR3.IUserAccountEntity)); //-- Assert Console.WriteLine(Jsonlike.Stringify(userAccountMetadata)); }