/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.test.module.extension.metadata; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mule.runtime.api.component.location.Location.builder; import static org.mule.runtime.api.metadata.MetadataKeyBuilder.newKey; import static org.mule.tck.junit4.matcher.MetadataKeyMatcher.metadataKeyWithId; import static org.mule.test.metadata.extension.query.MetadataExtensionEntityResolver.CIRCLE; import static org.mule.test.metadata.extension.query.MetadataExtensionEntityResolver.SQUARE; import static org.mule.test.metadata.extension.query.NativeQueryOutputResolver.CIRCLE_TYPE; import static org.mule.test.metadata.extension.query.NativeQueryOutputResolver.NATIVE_QUERY; import static org.mule.test.module.extension.internal.util.ExtensionsTestUtils.toMetadataType; import org.mule.metadata.api.model.ArrayType; import org.mule.metadata.api.model.MetadataType; import org.mule.metadata.api.model.NumberType; import org.mule.metadata.api.model.ObjectFieldType; import org.mule.metadata.api.model.ObjectType; import org.mule.runtime.api.component.location.Location; import org.mule.runtime.api.meta.model.operation.OperationModel; import org.mule.runtime.api.metadata.MetadataKey; import org.mule.runtime.api.metadata.MetadataKeysContainer; import org.mule.runtime.api.metadata.descriptor.ComponentMetadataDescriptor; import org.mule.runtime.api.metadata.descriptor.TypeMetadataDescriptor; import org.mule.runtime.api.metadata.resolving.MetadataResult; import org.mule.test.metadata.extension.model.shapes.Circle; import java.util.Set; import org.junit.Test; public class QueryMetadataTestCase extends AbstractMetadataOperationTestCase { private static final MetadataKey CIRCLE_METADATA_KEY = newKey(CIRCLE).build(); private static final Location QUERY_LOCATION = builder().globalName(QUERY_FLOW).addProcessorsPart().addIndexPart(0).build(); public QueryMetadataTestCase(ResolutionType resolutionType) { super(resolutionType); } @Override protected String getConfigFile() { return METADATA_TEST; } @Test public void getEntityKeys() throws Exception { MetadataResult<MetadataKeysContainer> metadataKeysResult = metadataService.getEntityKeys(QUERY_LOCATION); assertThat(metadataKeysResult.isSuccess(), is(true)); MetadataKeysContainer container = metadataKeysResult.get(); Set<MetadataKey> metadataKeys = container.getKeys(container.getCategories().iterator().next()).get(); assertThat(metadataKeys.size(), is(2)); assertThat(metadataKeys, hasItems(metadataKeyWithId(CIRCLE), metadataKeyWithId(SQUARE))); } @Test public void getEntityMetadata() throws Exception { MetadataResult<TypeMetadataDescriptor> entityMetadata = metadataService.getEntityMetadata(QUERY_LOCATION, CIRCLE_METADATA_KEY); assertThat(entityMetadata.isSuccess(), is(true)); TypeMetadataDescriptor descriptor = entityMetadata.get(); assertThat(descriptor.getType(), is(toMetadataType(Circle.class))); } @Test public void getDsqlQueryAutomaticGeneratedOutputMetadata() throws Exception { location = QUERY_LOCATION; MetadataKey dsqlKey = newKey(DSQL_QUERY).build(); MetadataResult<ComponentMetadataDescriptor<OperationModel>> entityMetadata = getComponentDynamicMetadata(dsqlKey); assertThat(entityMetadata.isSuccess(), is(true)); MetadataType generatedType = entityMetadata.get().getModel().getOutput().getType(); assertThat(generatedType, is(instanceOf(ArrayType.class))); ObjectType fields = (ObjectType) ((ArrayType) generatedType).getType(); assertThat(fields.getFields(), hasSize(1)); ObjectFieldType field = fields.getFields().iterator().next(); assertThat(field.getKey().getName().getLocalPart(), is("id")); assertThat(field.getValue(), is(instanceOf(NumberType.class))); } @Test public void getNativeQueryOutputMetadata() throws Exception { location = builder().globalName(NATIVE_QUERY_FLOW).addProcessorsPart().addIndexPart(0).build(); MetadataKey nativeKey = newKey(NATIVE_QUERY).build(); MetadataResult<ComponentMetadataDescriptor<OperationModel>> entityMetadata = getComponentDynamicMetadata(nativeKey); assertThat(entityMetadata.isSuccess(), is(true)); assertThat(entityMetadata.get().getModel().getOutput().getType(), is(CIRCLE_TYPE)); } }