public void UnsignedIntAndTypeDefinitionRoundtripJsonLightIntegrationTest() { var model = new EdmModel(); var uint16 = new EdmTypeDefinition("MyNS", "UInt16", EdmPrimitiveTypeKind.Double); var uint16Ref = new EdmTypeDefinitionReference(uint16, false); model.AddElement(uint16); model.SetPrimitiveValueConverter(uint16Ref, UInt16ValueConverter.Instance); var uint64 = new EdmTypeDefinition("MyNS", "UInt64", EdmPrimitiveTypeKind.String); var uint64Ref = new EdmTypeDefinitionReference(uint64, false); model.AddElement(uint64); model.SetPrimitiveValueConverter(uint64Ref, UInt64ValueConverter.Instance); var guidType = new EdmTypeDefinition("MyNS", "Guid", EdmPrimitiveTypeKind.Int64); var guidRef = new EdmTypeDefinitionReference(guidType, true); model.AddElement(guidType); var personType = new EdmEntityType("MyNS", "Person"); personType.AddKeys(personType.AddStructuralProperty("ID", uint64Ref)); personType.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); personType.AddStructuralProperty("FavoriteNumber", uint16Ref); personType.AddStructuralProperty("Age", model.GetUInt32("MyNS", true)); personType.AddStructuralProperty("Guid", guidRef); personType.AddStructuralProperty("Weight", EdmPrimitiveTypeKind.Double); personType.AddStructuralProperty("Money", EdmPrimitiveTypeKind.Decimal); model.AddElement(personType); var container = new EdmEntityContainer("MyNS", "Container"); var peopleSet = container.AddEntitySet("People", personType); model.AddElement(container); var stream = new MemoryStream(); IODataResponseMessage message = new InMemoryMessage { Stream = stream }; message.StatusCode = 200; var writerSettings = new ODataMessageWriterSettings(); writerSettings.SetServiceDocumentUri(new Uri("http://host/service")); var messageWriter = new ODataMessageWriter(message, writerSettings, model); var entryWriter = messageWriter.CreateODataEntryWriter(peopleSet); var entry = new ODataEntry { TypeName = "MyNS.Person", Properties = new[] { new ODataProperty { Name = "ID", Value = UInt64.MaxValue }, new ODataProperty { Name = "Name", Value = "Foo" }, new ODataProperty { Name = "FavoriteNumber", Value = (UInt16)250 }, new ODataProperty { Name = "Age", Value = (UInt32)123 }, new ODataProperty { Name = "Guid", Value = Int64.MinValue }, new ODataProperty { Name = "Weight", Value = 123.45 }, new ODataProperty { Name = "Money", Value = Decimal.MaxValue } } }; entryWriter.WriteStart(entry); entryWriter.WriteEnd(); entryWriter.Flush(); stream.Position = 0; StreamReader reader = new StreamReader(stream); string payload = reader.ReadToEnd(); payload.Should().Be("{\"@odata.context\":\"http://host/service/$metadata#People/$entity\",\"ID\":\"18446744073709551615\",\"Name\":\"Foo\",\"FavoriteNumber\":250.0,\"Age\":123,\"Guid\":-9223372036854775808,\"Weight\":123.45,\"Money\":79228162514264337593543950335}"); stream = new MemoryStream(Encoding.Default.GetBytes(payload)); message = new InMemoryMessage { Stream = stream }; message.StatusCode = 200; var readerSettings = new ODataMessageReaderSettings(); var messageReader = new ODataMessageReader(message, readerSettings, model); var entryReader = messageReader.CreateODataEntryReader(peopleSet, personType); Assert.True(entryReader.Read()); var entryReaded = entryReader.Item as ODataEntry; var propertiesReaded = entryReaded.Properties.ToList(); var propertiesGiven = entry.Properties.ToList(); Assert.Equal(propertiesReaded.Count, propertiesGiven.Count); for (int i = 0; i < propertiesReaded.Count; ++i) { Assert.Equal(propertiesReaded[i].Name, propertiesGiven[i].Name); Assert.Equal(propertiesReaded[i].Value.GetType(), propertiesGiven[i].Value.GetType()); Assert.Equal(propertiesReaded[i].Value, propertiesGiven[i].Value); } }
public void WriteTypeDefinitionAsKeyPayloadShouldWork() { EdmModel model = new EdmModel(); EdmTypeDefinition uint32Type = new EdmTypeDefinition("NS", "UInt32", EdmPrimitiveTypeKind.String); EdmTypeDefinitionReference uint32Reference = new EdmTypeDefinitionReference(uint32Type, false); model.AddElement(uint32Type); EdmEntityType entityType = new EdmEntityType("NS", "Person"); entityType.AddKeys(entityType.AddStructuralProperty("Id1", uint32Reference), entityType.AddStructuralProperty("Id2", EdmPrimitiveTypeKind.Int32)); model.SetPrimitiveValueConverter(uint32Reference, new MyUInt32Converter()); EdmTypeDefinition weightType = new EdmTypeDefinition("NS", "Weight", EdmPrimitiveTypeKind.Double); EdmTypeDefinitionReference weightTypeRef = new EdmTypeDefinitionReference(weightType, false); entityType.AddStructuralProperty("Weight", weightTypeRef); EdmComplexType complexType = new EdmComplexType("NS", "Address"); EdmComplexTypeReference complexTypeRef = new EdmComplexTypeReference(complexType, true); EdmTypeDefinition addressType = new EdmTypeDefinition("NS", "Address", EdmPrimitiveTypeKind.String); EdmTypeDefinitionReference addressTypeRef = new EdmTypeDefinitionReference(addressType, false); complexType.AddStructuralProperty("CountryRegion", addressTypeRef); entityType.AddStructuralProperty("Address", complexTypeRef); model.AddElement(weightType); model.AddElement(addressType); model.AddElement(complexType); model.AddElement(entityType); EdmEntityContainer container = new EdmEntityContainer("EntityNs", "MyContainer"); EdmEntitySet entitySet = container.AddEntitySet("People", entityType); model.AddElement(container); ODataEntry entry = new ODataEntry() { TypeName = "NS.Person", Properties = new[] { new ODataProperty { Name = "Id1", Value = (UInt32)1 }, new ODataProperty { Name = "Id2", Value = 2 }, new ODataProperty { Name = "Weight", Value = 60.5 }, new ODataProperty { Name = "Address", Value = new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "CountryRegion", Value = "China" } } } } } }; string outputPayload = this.WriterEntry(model, entry, entitySet, entityType); const string expectedMinimalPayload = "{" + "\"@odata.context\":\"http://www.example.com/$metadata#People/$entity\"," + "\"Id1\":\"1\"," + "\"Id2\":2," + "\"Weight\":60.5," + "\"Address\":{\"CountryRegion\":\"China\"}" + "}"; outputPayload.Should().Be(expectedMinimalPayload); outputPayload = this.WriterEntry(model, entry, entitySet, entityType, true); const string expectedFullPayload = "{" + "\"@odata.context\":\"http://www.example.com/$metadata#People/$entity\"," + "\"@odata.type\":\"#NS.Person\"," + "\"@odata.id\":\"People(Id1='1',Id2=2)\"," + "\"@odata.editLink\":\"People(Id1='1',Id2=2)\"," + "\"Id1\":\"1\"," + "\"Id2\":2," + "\"Weight\":60.5," + "\"Address\":{\"CountryRegion\":\"China\"}" + "}"; outputPayload.Should().Be(expectedFullPayload); }
public void PassNullConverterToSetPrimitiveValueConverterShouldFail() { var model = new EdmModel(); var typeReference = new EdmTypeDefinitionReference(new EdmTypeDefinition("NS", "Test", EdmPrimitiveTypeKind.Int32), true); Action setConverter = () => model.SetPrimitiveValueConverter(typeReference, null); setConverter.ShouldThrow<ArgumentNullException>(); }
public void PassNullTypeReferenceToSetPrimitiveValueConverterShouldFail() { var model = new EdmModel(); var converter = new TestPrimitiveValueConverter(); Action setConverter = () => model.SetPrimitiveValueConverter((IEdmTypeDefinitionReference)null, converter); setConverter.ShouldThrow<ArgumentNullException>(); }
public void SetAndGetPrimitiveValueConverterShouldWork() { var model = new EdmModel(); var typeReference = new EdmTypeDefinitionReference(new EdmTypeDefinition("NS", "Test", EdmPrimitiveTypeKind.Int32), true); var converter = new TestPrimitiveValueConverter(); model.SetPrimitiveValueConverter(typeReference, converter); Assert.AreEqual(model.GetPrimitiveValueConverter(typeReference), converter); }