From b5ff47837fffb8a3a0836c5a8d6959ec4ee7ed0d Mon Sep 17 00:00:00 2001 From: Tom van Wietmarschen Date: Tue, 22 Aug 2017 14:39:58 +0200 Subject: [PATCH] [OLINGO-1166] Add test case for enum metadata issue Signed-off-by: Christian Amend --- .../MetadataDocumentXmlSerializerTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java index d92d6ac2e..449253f72 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java @@ -34,12 +34,17 @@ import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.commons.api.edm.EdmAnnotation; import org.apache.olingo.commons.api.edm.EdmComplexType; +import org.apache.olingo.commons.api.edm.EdmEnumType; +import org.apache.olingo.commons.api.edm.EdmMember; import org.apache.olingo.commons.api.edm.EdmPrimitiveType; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; import org.apache.olingo.commons.api.edm.EdmProperty; import org.apache.olingo.commons.api.edm.EdmSchema; import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.edm.annotation.EdmConstantExpression; +import org.apache.olingo.commons.api.edm.annotation.EdmExpression.EdmExpressionType; import org.apache.olingo.commons.api.edm.provider.CsdlAction; import org.apache.olingo.commons.api.edm.provider.CsdlActionImport; import org.apache.olingo.commons.api.edm.provider.CsdlAliasInfo; @@ -139,6 +144,63 @@ public class MetadataDocumentXmlSerializerTest { + "", IOUtils.toString(metadata)); } + + /** Test if annotations on EnumType Members are added as children of the Member element + * in compliance with OData v4.0, part 3: CSDL, section 14.3 + */ + @Test + public void testAnnotationsNestedInEnumMembers() throws Exception { + // Create mock schema + EdmSchema schema = mock(EdmSchema.class); + when(schema.getNamespace()).thenReturn("MyNamespace"); + Edm edm = mock(Edm.class); + when(edm.getSchemas()).thenReturn(Arrays.asList(schema)); + + // create mock metadata + ServiceMetadata serviceMetadata = mock(ServiceMetadata.class); + when(serviceMetadata.getEdm()).thenReturn(edm); + + // add mock enums to schema + EdmEnumType enumType = mock(EdmEnumType.class); + when(schema.getEnumTypes()).thenReturn(Arrays.asList(enumType)); + when(enumType.getName()).thenReturn("MyEnum"); + EdmPrimitiveType int32Type = OData.newInstance().createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32); + when(enumType.getUnderlyingType()).thenReturn(int32Type); + + // mock enum member values + when(enumType.getMemberNames()).thenReturn(Collections.singletonList("MyMember")); + EdmMember member = mock(EdmMember.class); + when(enumType.getMember("MyMember")).thenReturn(member); + when(member.getName()).thenReturn("MyMember"); + when(member.getValue()).thenReturn("0"); + + EdmAnnotation annotation = mock(EdmAnnotation.class); + when(member.getAnnotations()).thenReturn(Collections.singletonList(annotation)); + when(annotation.getQualifier()).thenReturn("Core.Description"); + EdmConstantExpression expression = mock(EdmConstantExpression.class); + when(expression.isConstant()).thenReturn(true); + when(expression.asConstant()).thenReturn(expression); + when(expression.getExpressionType()).thenReturn(EdmExpressionType.String); + when(expression.getExpressionName()).thenReturn("String"); + when(expression.getValueAsString()).thenReturn("MyDescription"); + when(annotation.getExpression()).thenReturn(expression); + + InputStream metadata = serializer.metadataDocument(serviceMetadata).getContent(); + assertNotNull(metadata); + String metadataString = IOUtils.toString(metadata); + + + assertTrue(metadataString.contains( + "" + + "" + + "" + + "MyDescription" + + "" + + "" + + "")); + + } + @Test public void writeEdmxWithLocalTestEdm() throws Exception {