@Test public void shouldAddMetaAndSetStatusToBadRequestIfMetaCallFails() { @SuppressWarnings({"unchecked", "rawtypes"}) final Class<Entity<Map<String, Object>>> entityType = (Class) Entity.class; ArgumentCaptor.forClass(entityType); // simulates fallback return final DynamicActionMetadata fallback = new DynamicActionMetadata.Builder().build(); when(metadataCommand.execute()).thenReturn(fallback); when(((HystrixInvokableInfo<?>) metadataCommand).isSuccessfulExecution()).thenReturn(false); final Response response = handler.enrichWithMetadata(SALESFORCE_CREATE_OR_UPDATE, Collections.emptyMap()); assertThat(response.getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode()); @SuppressWarnings("unchecked") final Meta<ConnectorDescriptor> meta = (Meta<ConnectorDescriptor>) response.getEntity(); final ConnectorDescriptor descriptor = new ConnectorDescriptor.Builder().createFrom(createOrUpdateSalesforceObjectDescriptor) .inputDataShape(ConnectionActionHandler.ANY_SHAPE)// .outputDataShape(salesforceOutputShape)// .build(); assertThat(meta.getValue()).isEqualTo(descriptor); final MetaData metadata = meta.getData(); assertThat(metadata).isNotNull(); assertThat(metadata.getType()).contains(MetaData.Type.WARNING); assertThat(metadata.getMessage()).contains("The query did not succeed"); }
@Test public void shouldProvideActionDefinition() { @SuppressWarnings({"unchecked", "rawtypes"}) final Class<Entity<Map<String, Object>>> entityType = (Class) Entity.class; ArgumentCaptor.forClass(entityType); final DynamicActionMetadata suggestions = new DynamicActionMetadata.Builder() .putProperty("sObjectName", Arrays.asList(DynamicActionMetadata.ActionPropertySuggestion.Builder.of("Account", "Account"), DynamicActionMetadata.ActionPropertySuggestion.Builder.of("Contact", "Contact"))) .build(); when(metadataCommand.execute()).thenReturn(suggestions); when(((HystrixInvokableInfo<?>) metadataCommand).isSuccessfulExecution()).thenReturn(true); final Response response = handler.enrichWithMetadata(SALESFORCE_CREATE_OR_UPDATE, Collections.emptyMap()); assertThat(response.getStatus()).isEqualTo(Status.OK.getStatusCode()); @SuppressWarnings("unchecked") final Meta<ConnectorDescriptor> meta = (Meta<ConnectorDescriptor>) response.getEntity(); final ConnectorDescriptor enrichedDefinitioin = new ConnectorDescriptor.Builder() .createFrom(createOrUpdateSalesforceObjectDescriptor) .replaceConfigurationProperty("sObjectName", c -> c.addEnum(ConfigurationProperty.PropertyValue.Builder.of("Account", "Account"), ConfigurationProperty.PropertyValue.Builder.of("Contact", "Contact"))) .inputDataShape(ConnectionActionHandler.ANY_SHAPE)// .build(); assertThat(meta.getValue()).isEqualTo(enrichedDefinitioin); }
@Test public void shouldElicitActionPropertySuggestions() { final DynamicActionMetadata suggestions = new DynamicActionMetadata.Builder() .putProperty("sObjectName", Collections.singletonList(DynamicActionMetadata.ActionPropertySuggestion.Builder.of("Contact", "Contact"))) .putProperty("sObjectIdName", Arrays.asList(DynamicActionMetadata.ActionPropertySuggestion.Builder.of("ID", "Contact ID"), DynamicActionMetadata.ActionPropertySuggestion.Builder.of("Email", "Email"), DynamicActionMetadata.ActionPropertySuggestion.Builder.of("TwitterScreenName__c", "Twitter Screen Name"))) .inputShape(salesforceContactShape)// .build(); when(metadataCommand.execute()).thenReturn(suggestions); when(((HystrixInvokableInfo<?>) metadataCommand).isSuccessfulExecution()).thenReturn(true);
/** * Creates an immutable copy of a {@link DynamicActionMetadata} value. * Uses accessors to get values to initialize the new immutable instance. * If an instance is already immutable, it is returned as is. * @param instance The instance to copy * @return A copied immutable DynamicActionMetadata instance */ public static DynamicActionMetadata copyOf(DynamicActionMetadata instance) { if (instance instanceof ImmutableDynamicActionMetadata) { return (ImmutableDynamicActionMetadata) instance; } return new DynamicActionMetadata.Builder() .createFrom(instance) .build(); }
@Test public void shouldSetInoutOutputShapesToAnyIfMetadataCallFails() { @SuppressWarnings({"unchecked", "rawtypes"}) final Class<Entity<Map<String, Object>>> entityType = (Class) Entity.class; ArgumentCaptor.forClass(entityType); // simulates fallback return final DynamicActionMetadata fallback = new DynamicActionMetadata.Builder().build(); when(metadataCommand.execute()).thenReturn(fallback); when(((HystrixInvokableInfo<?>) metadataCommand).isSuccessfulExecution()).thenReturn(false); final Response response = handler.enrichWithMetadata(SALESFORCE_CREATE_OR_UPDATE, Collections.emptyMap()); @SuppressWarnings("unchecked") final Meta<ConnectorDescriptor> meta = (Meta<ConnectorDescriptor>) response.getEntity(); final ConnectorDescriptor descriptor = meta.getValue(); assertThat(descriptor.getInputDataShape()).contains(ConnectionActionHandler.ANY_SHAPE); assertThat(descriptor.getOutputDataShape()).contains(salesforceOutputShape); } }