@Override
    public Query normalizeQuery(final Query query, final ParameterProvider parameterProvider) {
        return query.toBuilder()
                .query(ElasticsearchQueryString.of(this.queryStringDecorators.decorate(query.query().queryString(), parameterProvider, query)))
                .filter(normalizeFilter(query.filter(), query, parameterProvider))
                .searchTypes(query.searchTypes().stream().map(searchType -> normalizeSearchType(searchType, query, parameterProvider)).collect(Collectors.toSet()))
                .build();
    }
@Test
    void decoratesSearchTypes() {
        final Query query = Query.builder()
                .searchTypes(
                        Collections.singleton(MessageList.builder()
                                .query(ElasticsearchQueryString.of("action:index"))
                                .build())
                )
                .build();

        final Query normalizedQuery = decorateQueryStringsNormalizer.normalizeQuery(query, name -> Optional.empty());

        assertThat(normalizedQuery.searchTypes())
                .hasSize(1)
                .first()
                .extracting(searchType -> searchType.query().orElseThrow(IllegalStateException::new))
                .matches(q -> q instanceof BackendQuery && ((BackendQuery) q).queryString().equals("Hey there!"));
    }