public async Task TestFromAndToDataWithElevatedTraits() { var corpus = TestHelper.GetLocalCorpus(testsSubpath, "TestFromAndToDataWithElevatedTraits", null); // need to set schema docs to the cdm namespace instead of using resources corpus.Storage.Mount("cdm", new LocalAdapter(TestHelper.SchemaDocumentsPath)); corpus.SetEventCallback(new EventCallback { Invoke = (CdmStatusLevel statusLevel, string message) => { if (message.Contains("unable to resolve an entity")) { Assert.Fail(); } } }, CdmStatusLevel.Warning); var entity = await corpus.FetchObjectAsync <CdmEntityDefinition>("local:/Account.cdm.json/Account"); var resEntity = await entity.CreateResolvedEntityAsync($"{entity.EntityName}_"); EntityPersistence.ToData(resEntity, new ResolveOptions(resEntity.InDocument), new CopyOptions() { StringRefs = true }); }
public async Task TestPropertyPersistence() { var corpus = TestHelper.GetLocalCorpus(testsSubpath, "TestPropertyPersistence", null); var entity = await corpus.FetchObjectAsync <CdmEntityDefinition>("local:/PropertyEntity.cdm.json/PropertyEntity"); // test loading properties var attribute = entity.Attributes[0] as CdmTypeAttributeDefinition; Assert.IsTrue((bool)attribute.IsReadOnly); Assert.IsTrue((bool)attribute.IsNullable); Assert.AreEqual(attribute.SourceName, "propertyAttribute"); Assert.AreEqual(attribute.Description, "Attribute that has all properties set."); Assert.AreEqual(attribute.DisplayName, "Property Attribute"); Assert.AreEqual(attribute.SourceOrdering, 1); Assert.IsTrue((bool)attribute.ValueConstrainedToList); Assert.AreEqual(attribute.MaximumLength, 10); Assert.AreEqual(attribute.MaximumValue, "20"); Assert.AreEqual(attribute.MinimumValue, "1"); Assert.AreEqual(attribute.DataFormat, CdmDataFormat.String); Assert.AreEqual(attribute.DefaultValue[0]["displayText"], "Default"); // test loading negative value properties var negativeAttribute = entity.Attributes[1] as CdmTypeAttributeDefinition; Assert.IsFalse((bool)negativeAttribute.IsReadOnly); Assert.IsFalse((bool)negativeAttribute.IsNullable); Assert.IsNull(negativeAttribute.SourceName); Assert.IsNull(negativeAttribute.Description); Assert.IsNull(negativeAttribute.DisplayName); Assert.AreEqual(negativeAttribute.SourceOrdering, 0); Assert.IsFalse((bool)negativeAttribute.ValueConstrainedToList); Assert.AreEqual(negativeAttribute.MaximumLength, 0); Assert.AreEqual(negativeAttribute.MaximumValue, "0"); Assert.AreEqual(negativeAttribute.MinimumValue, "0"); Assert.AreEqual(negativeAttribute.DataFormat, CdmDataFormat.Unknown); Assert.AreEqual(negativeAttribute.DefaultValue[0]["displayText"], ""); // test loading values with wrongs types in file var wrongTypesAttribute = entity.Attributes[2] as CdmTypeAttributeDefinition; Assert.IsTrue((bool)wrongTypesAttribute.IsReadOnly); Assert.IsTrue((bool)wrongTypesAttribute.IsNullable); Assert.AreEqual(wrongTypesAttribute.SourceOrdering, 1); Assert.IsFalse((bool)wrongTypesAttribute.ValueConstrainedToList); Assert.AreEqual(wrongTypesAttribute.MaximumLength, 0); Assert.AreEqual(wrongTypesAttribute.MaximumValue, "20"); Assert.AreEqual(wrongTypesAttribute.MinimumValue, "0"); // test loading values with wrong types that cannot be properly converted var invalidValuesAttribute = entity.Attributes[3] as CdmTypeAttributeDefinition; Assert.IsFalse((bool)invalidValuesAttribute.IsReadOnly); Assert.IsNull(invalidValuesAttribute.MaximumLength); var entityData = EntityPersistence.ToData(entity, null, null); // test toData for properties var attributeData = entityData.HasAttributes[0].ToObject <TypeAttribute>(); Assert.IsTrue((bool)attributeData.IsReadOnly); Assert.IsTrue((bool)attributeData.IsNullable); Assert.AreEqual(attributeData.SourceName, "propertyAttribute"); Assert.AreEqual(attributeData.Description, "Attribute that has all properties set."); Assert.AreEqual(attributeData.DisplayName, "Property Attribute"); Assert.AreEqual(attributeData.SourceOrdering, 1); Assert.IsTrue((bool)attributeData.ValueConstrainedToList); Assert.AreEqual(attributeData.MaximumLength, 10); Assert.AreEqual(attributeData.MaximumValue, "20"); Assert.AreEqual(attributeData.MinimumValue, "1"); Assert.AreEqual(attributeData.DataFormat, "String"); Assert.AreEqual(attributeData.DefaultValue[0]["displayText"], "Default"); // test toData for negative value properties var negativeAttributeData = entityData.HasAttributes[1].ToObject <TypeAttribute>(); Assert.IsNull(negativeAttributeData.IsReadOnly); Assert.IsNull(negativeAttributeData.IsNullable); Assert.IsNull(negativeAttributeData.SourceName); Assert.IsNull(negativeAttributeData.Description); Assert.IsNull(negativeAttributeData.DisplayName); Assert.IsNull(negativeAttributeData.SourceOrdering); Assert.IsNull(negativeAttributeData.ValueConstrainedToList); Assert.AreEqual(negativeAttributeData.MaximumLength, 0); Assert.AreEqual(negativeAttributeData.MaximumValue, "0"); Assert.AreEqual(negativeAttributeData.MinimumValue, "0"); Assert.IsNull(negativeAttributeData.DataFormat); Assert.AreEqual(negativeAttributeData.DefaultValue[0]["displayText"], ""); // test toData for values with wrong types in file var wrongTypesAttributeData = entityData.HasAttributes[2].ToObject <TypeAttribute>(); Assert.IsTrue((bool)wrongTypesAttributeData.IsReadOnly); Assert.IsTrue((bool)wrongTypesAttributeData.IsNullable); Assert.AreEqual(wrongTypesAttributeData.SourceOrdering, 1); Assert.IsNull(wrongTypesAttributeData.ValueConstrainedToList); Assert.AreEqual(wrongTypesAttributeData.MaximumLength, 0); Assert.AreEqual(wrongTypesAttributeData.MaximumValue, "20"); Assert.AreEqual(wrongTypesAttributeData.MinimumValue, "0"); // test toData with wrong types that cannot be properly converted var invalidValuesAttributeData = entityData.HasAttributes[3].ToObject <TypeAttribute>(); Assert.IsNull(invalidValuesAttributeData.IsReadOnly); Assert.IsNull(invalidValuesAttributeData.MaximumLength); }
public async Task TestPropertyPersistence() { var corpus = TestHelper.GetLocalCorpus(testsSubpath, "TestPropertyPersistence", null); var callback = new EventCallback(); var functionWasCalled = false; var functionParameter1 = CdmStatusLevel.Info; string functionParameter2 = null; callback.Invoke = (CdmStatusLevel statusLevel, string message1) => { functionWasCalled = true; if (statusLevel.Equals(CdmStatusLevel.Error)) { functionParameter1 = statusLevel; functionParameter2 = message1; } }; corpus.SetEventCallback(callback); var entity = await corpus.FetchObjectAsync <CdmEntityDefinition>("local:/PropertyEntity.cdm.json/PropertyEntity"); // test loading properties var attribute = entity.Attributes[0] as CdmTypeAttributeDefinition; Assert.IsTrue((bool)attribute.IsReadOnly); Assert.IsTrue((bool)attribute.IsNullable); Assert.AreEqual(attribute.SourceName, "propertyAttribute"); Assert.AreEqual(attribute.Description, "Attribute that has all properties set."); Assert.AreEqual(attribute.DisplayName, "Property Attribute"); Assert.AreEqual(attribute.SourceOrdering, 1); Assert.IsTrue((bool)attribute.ValueConstrainedToList); Assert.AreEqual(attribute.MaximumLength, 10); Assert.AreEqual(attribute.MaximumValue, "20"); Assert.AreEqual(attribute.MinimumValue, "1"); Assert.AreEqual(attribute.DataFormat, CdmDataFormat.String); Assert.AreEqual(attribute.DefaultValue[0]["displayText"], "Default"); // test loading negative value properties var negativeAttribute = entity.Attributes[1] as CdmTypeAttributeDefinition; Assert.IsFalse((bool)negativeAttribute.IsReadOnly); Assert.IsFalse((bool)negativeAttribute.IsNullable); Assert.IsNull(negativeAttribute.SourceName); Assert.IsNull(negativeAttribute.Description); Assert.IsNull(negativeAttribute.DisplayName); Assert.AreEqual(negativeAttribute.SourceOrdering, 0); Assert.IsFalse((bool)negativeAttribute.ValueConstrainedToList); Assert.AreEqual(negativeAttribute.MaximumLength, 0); Assert.AreEqual(negativeAttribute.MaximumValue, "0"); Assert.AreEqual(negativeAttribute.MinimumValue, "0"); Assert.AreEqual(negativeAttribute.DataFormat, CdmDataFormat.Unknown); Assert.AreEqual(negativeAttribute.DefaultValue[0]["displayText"], ""); // test loading values with wrongs types in file var wrongTypesAttribute = entity.Attributes[2] as CdmTypeAttributeDefinition; Assert.IsTrue((bool)wrongTypesAttribute.IsReadOnly); Assert.IsTrue((bool)wrongTypesAttribute.IsNullable); Assert.AreEqual(wrongTypesAttribute.SourceOrdering, 1); Assert.IsFalse((bool)wrongTypesAttribute.ValueConstrainedToList); Assert.AreEqual(wrongTypesAttribute.MaximumLength, 0); Assert.AreEqual(wrongTypesAttribute.MaximumValue, "20"); Assert.AreEqual(wrongTypesAttribute.MinimumValue, "0"); // test loading values with wrong types that cannot be properly converted var invalidValuesAttribute = entity.Attributes[3] as CdmTypeAttributeDefinition; Assert.IsFalse((bool)invalidValuesAttribute.IsReadOnly); Assert.IsNull(invalidValuesAttribute.MaximumLength); // test loading values with empty default value list that should log error var emptyDefaultValueAttribute = entity.Attributes[4] as CdmTypeAttributeDefinition; // test log error "Default value missing languageTag or displayText." Assert.IsTrue(functionWasCalled); Assert.AreEqual(CdmStatusLevel.Error, functionParameter1); Assert.IsTrue(functionParameter2.Contains("Default value missing languageTag or displayText.")); Assert.IsNull(emptyDefaultValueAttribute.DefaultValue); // set the default value to an empty list for testing that it should be removed from the generated json. emptyDefaultValueAttribute.DefaultValue = new List <object>(); var entityData = EntityPersistence.ToData(entity, null, null); // test toData for properties var attributeData = entityData.HasAttributes[0].ToObject <TypeAttribute>(); Assert.IsTrue((bool)attributeData.IsReadOnly); Assert.IsTrue((bool)attributeData.IsNullable); Assert.AreEqual(attributeData.SourceName, "propertyAttribute"); Assert.AreEqual(attributeData.Description, "Attribute that has all properties set."); Assert.AreEqual(attributeData.DisplayName, "Property Attribute"); Assert.AreEqual(attributeData.SourceOrdering, 1); Assert.IsTrue((bool)attributeData.ValueConstrainedToList); Assert.AreEqual(attributeData.MaximumLength, 10); Assert.AreEqual(attributeData.MaximumValue, "20"); Assert.AreEqual(attributeData.MinimumValue, "1"); Assert.AreEqual(attributeData.DataFormat, "String"); Assert.AreEqual(attributeData.DefaultValue[0]["displayText"], "Default"); // test toData for negative value properties var negativeAttributeData = entityData.HasAttributes[1].ToObject <TypeAttribute>(); Assert.IsNull(negativeAttributeData.IsReadOnly); Assert.IsNull(negativeAttributeData.IsNullable); Assert.IsNull(negativeAttributeData.SourceName); Assert.IsNull(negativeAttributeData.Description); Assert.IsNull(negativeAttributeData.DisplayName); Assert.IsNull(negativeAttributeData.SourceOrdering); Assert.IsNull(negativeAttributeData.ValueConstrainedToList); Assert.AreEqual(negativeAttributeData.MaximumLength, 0); Assert.AreEqual(negativeAttributeData.MaximumValue, "0"); Assert.AreEqual(negativeAttributeData.MinimumValue, "0"); Assert.IsNull(negativeAttributeData.DataFormat); Assert.AreEqual(negativeAttributeData.DefaultValue[0]["displayText"], ""); // test toData for values with wrong types in file var wrongTypesAttributeData = entityData.HasAttributes[2].ToObject <TypeAttribute>(); Assert.IsTrue((bool)wrongTypesAttributeData.IsReadOnly); Assert.IsTrue((bool)wrongTypesAttributeData.IsNullable); Assert.AreEqual(wrongTypesAttributeData.SourceOrdering, 1); Assert.IsNull(wrongTypesAttributeData.ValueConstrainedToList); Assert.AreEqual(wrongTypesAttributeData.MaximumLength, 0); Assert.AreEqual(wrongTypesAttributeData.MaximumValue, "20"); Assert.AreEqual(wrongTypesAttributeData.MinimumValue, "0"); // test toData with wrong types that cannot be properly converted var invalidValuesAttributeData = entityData.HasAttributes[3].ToObject <TypeAttribute>(); Assert.IsNull(invalidValuesAttributeData.IsReadOnly); Assert.IsNull(invalidValuesAttributeData.MaximumLength); // test toData with empty default value list that should be written as null var emptyDefaultValueAttributeData = entityData.HasAttributes[4].ToObject <TypeAttribute>(); Assert.IsNull(emptyDefaultValueAttributeData.DefaultValue); }