@Test
public void testProcessors() {

    MediatorConfigurationSupport support = create("processorProcessorOfMessage");
    MediatorConfigurationSupport.ValidationOutput output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.STREAM_OF_MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessorOfPayload");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.STREAM_OF_PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessorBuilderOfMessage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.STREAM_OF_MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isTrue();
    support = create("processorProcessorBuilderOfPayload");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.STREAM_OF_PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isTrue();
    support = create("processorPublisherOfMessage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorPublisherOfPayload");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorPublisherBuilderOfMessage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isTrue();
    support = create("processorPublisherBuilderOfPayload");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.STREAM_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(String.class);
    assertThat(output.getUseBuilderTypes()).isTrue();
    support = create("processorProcessMessage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.INDIVIDUAL_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessPayload");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.INDIVIDUAL_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessMessageCompletionStage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.COMPLETION_STAGE_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessPayloadCompletionStage");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.COMPLETION_STAGE_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessMessageUni");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.UNI_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessPayloadUni");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.PAYLOAD);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.UNI_OF_PAYLOAD);
    assertThat(output.getIngestedPayloadType()).isEqualTo(Person.class);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessMessageUniRaw");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.UNI_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(null);
    assertThat(output.getUseBuilderTypes()).isFalse();
    support = create("processorProcessMessageUniWildcard");
    output = support.validate(Shape.PROCESSOR, null);
    assertThat(output.getConsumption()).isEqualTo(MediatorConfiguration.Consumption.MESSAGE);
    assertThat(output.getProduction()).isEqualTo(MediatorConfiguration.Production.UNI_OF_MESSAGE);
    assertThat(output.getIngestedPayloadType()).isEqualTo(null);
    assertThat(output.getUseBuilderTypes()).isFalse();
}