diff --git a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/reindexing/reindexonupdate/shallow/incorrect/ReindexOnUpdateShallowIncorrectIT.java b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/reindexing/reindexonupdate/shallow/incorrect/ReindexOnUpdateShallowIncorrectIT.java index 2b9ea5c127d..e1d9b3cbb55 100644 --- a/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/reindexing/reindexonupdate/shallow/incorrect/ReindexOnUpdateShallowIncorrectIT.java +++ b/documentation/src/test/java/org/hibernate/search/documentation/mapper/orm/reindexing/reindexonupdate/shallow/incorrect/ReindexOnUpdateShallowIncorrectIT.java @@ -11,7 +11,7 @@ import org.hibernate.search.documentation.testsupport.BackendConfigurations; import org.hibernate.search.documentation.testsupport.DocumentationSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.junit.Rule; import org.junit.Test; @@ -26,7 +26,7 @@ public class ReindexOnUpdateShallowIncorrectIT { public void missingReindexOnUpdateShallow() { assertThatThrownBy( () -> setupHelper.start().setup( Book.class, BookCategory.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( Book.class.getName() ) .pathContext( ".category.name" ) .failure( @@ -35,8 +35,7 @@ public void missingReindexOnUpdateShallow() { "Hibernate Search needs this information", "you can disable automatic reindexing with" + " @IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)" - ) - .build() ); + ) ); } } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/analysis/ElasticsearchAnalysisConfigurerIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/analysis/ElasticsearchAnalysisConfigurerIT.java index 94ce0c673dc..b59dc459ae8 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/analysis/ElasticsearchAnalysisConfigurerIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/analysis/ElasticsearchAnalysisConfigurerIT.java @@ -16,7 +16,7 @@ import org.hibernate.search.engine.mapper.mapping.building.spi.IndexBindingContext; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.junit.Rule; @@ -38,7 +38,7 @@ public void error_invalidReference() { () -> setup( "foobar" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -47,7 +47,6 @@ public void error_invalidReference() { + ElasticsearchIndexSettings.ANALYSIS_CONFIGURER + "': 'foobar'", "Unable to load class 'foobar'" ) - .build() ); } @@ -57,14 +56,13 @@ public void error_failingConfigurer() { () -> setup( FailingConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( ANALYSIS_CONFIGURER_ERROR_MESSAGE_PREFIX, FailingConfigurer.FAILURE_MESSAGE ) - .build() ); } @@ -88,7 +86,7 @@ public void error_tokenizer_namingConflict() { () -> setup( TokenizerNamingConflictConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -96,7 +94,6 @@ public void error_tokenizer_namingConflict() { "Duplicate tokenizer definitions: 'tokenizerName'", "Tokenizer names must be unique" ) - .build() ); } @@ -114,7 +111,7 @@ public void error_tokenizer_missingType() { () -> setup( TokenizerMissingTypeConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -122,7 +119,6 @@ public void error_tokenizer_missingType() { "Invalid tokenizer definition for name 'tokenizerName'", "Tokenizer definitions must at least define the tokenizer type" ) - .build() ); } @@ -139,7 +135,7 @@ public void error_charFilter_namingConflict() { () -> setup( CharFilterNamingConflictConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -147,7 +143,6 @@ public void error_charFilter_namingConflict() { "Duplicate char filter definitions: 'charFilterName'", "Char filter names must be unique" ) - .build() ); } @@ -165,7 +160,7 @@ public void error_charFilter_missingType() { () -> setup( CharFilterMissingTypeConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -173,7 +168,6 @@ public void error_charFilter_missingType() { "Invalid char filter definition for name 'charFilterName'", "Char filter definitions must at least define the char filter type" ) - .build() ); } @@ -190,7 +184,7 @@ public void error_tokenFilter_namingConflict() { () -> setup( TokenFilterNamingConflictConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -198,7 +192,6 @@ public void error_tokenFilter_namingConflict() { "Duplicate token filter definitions: 'tokenFilterName'", "Token filter names must be unique" ) - .build() ); } @@ -216,7 +209,7 @@ public void error_tokenFilter_missingType() { () -> setup( TokenFilterMissingTypeConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -224,7 +217,6 @@ public void error_tokenFilter_missingType() { "Invalid token filter definition for name 'tokenFilterName'", "Token filter definitions must at least define the token filter type" ) - .build() ); } @@ -241,7 +233,7 @@ public void error_parameter_namingConflict() { () -> setup( ParameterNamingConflictConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( TYPE_NAME ) .indexContext( INDEX_NAME ) .failure( @@ -250,7 +242,6 @@ public void error_parameter_namingConflict() { "'\"value1\"'", "'\"value2\"'" ) - .build() ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapFailureIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapFailureIT.java index 18dcd6eb1a0..09a739f1219 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapFailureIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapFailureIT.java @@ -12,7 +12,7 @@ import org.hibernate.search.integrationtest.backend.elasticsearch.testsupport.util.ElasticsearchClientSpy; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -45,14 +45,13 @@ public void cannotConnect() { "Closed port" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Unable to detect the Elasticsearch version running on the cluster", "Elasticsearch request failed", "Connection refused" ) - .build() ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapIT.java index 67725157de8..f4d9bd6942d 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/bootstrap/ElasticsearchBootstrapIT.java @@ -28,7 +28,7 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.dialect.ElasticsearchTestDialect; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingSchemaManagementStrategy; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -104,13 +104,12 @@ public void noVersionCheck_missingVersion() { "NO version check without explicit version number" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Invalid value for configuration property 'hibernate.search.backend.version': ''", "Missing or imprecise Elasticsearch version", "when configuration property 'hibernate.search.backend.version_check.enabled' is set to 'false'", "the version is mandatory and must be at least as precise as 'x.y', where 'x' and 'y' are integers" ) - .build() ); } @@ -143,13 +142,12 @@ public void noVersionCheck_incompleteVersion() { "NO version check with partial version number" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Invalid value for configuration property 'hibernate.search.backend.version': '" + versionWithMajorOnly + "'", "Missing or imprecise Elasticsearch version", "when configuration property 'hibernate.search.backend.version_check.enabled' is set to 'false'", "the version is mandatory and must be at least as precise as 'x.y', where 'x' and 'y' are integers" ) - .build() ); } @@ -222,7 +220,7 @@ public void noVersionCheck_versionOverrideOnStart_incompatibleVersion() { assertThatThrownBy( () -> partialSetup.doSecondPhase( AllAwareConfigurationPropertySource.fromMap( runtimeProperties ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Invalid value for configuration property 'hibernate.search.backend.version': '" @@ -233,7 +231,6 @@ public void noVersionCheck_versionOverrideOnStart_incompatibleVersion() { + " when the backend was created.", "You can provide a more precise version on startup," + " but you cannot override the version that was provided when the backend was created." ) - .build() ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/index/naming/ElasticsearchIndexNamingBaseIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/index/naming/ElasticsearchIndexNamingBaseIT.java index 83fb47f344c..a09001c7b5c 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/index/naming/ElasticsearchIndexNamingBaseIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/index/naming/ElasticsearchIndexNamingBaseIT.java @@ -13,7 +13,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -42,13 +42,12 @@ public void nameConflict_aliasesOfSingleIndex() { "index2-write", "index2-read" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - FailureReportUtils.buildFailureReportPattern() + .satisfies( + FailureReportUtils.hasFailureReport() .indexContext( index1.name() ) .failure( "Invalid Elasticsearch index layout", "write alias and read alias are set to the same value: 'alias-conflicting'", "The write alias and read alias must be different" ) - .build() ); } @@ -104,15 +103,14 @@ private void setupExpectingCrossIndexNameConflict(String index1WriteAlias, Strin index2WriteAlias, index2ReadAlias ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - FailureReportUtils.buildFailureReportPattern() + .satisfies( + FailureReportUtils.hasFailureReport() .failure( "Conflicting index names: Hibernate Search indexes '" + index1.name() + "' and '" + index2.name() + "' both target the Elasticsearch index name or alias '" + conflictingName + "'" ) - .build() ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerTestUtils.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerTestUtils.java index f83ae2de9fc..d19ed0bcf0f 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerTestUtils.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerTestUtils.java @@ -10,7 +10,8 @@ import static org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.ElasticsearchIndexMetadataTestUtils.discriminatorMappingOmitDefaults; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.ElasticsearchIndexMetadataTestUtils; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportChecker; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; class ElasticsearchIndexSchemaManagerTestUtils { @@ -72,8 +73,8 @@ static String defaultMetadataMappingAndCommaForExpectations() { return mapping.isEmpty() ? "" : mapping + ", "; } - static FailureReportUtils.FailureReportPatternBuilder buildValidationFailureReportPattern() { - return FailureReportUtils.buildFailureReportPattern() + static FailureReportChecker hasValidationFailureReport() { + return FailureReportUtils.hasFailureReport() .contextLiteral( STUB_CONTEXT_LITERAL ) .failure( "Validation of the existing index in the Elasticsearch cluster failed. See below for details." ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAliasesIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAliasesIT.java index 61d900aaba7..d631acf7030 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAliasesIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAliasesIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleAliasDefinition; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import static org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.ElasticsearchIndexMetadataTestUtils.defaultPrimaryName; @@ -99,11 +99,10 @@ public void writeAlias_missing() { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - buildValidationFailureReportPattern() + .satisfies( + hasValidationFailureReport() .aliasContext( defaultWriteAlias( index.name() ).original ) .failure( "Missing alias" ) - .build() ); } @@ -122,12 +121,11 @@ public void writeAlias_invalid_filter() { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - buildValidationFailureReportPattern() + .satisfies( + hasValidationFailureReport() .aliasContext( defaultWriteAlias( index.name() ).original ) .aliasAttributeContext( "filter" ) .failure( "Invalid value. Expected 'null', actual is '{\"term\":{\"user_id\":12}}'" ) - .build() ); } @@ -144,12 +142,11 @@ public void writeAlias_invalid_isWriteIndex() { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - buildValidationFailureReportPattern() + .satisfies( + hasValidationFailureReport() .aliasContext( defaultWriteAlias( index.name() ).original ) .aliasAttributeContext( "is_write_index" ) .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); } @@ -163,11 +160,10 @@ public void readAlias_missing() { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - buildValidationFailureReportPattern() + .satisfies( + hasValidationFailureReport() .aliasContext( defaultReadAlias( index.name() ).original ) .failure( "Missing alias" ) - .build() ); } @@ -183,12 +179,11 @@ public void readAlias_invalid_filter() { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( - buildValidationFailureReportPattern() + .satisfies( + hasValidationFailureReport() .aliasContext( defaultReadAlias( index.name() ).original ) .aliasAttributeContext( "filter" ) .failure( "Invalid value. Expected 'null', actual is '{\"term\":{\"user_id\":12}}'" ) - .build() ); } diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAnalyzerIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAnalyzerIT.java index 3c56b9529d7..d3489c365bf 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAnalyzerIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationAnalyzerIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import java.util.EnumSet; @@ -18,7 +18,8 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.Futures; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportChecker; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingSchemaManagementStrategy; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; @@ -149,10 +150,9 @@ public void analyzer_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Missing analyzer" ) - .build() ); } @@ -199,13 +199,12 @@ public void analyzer_charFilters_invalid() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Invalid char filters. Expected '[custom-pattern-replace]'," + " actual is '[html_strip]'" ) - .build() ); } @@ -252,13 +251,12 @@ public void analyzer_tokenizer_invalid() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Invalid tokenizer. Expected 'custom-edgeNGram'," + " actual is 'whitespace'" ) - .build() ); } @@ -305,13 +303,12 @@ public void analyzer_tokenFilters_invalid() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Invalid token filters. Expected '[custom-keep-types, custom-word-delimiter]'," + " actual is '[lowercase, custom-word-delimiter]'" ) - .build() ); } @@ -343,12 +340,11 @@ public void charFilter_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Missing analyzer" ) .charFilterContext( "custom-pattern-replace" ) .failure( "Missing char filter" ) - .build() ); } @@ -381,12 +377,11 @@ public void tokenizer_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Missing analyzer" ) .tokenizerContext( "custom-edgeNGram" ) .failure( "Missing tokenizer" ) - .build() ); } @@ -416,12 +411,11 @@ public void tokenFilter_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .analyzerContext( "custom-analyzer" ) .failure( "Missing analyzer" ) .tokenFilterContext( "custom-keep-types" ) .failure( "Missing token filter" ) - .build() ); } @@ -468,12 +462,11 @@ public void charFilter_type_invalid() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .charFilterContext( "custom-pattern-replace" ) .failure( "Invalid type. Expected 'pattern_replace', actual is 'html_strip'" ) - .build() ); } @@ -520,13 +513,12 @@ public void charFilter_parameter_invalid() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .charFilterContext( "custom-pattern-replace" ) .analysisDefinitionParameterContext( "pattern" ) .failure( "Invalid value. Expected '\"[^0-9]\"', actual is '\"[^a-z]\"'" ) - .build() ); } @@ -573,13 +565,12 @@ public void charFilter_parameter_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - FailureReportUtils.buildFailureReportPattern() + FailureReportUtils.hasFailureReport() .charFilterContext( "custom-pattern-replace" ) .analysisDefinitionParameterContext( "tags" ) .failure( "Invalid value. Expected '\"CASE_INSENSITIVE|COMMENTS\"', actual is 'null'" ) - .build() ); } @@ -627,20 +618,19 @@ public void tokenFilter_parameter_unexpected() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .tokenFilterContext( "custom-word-delimiter" ) .analysisDefinitionParameterContext( "generate_number_parts" ) .failure( "Invalid value. Expected 'null', actual is '\"false\"'" ) - .build() ); } - private void setupAndValidateExpectingFailure(String failureReportPattern) { + private void setupAndValidateExpectingFailure(FailureReportChecker failureReportChecker) { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( failureReportPattern ); + .satisfies( failureReportChecker ); } private void setupAndValidate() { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomMappingIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomMappingIT.java index ffeea9eaad3..fa1c0903fd1 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomMappingIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomMappingIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import java.util.EnumSet; @@ -111,11 +111,10 @@ public void wrongSource() { assertThatThrownBy( () -> setupAndValidate( "no-overlapping.json" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .mappingAttributeContext( "_source" ) // "_source" enabled is the default, so it is not presented by ES - .failure( "Custom index mapping attribute missing" ) - .build() ); + .failure( "Custom index mapping attribute missing" ) ); } @Test @@ -144,10 +143,9 @@ public void missingSource() { assertThatThrownBy( () -> setupAndValidate( "no-overlapping.json" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .mappingAttributeContext( "_source" ) - .failure( "Custom index mapping attribute missing" ) - .build() ); + .failure( "Custom index mapping attribute missing" ) ); } @Test @@ -178,7 +176,7 @@ public void wrongField() { assertThatThrownBy( () -> setupAndValidate( "no-overlapping.json" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "userField" ) .mappingAttributeContext( "type" ) .failure( "Invalid value. Expected 'keyword', actual is 'integer'" ) @@ -187,8 +185,7 @@ public void wrongField() { .mappingAttributeContext( "norms" ) .failure( "Invalid value. Expected 'true', actual is 'null'" ) .mappingAttributeContext( "doc_values" ) - .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); + .failure( "Invalid value. Expected 'true', actual is 'false'" ) ); } @Test @@ -214,10 +211,9 @@ public void missingField() { assertThatThrownBy( () -> setupAndValidate( "no-overlapping.json" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "userField" ) - .failure( "Missing property mapping" ) - .build() ); + .failure( "Missing property mapping" ) ); } private void setupAndValidate(String customMappingFile) { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomSettingsIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomSettingsIT.java index 07ae9d94b62..cb6bb44db94 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomSettingsIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationCustomSettingsIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import java.util.EnumSet; @@ -19,6 +19,7 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.Futures; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportChecker; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingSchemaManagementStrategy; @@ -124,7 +125,7 @@ public void invalid_analysis() { ); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .tokenizerContext( "my_analyzer_ngram_tokenizer" ) .analysisDefinitionParameterContext( "min_gram" ) .failure( @@ -134,7 +135,6 @@ public void invalid_analysis() { .failure( "Invalid value. Expected '\"6\"', actual is '\"3\"'" ) - .build() ); } @@ -171,12 +171,11 @@ public void invalid_numberOfShards() { ); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .indexSettingsCustomAttributeContext( "number_of_shards" ) .failure( "Invalid value. Expected '\"3\"', actual is '\"7\"'" ) - .build() ); } @@ -190,12 +189,11 @@ public void invalid_maxResultWindow() { assertThatThrownBy( () -> setupAndValidate( "max-result-window.json" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexSettingsCustomAttributeContext( "max_result_window" ) .failure( "Invalid value. Expected '250', actual is '20000'" - ) - .build() ); + ) ); } @Test @@ -222,10 +220,10 @@ public void empty() { // If we get here, it means validation passed (no exception was thrown) } - private void setupAndValidateExpectingFailure(String failureReportPattern) { + private void setupAndValidateExpectingFailure(FailureReportChecker failureReportChecker) { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( failureReportPattern ); + .satisfies( failureReportChecker ); } private void setupAndValidate() { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingAttributeIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingAttributeIT.java index 5543958061e..7eb328404ef 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingAttributeIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingAttributeIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.defaultMetadataMappingAndCommaForInitialization; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import static org.junit.Assume.assumeFalse; @@ -84,10 +84,9 @@ public void attribute_dynamic_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .mappingAttributeContext( "dynamic" ) - .failure( "Invalid value. Expected 'STRICT', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected 'STRICT', actual is 'null'" ) ); } @Test @@ -112,10 +111,9 @@ public void attribute_dynamic_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .mappingAttributeContext( "dynamic" ) - .failure( "Invalid value. Expected 'STRICT', actual is 'FALSE'" ) - .build() ); + .failure( "Invalid value. Expected 'STRICT', actual is 'FALSE'" ) ); } @@ -134,12 +132,11 @@ public void attribute_properties_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "_entity_type" ) .failure( "Missing property mapping" ) .indexFieldContext( "myField" ) - .failure( "Missing property mapping" ) - .build() ); + .failure( "Missing property mapping" ) ); } @Test @@ -159,12 +156,11 @@ public void attribute_properties_empty() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "_entity_type" ) .failure( "Missing property mapping" ) .indexFieldContext( "myField" ) - .failure( "Missing property mapping" ) - .build() ); + .failure( "Missing property mapping" ) ); } @Test @@ -185,11 +181,10 @@ public void attribute_type_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "type" ) - .failure( "Invalid value. Expected 'integer', actual is 'keyword'" ) - .build() ); + .failure( "Invalid value. Expected 'integer', actual is 'keyword'" ) ); } @Test @@ -249,11 +244,10 @@ public void attribute_index_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "index" ) - .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); + .failure( "Invalid value. Expected 'true', actual is 'false'" ) ); } @Test @@ -316,15 +310,14 @@ public void attribute_format_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "format" ) .failure( "The output format (the first element) is invalid." ) .failure( "Invalid formats", "missing elements are '" + allFormats + "'" - ) - .build() ); + ) ); } @Test @@ -374,14 +367,13 @@ public void attribute_format_incomplete() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "format" ) .failure( "Invalid formats", "missing elements are '" + nextFormats + "'" - ) - .build() ); + ) ); } @Test @@ -404,14 +396,13 @@ public void attribute_format_exceeding() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "format" ) .failure( "Invalid formats", "unexpected elements are '[yyyy]'" - ) - .build() ); + ) ); } @Test @@ -432,15 +423,14 @@ public void attribute_format_wrong() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "format" ) .failure( "The output format (the first element) is invalid. Expected '" + elasticSearchClient.getDialect().getFirstLocalDateDefaultMappingFormat() + "', actual is 'epoch_millis'" - ) - .build() ); + ) ); } @Test @@ -461,11 +451,10 @@ public void attribute_analyzer_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "analyzer" ) - .failure( "Invalid value. Expected 'keyword', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected 'keyword', actual is 'null'" ) ); } @Test @@ -507,11 +496,10 @@ public void attribute_analyzer_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "analyzer" ) - .failure( "Invalid value. Expected 'default', actual is 'keyword'" ) - .build() ); + .failure( "Invalid value. Expected 'default', actual is 'keyword'" ) ); } @Test @@ -534,11 +522,10 @@ public void attribute_searchAnalyzer_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "search_analyzer" ) - .failure( "Invalid value. Expected 'italian', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected 'italian', actual is 'null'" ) ); } @Test @@ -583,11 +570,10 @@ public void attribute_searchAnalyzer_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "search_analyzer" ) - .failure( "Invalid value. Expected 'italian', actual is 'english'" ) - .build() ); + .failure( "Invalid value. Expected 'italian', actual is 'english'" ) ); } @Test @@ -627,11 +613,10 @@ public void property_norms_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "norms" ) .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); } @@ -729,11 +714,10 @@ public void property_termVector_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "term_vector" ) - .failure( "Invalid value. Expected 'yes', actual is 'with_offsets'" ) - .build() ); + .failure( "Invalid value. Expected 'yes', actual is 'with_offsets'" ) ); } @Test @@ -772,11 +756,10 @@ public void attribute_nullValue_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "null_value" ) - .failure( "Invalid value. Expected '739', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected '739', actual is 'null'" ) ); } @Test @@ -797,11 +780,10 @@ public void attribute_nullValue_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "null_value" ) - .failure( "Invalid value. Expected '739', actual is '777'" ) - .build() ); + .failure( "Invalid value. Expected '739', actual is '777'" ) ); } @Test @@ -859,11 +841,10 @@ public void attribute_docValues_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "doc_values" ) - .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); + .failure( "Invalid value. Expected 'true', actual is 'false'" ) ); } @Test @@ -943,11 +924,10 @@ public void attribute_scaling_factor_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "scaling_factor" ) - .failure( "Invalid value. Expected '100.0', actual is '2.0'" ) - .build() ); + .failure( "Invalid value. Expected '100.0', actual is '2.0'" ) ); } @Test @@ -968,11 +948,10 @@ public void attribute_normalizer_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "normalizer" ) - .failure( "Invalid value. Expected 'default', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected 'default', actual is 'null'" ) ); } @Test @@ -1058,11 +1037,10 @@ public void attribute_normalizer_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( Exception.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldContext( "myField" ) .mappingAttributeContext( "normalizer" ) - .failure( "Invalid value. Expected 'another-normalizer', actual is 'custom-normalizer'" ) - .build() ); + .failure( "Invalid value. Expected 'another-normalizer', actual is 'custom-normalizer'" ) ); } private void setupAndValidate(StubMappedIndex index) { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingBaseIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingBaseIT.java index 03f35f02fcf..bd9b4d5c422 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingBaseIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingBaseIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.defaultMetadataMappingAndCommaForInitialization; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import static org.junit.Assume.assumeTrue; @@ -23,6 +23,7 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.Futures; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportChecker; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingSchemaManagementStrategy; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; @@ -156,9 +157,8 @@ public void mapping_missing() { setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .failure( "Missing type mapping" ) - .build() ); } @@ -180,10 +180,9 @@ public void attribute_field_notPresent() { setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .indexFieldContext( "myField" ) .failure( "Missing property mapping" ) - .build() ); } @@ -264,14 +263,13 @@ public void floatAndDouble_nullValue_invalids() { ); setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .indexFieldContext( "double" ) .mappingAttributeContext( "null_value" ) .failure( "Invalid value. Expected '1.7', actual is '1.9'" ) .indexFieldContext( "float" ) .mappingAttributeContext( "null_value" ) .failure( "Invalid value. Expected '1.7', actual is '1.9'" ) - .build() ); } @@ -303,14 +301,13 @@ public void floatAndDouble_nullValue_invalids_notNumbers() { ); setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .indexFieldContext( "double" ) .mappingAttributeContext( "null_value" ) .failure( "Invalid value. Expected '\"BBB\"', actual is '1.9'" ) .indexFieldContext( "float" ) .mappingAttributeContext( "null_value" ) .failure( "Invalid value. Expected '\"AAA\"', actual is '1.9'" ) - .build() ); } @@ -346,11 +343,10 @@ public void nestedProperty_attribute_invalid() { setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .indexFieldContext( "myObjectField.myField" ) .mappingAttributeContext( "index" ) .failure( "Invalid value. Expected 'true', actual is 'false'" ) - .build() ); } @@ -376,7 +372,7 @@ public void multipleErrors() { setupAndValidateExpectingFailure( index, - buildValidationFailureReportPattern() + hasValidationFailureReport() .mappingAttributeContext( "dynamic" ) .failure( "Invalid value. Expected 'STRICT', actual is 'FALSE'" @@ -386,14 +382,13 @@ public void multipleErrors() { .failure( "Invalid value. Expected 'keyword', actual is 'integer'" ) - .build() ); } - private void setupAndValidateExpectingFailure(StubMappedIndex index, String failureReportRegex) { + private void setupAndValidateExpectingFailure(StubMappedIndex index, FailureReportChecker failureReportChecker) { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( failureReportRegex ); + .satisfies( failureReportChecker ); } private void setupAndValidate(StubMappedIndex index) { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingFieldTemplateIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingFieldTemplateIT.java index 7652ab57cd1..1ca1bf76b36 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingFieldTemplateIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationMappingFieldTemplateIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.defaultMetadataMappingForInitialization; import java.util.EnumSet; @@ -128,10 +128,9 @@ public void missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate2" ) - .failure( "Missing dynamic field template" ) - .build() ); + .failure( "Missing dynamic field template" ) ); } @Test @@ -171,10 +170,9 @@ public void extra() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "extraTemplate" ) - .failure( "Unexpected dynamic field template" ) - .build() ); + .failure( "Unexpected dynamic field template" ) ); } @Test @@ -210,13 +208,12 @@ public void wrongOrder() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .failure( "Invalid order for dynamic field templates", "Expected [myTemplate1, myTemplate2, myTemplate3]", "actual is [myTemplate2, myTemplate1, myTemplate3]" - ) - .build() ); + ) ); } @Test @@ -246,13 +243,12 @@ public void duplicate() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate1" ) .failure( "Multiple dynamic field templates with this name", "The names of dynamic field template must be unique" - ) - .build() ); + ) ); } @Test @@ -279,11 +275,10 @@ public void attribute_pathMatch_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "path_match" ) - .failure( "Invalid value. Expected '*_suffix', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected '*_suffix', actual is 'null'" ) ); } @Test @@ -311,11 +306,10 @@ public void attribute_pathMatch_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "path_match" ) - .failure( "Invalid value. Expected '*_suffix', actual is '*_suffix2'" ) - .build() ); + .failure( "Invalid value. Expected '*_suffix', actual is '*_suffix2'" ) ); } @Test @@ -341,11 +335,10 @@ public void attribute_pathMatch_extra() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "path_match" ) - .failure( "Invalid value. Expected '*', actual is '*_suffix'" ) - .build() ); + .failure( "Invalid value. Expected '*', actual is '*_suffix'" ) ); } @Test @@ -371,11 +364,10 @@ public void attribute_matchMappingType_missing() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "match_mapping_type" ) - .failure( "Invalid value. Expected 'object', actual is 'null'" ) - .build() ); + .failure( "Invalid value. Expected 'object', actual is 'null'" ) ); } @Test @@ -402,11 +394,10 @@ public void attribute_matchMappingType_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "match_mapping_type" ) - .failure( "Invalid value. Expected 'object', actual is 'long'" ) - .build() ); + .failure( "Invalid value. Expected 'object', actual is 'long'" ) ); } @Test @@ -433,11 +424,10 @@ public void attribute_matchMappingType_extra() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "match_mapping_type" ) - .failure( "Invalid value. Expected 'null', actual is 'long'" ) - .build() ); + .failure( "Invalid value. Expected 'null', actual is 'long'" ) ); } @Test @@ -464,11 +454,10 @@ public void attribute_extra() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "match" ) - .failure( "Invalid value. Expected 'null', actual is '\"*_suffix\"'" ) - .build() ); + .failure( "Invalid value. Expected 'null', actual is '\"*_suffix\"'" ) ); } @Test @@ -494,12 +483,11 @@ public void mapping_invalid() { assertThatThrownBy( () -> setupAndValidate( index ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( buildValidationFailureReportPattern() + .satisfies( hasValidationFailureReport() .indexFieldTemplateContext( "myTemplate" ) .fieldTemplateAttributeContext( "mapping" ) .mappingAttributeContext( "type" ) - .failure( "Invalid value. Expected 'keyword', actual is 'integer'" ) - .build() ); + .failure( "Invalid value. Expected 'keyword', actual is 'integer'" ) ); } private void setupAndValidate(StubMappedIndex index) { diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationNormalizerIT.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationNormalizerIT.java index bc324f77a4b..fdd351ef774 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationNormalizerIT.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/schema/management/ElasticsearchIndexSchemaManagerValidationNormalizerIT.java @@ -7,7 +7,7 @@ package org.hibernate.search.integrationtest.backend.elasticsearch.schema.management; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.buildValidationFailureReportPattern; +import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.hasValidationFailureReport; import static org.hibernate.search.integrationtest.backend.elasticsearch.schema.management.ElasticsearchIndexSchemaManagerTestUtils.simpleMappingForInitialization; import java.util.EnumSet; @@ -18,6 +18,7 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.Futures; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.rule.TestElasticsearchClient; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportChecker; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingSchemaManagementStrategy; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; @@ -111,17 +112,16 @@ public void normalizer_missing() throws Exception { putMapping(); setupAndValidateExpectingFailure( - buildValidationFailureReportPattern() + hasValidationFailureReport() .normalizerContext( "custom-normalizer" ) .failure( "Missing normalizer" ) - .build() ); } - private void setupAndValidateExpectingFailure(String failureReportPattern) { + private void setupAndValidateExpectingFailure(FailureReportChecker failureReportChecker) { assertThatThrownBy( this::setupAndValidate ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( failureReportPattern ); + .satisfies( failureReportChecker ); } private void setupAndValidate() { diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneDocumentModelDslIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneDocumentModelDslIT.java index 9d466723df8..1700a641c18 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneDocumentModelDslIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneDocumentModelDslIT.java @@ -14,7 +14,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.configuration.DefaultAnalysisDefinitions; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.junit.Rule; @@ -37,11 +37,10 @@ public void unknownAnalyzer() { "Referencing an unknown analyzer" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) - .failure( "Unknown analyzer" ) - .build() ); + .failure( "Unknown analyzer" ) ); } @Test @@ -54,11 +53,10 @@ public void unknownNormalizer() { "Referencing an unknown analyzer" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) - .failure( "Unknown normalizer" ) - .build() ); + .failure( "Unknown normalizer" ) ); } @Test @@ -72,11 +70,10 @@ public void unknownSearchAnalyzer() { "Referencing an unknown search analyzer" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) - .failure( "Unknown analyzer" ) - .build() ); + .failure( "Unknown analyzer" ) ); } private void setup(Consumer mappingContributor) { diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java index 4b4ec668ce7..658c6f7693d 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/LuceneExtensionIT.java @@ -82,7 +82,7 @@ import org.hibernate.search.engine.search.sort.SearchSort; import org.hibernate.search.engine.spatial.GeoPoint; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.test.annotation.TestForIssue; import org.junit.Before; diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/analysis/LuceneAnalysisConfigurerIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/analysis/LuceneAnalysisConfigurerIT.java index da346d7bb70..f3a85a7d0f8 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/analysis/LuceneAnalysisConfigurerIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/analysis/LuceneAnalysisConfigurerIT.java @@ -21,7 +21,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.impl.integrationtest.backend.lucene.LuceneAnalysisUtils; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -133,7 +133,7 @@ public void error_invalidReference() { () -> setup( "foobar" ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( ANALYSIS_CONFIGURER_ERROR_MESSAGE_PREFIX, @@ -141,7 +141,6 @@ public void error_invalidReference() { + LuceneBackendSettings.ANALYSIS_CONFIGURER + "': 'foobar'", "Unable to load class 'foobar'" ) - .build() ); } @@ -151,13 +150,12 @@ public void error_failingConfigurer() { () -> setup( FailingConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( ANALYSIS_CONFIGURER_ERROR_MESSAGE_PREFIX, FailingConfigurer.FAILURE_MESSAGE ) - .build() ); } @@ -181,7 +179,7 @@ public void error_parameter_namingConflict() { () -> setup( ParameterNamingConflictConfigurer.class.getName() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( ANALYSIS_CONFIGURER_ERROR_MESSAGE_PREFIX, @@ -189,7 +187,6 @@ public void error_parameter_namingConflict() { "'value1'", "'value2'" ) - .build() ); } diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/AbstractBuiltInDirectoryIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/AbstractBuiltInDirectoryIT.java index fefd1c13737..43a47366ac3 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/AbstractBuiltInDirectoryIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/AbstractBuiltInDirectoryIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.backend.lucene.lowlevel.index.impl.IndexAccessorImpl; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -86,14 +86,13 @@ public void lockingStrategy_invalid() { "some_invalid_name" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .indexContext( index.name() ) .failure( "Invalid locking strategy name", "'some_invalid_name'", "Valid names are: [simple-filesystem, native-filesystem, single-instance, none]" ) - .build() ); testValidLockingStrategy( "none", NO_LOCK_FQN ); } @@ -144,13 +143,12 @@ private void testInvalidFSLockingStrategy(String strategyName) { strategyName ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .indexContext( index.name() ) .failure( "Unable to initialize index directory", "can only be used with FSDirectory subclasses" ) - .build() ); } diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/CustomDirectoryIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/CustomDirectoryIT.java index f3182e9ee94..ce898405abb 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/CustomDirectoryIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/CustomDirectoryIT.java @@ -16,7 +16,7 @@ import org.hibernate.search.backend.lucene.lowlevel.directory.spi.DirectoryHolder; import org.hibernate.search.backend.lucene.lowlevel.directory.spi.DirectoryProvider; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; import org.hibernate.search.util.impl.test.annotation.TestForIssue; import org.hibernate.search.util.impl.test.rule.StaticCounters; @@ -62,7 +62,7 @@ public void invalid() { String invalidDirectoryType = "someInvalidDirectoryType"; assertThatThrownBy( () -> setup( "someInvalidDirectoryType", c -> c.expectCustomBeans() ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .indexContext( index.name() ) .failure( "Invalid value for configuration property 'hibernate.search.backend.directory.type': '" @@ -71,9 +71,7 @@ public void invalid() { + "' and name '" + invalidDirectoryType + "' in Hibernate Search's internal registry", "Unable to load class '" + invalidDirectoryType + "'" - ) - .build() - ); + ) ); } public static class CustomDirectoryProvider implements DirectoryProvider { diff --git a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/LuceneLocalFileSystemDirectoryIT.java b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/LuceneLocalFileSystemDirectoryIT.java index 6caae3ab6e6..4c6992e98fd 100644 --- a/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/LuceneLocalFileSystemDirectoryIT.java +++ b/integrationtest/backend/lucene/src/test/java/org/hibernate/search/integrationtest/backend/lucene/lowlevel/directory/LuceneLocalFileSystemDirectoryIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.backend.lucene.index.impl.Shard; import org.hibernate.search.backend.lucene.lowlevel.index.impl.IndexAccessorImpl; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; import org.hibernate.search.util.impl.test.annotation.TestForIssue; import org.hibernate.search.util.impl.test.rule.ExpectedLog4jLog; @@ -112,14 +112,13 @@ public void filesystemAccessStrategy_invalid() { "some_invalid_name" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .indexContext( index.name() ) .failure( "Invalid filesystem access strategy name", "'some_invalid_name'", "Valid names are: [auto, simple, nio, mmap]" ) - .build() ); } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldIT.java index 5bf641a2c6b..af5cf07ea77 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.engine.mapper.mapping.building.spi.IndexBindingContext; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.junit.Rule; @@ -48,12 +48,11 @@ public void nullFieldName() { "Null field name on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field name 'null': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name 'null': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -64,12 +63,11 @@ public void nullFieldName() { "Null field name on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field name 'null': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name 'null': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -79,12 +77,11 @@ public void nullFieldName() { "Null object field name on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field name 'null': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name 'null': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -95,12 +92,11 @@ public void nullFieldName() { ) .isInstanceOf( SearchException.class ) .hasMessageContaining( "Invalid index field name 'null': field names cannot be null or empty" ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field name 'null': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name 'null': field names cannot be null or empty" ) ); } @Test @@ -113,12 +109,11 @@ public void emptyFieldName() { "empty field name on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field name '': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name '': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -128,12 +123,11 @@ public void emptyFieldName() { "empty field name on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field name '': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name '': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -143,12 +137,11 @@ public void emptyFieldName() { "empty object field name on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field name '': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name '': field names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -158,12 +151,11 @@ public void emptyFieldName() { "empty object field name on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field name '': field names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field name '': field names cannot be null or empty" ) ); } @Test @@ -176,7 +168,7 @@ public void dotInFieldName() { "field name containing a dot on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() @@ -185,8 +177,7 @@ public void dotInFieldName() { " Remove the dot from your field name", "if you are declaring the field in a bridge and want a tree of fields,", " declare an object field using the objectField() method." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -196,7 +187,7 @@ public void dotInFieldName() { "field name containing a dot on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) @@ -205,8 +196,7 @@ public void dotInFieldName() { " Remove the dot from your field name", "if you are declaring the field in a bridge and want a tree of fields,", " declare an object field using the objectField() method." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -216,7 +206,7 @@ public void dotInFieldName() { "object field name containing a dot on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() @@ -225,8 +215,7 @@ public void dotInFieldName() { " Remove the dot from your field name", "if you are declaring the field in a bridge and want a tree of fields,", " declare an object field using the objectField() method." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -236,7 +225,7 @@ public void dotInFieldName() { "object field name containing a dot on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) @@ -245,8 +234,7 @@ public void dotInFieldName() { " Remove the dot from your field name", "if you are declaring the field in a bridge and want a tree of fields,", " declare an object field using the objectField() method." - ) - .build() ); + ) ); } @Test @@ -260,12 +248,11 @@ public void nameCollision_fields() { "Name collision between two fields on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -278,12 +265,11 @@ public void nameCollision_fields() { "Name collision between two fields on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); } @Test @@ -297,12 +283,11 @@ public void nameCollision_objectFields() { "Name collision between two object fields on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -315,12 +300,11 @@ public void nameCollision_objectFields() { "Name collision between two object fields on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); } @Test @@ -334,12 +318,11 @@ public void nameCollision_fieldAndObjectField() { "Name collision between two fields on root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -352,12 +335,11 @@ public void nameCollision_fieldAndObjectField() { "Name collision between two fields (object and non-object) on non-root" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field definition: 'field1'" ) ); } @Test @@ -370,12 +352,11 @@ public void missingToReferenceCall() { "Missing toReference() call after field()" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "myField" ) - .failure( "Incomplete field definition" ) - .build() ); + .failure( "Incomplete field definition" ) ); assertThatThrownBy( () -> setup( ctx -> { IndexSchemaElement root = ctx.schemaElement(); @@ -384,12 +365,11 @@ public void missingToReferenceCall() { "Missing toReference() call after objectField()" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "myField" ) - .failure( "Incomplete field definition" ) - .build() ); + .failure( "Incomplete field definition" ) ); } @Test @@ -407,12 +387,11 @@ public void multipleToReferenceCall() { "Multiple toReference() calls after field()" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "myField" ) - .failure( "Multiple calls to toReference() for the same field definition" ) - .build() ); + .failure( "Multiple calls to toReference() for the same field definition" ) ); assertThatThrownBy( () -> setup( ctx -> { IndexSchemaElement root = ctx.schemaElement(); @@ -423,12 +402,11 @@ public void multipleToReferenceCall() { "Multiple toReference() calls after objectField()" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "myField" ) - .failure( "Multiple calls to toReference() for the same field definition" ) - .build() ); + .failure( "Multiple calls to toReference() for the same field definition" ) ); } private IndexFieldTypeFinalStep irrelevantTypeContributor(IndexFieldTypeFactory factoryContext) { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldTemplateIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldTemplateIT.java index 8d3cc9423ff..5e5d56a7211 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldTemplateIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementFieldTemplateIT.java @@ -17,7 +17,7 @@ import org.hibernate.search.engine.mapper.mapping.building.spi.IndexBindingContext; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.junit.Rule; @@ -46,12 +46,11 @@ public void nullName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -61,12 +60,11 @@ public void nullName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -75,12 +73,11 @@ public void nullName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -89,12 +86,11 @@ public void nullName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name 'null': field template names cannot be null or empty" ) ); } @Test @@ -106,12 +102,11 @@ public void emptyName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field template name '': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name '': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -120,12 +115,11 @@ public void emptyName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field template name '': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name '': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -134,12 +128,11 @@ public void emptyName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Invalid index field template name '': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name '': field template names cannot be null or empty" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -148,12 +141,11 @@ public void emptyName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) - .failure( "Invalid index field template name '': field template names cannot be null or empty" ) - .build() ); + .failure( "Invalid index field template name '': field template names cannot be null or empty" ) ); } @Test @@ -165,14 +157,13 @@ public void dotInName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() .failure( "Invalid index field template name 'foo.bar': field template names cannot contain a dot ('.')." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -181,14 +172,13 @@ public void dotInName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) .failure( "Invalid index field template name 'foo.bar': field template names cannot contain a dot ('.')." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -197,14 +187,13 @@ public void dotInName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() .failure( "Invalid index field template name 'foo.bar': field template names cannot contain a dot ('.')." - ) - .build() ); + ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -213,14 +202,13 @@ public void dotInName() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "nonRoot" ) .failure( "Invalid index field template name 'foo.bar': field template names cannot contain a dot ('.')." - ) - .build() ); + ) ); } @Test @@ -233,12 +221,11 @@ public void nameCollision_fieldTemplates() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -250,12 +237,11 @@ public void nameCollision_fieldTemplates() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); } @Test @@ -268,12 +254,11 @@ public void nameCollision_objectFieldTemplates() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -285,12 +270,11 @@ public void nameCollision_objectFieldTemplates() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); } @Test @@ -303,12 +287,11 @@ public void nameCollision_fieldTemplateAndObjectFieldTemplate() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexSchemaRootContext() - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); assertThatThrownBy( () -> setup( ctx -> { @@ -320,12 +303,11 @@ public void nameCollision_fieldTemplateAndObjectFieldTemplate() { } ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .indexFieldContext( "object1.object2" ) - .failure( "Duplicate index field template definition: 'field1'" ) - .build() ); + .failure( "Duplicate index field template definition: 'field1'" ) ); } private IndexFieldTypeFinalStep irrelevantTypeContributor(IndexFieldTypeFactory factoryContext) { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementTypeIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementTypeIT.java index 0a324596160..e53bb30a09b 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementTypeIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/document/IndexSchemaElementTypeIT.java @@ -17,7 +17,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.configuration.DefaultAnalysisDefinitions; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.junit.Rule; @@ -53,7 +53,7 @@ public void analyzerOnSortableField() { "Setting an analyzer on sortable field" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .failure( @@ -66,8 +66,7 @@ public void analyzerOnSortableField() { "If you need an actual analyzer (with tokenization), define two separate fields:" + " one with an analyzer that is not sortable," + " and one with a normalizer that is sortable" - ) - .build() ); + ) ); } @Test @@ -86,7 +85,7 @@ public void analyzerOnAggregableField() { "Setting an analyzer on aggregable field" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .failure( @@ -100,8 +99,7 @@ public void analyzerOnAggregableField() { "If you need an actual analyzer (with tokenization), define two separate fields:" + " one with an analyzer that is not aggregable," + " and one with a normalizer that is aggregable." - ) - .build() ); + ) ); } @Test @@ -120,7 +118,7 @@ public void analyzerAndNormalizer() { "Setting an analyzer and a normalizer on the same field" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .failure( @@ -128,8 +126,7 @@ public void analyzerAndNormalizer() { "'" + DefaultAnalysisDefinitions.ANALYZER_STANDARD_ENGLISH.name + "'", "'" + DefaultAnalysisDefinitions.NORMALIZER_LOWERCASE.name + "'", "Either an analyzer or a normalizer can be assigned, but not both" - ) - .build() ); + ) ); } @Test @@ -147,7 +144,7 @@ public void searchAnalyzerWithoutAnalyzer() { "Setting a search analyzer, without setting an analyzer on the same field" ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( index.typeName() ) .indexContext( index.name() ) .failure( @@ -155,8 +152,7 @@ public void searchAnalyzerWithoutAnalyzer() { + DefaultAnalysisDefinitions.ANALYZER_STANDARD_ENGLISH.name + "'" + " is assigned to this type, but the indexing analyzer is missing.", "Assign an indexing analyzer and a search analyzer, or remove the search analyzer" - ) - .build() ); + ) ); } private void setup(Consumer mappingContributor) { diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/SearchMultiIndexIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/SearchMultiIndexIT.java index e1dae78fd6c..38cbb4cdabb 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/SearchMultiIndexIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/SearchMultiIndexIT.java @@ -22,7 +22,7 @@ import org.hibernate.search.engine.search.query.SearchScrollResult; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/SingleFieldAggregationUnsupportedTypesIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/SingleFieldAggregationUnsupportedTypesIT.java index ada7e669788..26b487a80ce 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/SingleFieldAggregationUnsupportedTypesIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/aggregation/SingleFieldAggregationUnsupportedTypesIT.java @@ -25,7 +25,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; import org.hibernate.search.util.impl.test.annotation.TestForIssue; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScaleCheckingIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScaleCheckingIT.java index 3b15a7da2f8..103321d119d 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScaleCheckingIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateScaleCheckingIT.java @@ -19,7 +19,7 @@ import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSimpleAnalysisIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSimpleAnalysisIT.java index b2a1ba324f5..c558d41aed2 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSimpleAnalysisIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateSimpleAnalysisIT.java @@ -22,7 +22,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModel; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.CollectionHelper; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java index 2b3fffd3c72..0f4f886d5dd 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingAndConversionIT.java @@ -27,7 +27,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.ValueWrapper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingNoConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingNoConversionIT.java index 98c032b1666..ff1afaec081 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingNoConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateTypeCheckingNoConversionIT.java @@ -27,7 +27,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.ValueWrapper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java index a4d49bc2084..f6600b0fbb6 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/AbstractPredicateUnsupportedTypeIT.java @@ -16,7 +16,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.types.FieldTypeDescriptor; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.junit.Test; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsSpecificsIT.java index b48d01e06b0..ce22279422e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/ExistsPredicateObjectsSpecificsIT.java @@ -21,7 +21,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.TckConfiguration; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateSpecificsIT.java index 5934f6af016..b13e472355e 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchIdPredicateSpecificsIT.java @@ -20,7 +20,7 @@ import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateFuzzyIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateFuzzyIT.java index f135520bd87..1357efa0b39 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateFuzzyIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/MatchPredicateFuzzyIT.java @@ -30,7 +30,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.CollectionHelper; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.test.annotation.PortedFromSearch5; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NamedPredicateMultiIndexCompatibilityIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NamedPredicateMultiIndexCompatibilityIT.java index 60bd245989c..23a37efdbd1 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NamedPredicateMultiIndexCompatibilityIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/predicate/NamedPredicateMultiIndexCompatibilityIT.java @@ -20,7 +20,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModel; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortTypeCheckingAndConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortTypeCheckingAndConversionIT.java index 025a64cb768..be8dd138ef9 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortTypeCheckingAndConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortTypeCheckingAndConversionIT.java @@ -38,7 +38,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.ValueWrapper; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortUnsupportedTypesIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortUnsupportedTypesIT.java index 6943071a7fc..b14dea06482 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortUnsupportedTypesIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/DistanceSortUnsupportedTypesIT.java @@ -19,7 +19,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortScaledSpecificsIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortScaledSpecificsIT.java index f5e2f19a1df..be4d4694463 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortScaledSpecificsIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortScaledSpecificsIT.java @@ -16,7 +16,7 @@ import org.hibernate.search.engine.reporting.spi.EventContexts; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java index 0c5411749d5..a621277fccf 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortTypeCheckingAndConversionIT.java @@ -41,7 +41,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.ValueWrapper; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.BulkIndexer; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortUnsupportedTypesIT.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortUnsupportedTypesIT.java index 95598b2a740..24597a77971 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortUnsupportedTypesIT.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/search/sort/FieldSortUnsupportedTypesIT.java @@ -19,7 +19,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.util.SimpleFieldModelsByType; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.stub.SimpleMappedIndex; import org.hibernate.search.util.impl.integrationtest.mapper.stub.StubMappingScope; import org.hibernate.search.util.impl.test.annotation.TestForIssue; diff --git a/integrationtest/mapper/orm-cdi/src/test/java/org/hibernate/search/integrationtest/mapper/orm/cdi/CdiExtendedBeanManagerBootstrapShutdownIT.java b/integrationtest/mapper/orm-cdi/src/test/java/org/hibernate/search/integrationtest/mapper/orm/cdi/CdiExtendedBeanManagerBootstrapShutdownIT.java index d7e97b25846..41fb70c97e2 100644 --- a/integrationtest/mapper/orm-cdi/src/test/java/org/hibernate/search/integrationtest/mapper/orm/cdi/CdiExtendedBeanManagerBootstrapShutdownIT.java +++ b/integrationtest/mapper/orm-cdi/src/test/java/org/hibernate/search/integrationtest/mapper/orm/cdi/CdiExtendedBeanManagerBootstrapShutdownIT.java @@ -25,7 +25,7 @@ import org.hibernate.search.mapper.orm.Search; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.StubSearchWorkBehavior; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -144,10 +144,9 @@ public void failedBoot() { // But once the bean manager is ready... assertThatThrownBy( () -> extendedBeanManager.simulateBoot( DependentBean.class ) ) // Hibernate Search should have attempted to boot, but failed. - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() - .failure( bootFailedException.getMessage() ) - .build() ); + .failure( bootFailedException.getMessage() ) ); // Hibernate Search should have started to boot, then shut down. backendMock.verifyExpectationsMet(); diff --git a/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingInvalidConfigurationIT.java b/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingInvalidConfigurationIT.java index ae81e343385..977c6811821 100644 --- a/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingInvalidConfigurationIT.java +++ b/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingInvalidConfigurationIT.java @@ -17,7 +17,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.mapper.orm.CoordinationStrategyExpectations; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -41,10 +41,9 @@ public void pulseInterval_negative() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.pulse_interval", "-1" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_interval'", - "'-1'", "'value' must be strictly positive" ) - .build() ); + "'-1'", "'value' must be strictly positive" ) ); } @Test @@ -52,10 +51,9 @@ public void pulseInterval_zero() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.pulse_interval", "0" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_interval'", - "'0'", "'value' must be strictly positive" ) - .build() ); + "'0'", "'value' must be strictly positive" ) ); } @Test @@ -64,11 +62,10 @@ public void pulseInterval_lowerThanPollingInterval() { .withProperty( "hibernate.search.coordination.event_processor.pulse_interval", "40" ) .withProperty( "hibernate.search.coordination.event_processor.polling_interval", "50" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_interval'", "'40'", "The pulse interval must be greater than or equal to the polling interval", - "i.e. in this case at least 50" ) - .build() ); + "i.e. in this case at least 50" ) ); } @Test @@ -76,10 +73,9 @@ public void pulseExpiration_negative() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.pulse_expiration", "-1" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_expiration'", - "'-1'", "'value' must be strictly positive" ) - .build() ); + "'-1'", "'value' must be strictly positive" ) ); } @Test @@ -87,10 +83,9 @@ public void pulseExpiration_zero() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.pulse_expiration", "0" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_expiration'", - "'0'", "'value' must be strictly positive" ) - .build() ); + "'0'", "'value' must be strictly positive" ) ); } @Test @@ -99,12 +94,11 @@ public void pulseExpiration_lowerThan3TimesPollingInterval() { .withProperty( "hibernate.search.coordination.event_processor.pulse_expiration", "599" ) .withProperty( "hibernate.search.coordination.event_processor.pulse_interval", "200" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.pulse_expiration'", "'599'", "The pulse expiration must be greater than or equal to 3 times the pulse interval", - "i.e. in this case at least 600" ) - .build() ); + "i.e. in this case at least 600" ) ); } private void setup(UnaryOperator config) { diff --git a/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingStaticShardingInvalidConfigurationIT.java b/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingStaticShardingInvalidConfigurationIT.java index 376bc255566..0f2ed4c1a5a 100644 --- a/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingStaticShardingInvalidConfigurationIT.java +++ b/integrationtest/mapper/orm-coordination-outbox-polling/src/test/java/org/hibernate/search/integrationtest/mapper/orm/coordination/outboxpolling/automaticindexing/OutboxPollingAutomaticIndexingStaticShardingInvalidConfigurationIT.java @@ -16,7 +16,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.mapper.orm.CoordinationStrategyExpectations; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -40,10 +40,9 @@ public void totalCount_missing() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.shards.assigned", "0" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.total_count'", - "''", "This property must be set when 'hibernate.search.coordination.event_processor.shards.assigned' is set" ) - .build() ); + "''", "This property must be set when 'hibernate.search.coordination.event_processor.shards.assigned' is set" ) ); } @Test @@ -51,10 +50,9 @@ public void totalCount_zero() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "0" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.total_count'", - "'0'", "'value' must be strictly positive" ) - .build() ); + "'0'", "'value' must be strictly positive" ) ); } @Test @@ -62,10 +60,9 @@ public void totalCount_negative() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "-1" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.total_count'", - "'-1'", "'value' must be strictly positive" ) - .build() ); + "'-1'", "'value' must be strictly positive" ) ); } @Test @@ -73,10 +70,9 @@ public void assigned_missing() { assertThatThrownBy( () -> setup( context -> context .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "10" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.assigned'", - "''", "This property must be set when 'hibernate.search.coordination.event_processor.shards.total_count' is set" ) - .build() ); + "''", "This property must be set when 'hibernate.search.coordination.event_processor.shards.total_count' is set" ) ); } @Test @@ -85,11 +81,10 @@ public void assigned_negative() { .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "10" ) .withProperty( "hibernate.search.coordination.event_processor.shards.assigned", "-1" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.assigned'", "'-1'", - "'value' must be positive or zero" ) - .build() ); + "'value' must be positive or zero" ) ); } @Test @@ -98,12 +93,11 @@ public void assigned_equalToTotalCount() { .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "10" ) .withProperty( "hibernate.search.coordination.event_processor.shards.assigned", "10" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.assigned'", "'10'", "Shard indices must be between 0 (inclusive) and 10 (exclusive," - + " set by 'hibernate.search.coordination.event_processor.shards.total_count')" ) - .build() ); + + " set by 'hibernate.search.coordination.event_processor.shards.total_count')" ) ); } @Test @@ -112,12 +106,11 @@ public void assigned_greaterThanTotalCount() { .withProperty( "hibernate.search.coordination.event_processor.shards.total_count", "10" ) .withProperty( "hibernate.search.coordination.event_processor.shards.assigned", "11" ) ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .failure( "Invalid value for configuration property 'hibernate.search.coordination.event_processor.shards.assigned'", "'11'", "Shard indices must be between 0 (inclusive) and 10 (exclusive," - + " set by 'hibernate.search.coordination.event_processor.shards.total_count')" ) - .build() ); + + " set by 'hibernate.search.coordination.event_processor.shards.total_count')" ) ); } private void setup(UnaryOperator config) { diff --git a/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/bootstrap/BackendTypeAutoDetectMultipleBackendTypesInClasspathIT.java b/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/bootstrap/BackendTypeAutoDetectMultipleBackendTypesInClasspathIT.java index 56d1db390de..d84196745ce 100644 --- a/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/bootstrap/BackendTypeAutoDetectMultipleBackendTypesInClasspathIT.java +++ b/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/bootstrap/BackendTypeAutoDetectMultipleBackendTypesInClasspathIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.ElasticsearchBackendConfiguration; import org.hibernate.search.util.impl.integrationtest.backend.lucene.LuceneBackendConfiguration; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendConfiguration; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -60,14 +60,13 @@ public void backendType_notSet() { .withBackendProperty( "type", null ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Ambiguous backend type", "configuration property 'hibernate.search.backend.type' is not set," + " and multiple backend types are present in the classpath", "Set property 'hibernate.search.backend.type' to one of the following" - + " to select the backend type: [elasticsearch, lucene]" ) - .build() ); + + " to select the backend type: [elasticsearch, lucene]" ) ); } @Test diff --git a/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/multitenant/RealBackendDatabaseMultitenancyIT.java b/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/multitenant/RealBackendDatabaseMultitenancyIT.java index 0d15a6ad8df..e14b7a78495 100644 --- a/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/multitenant/RealBackendDatabaseMultitenancyIT.java +++ b/integrationtest/mapper/orm-realbackend/src/test/java/org/hibernate/search/integrationtest/mapper/orm/realbackend/multitenant/RealBackendDatabaseMultitenancyIT.java @@ -21,7 +21,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.GenericField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; import org.hibernate.search.util.impl.test.AssertionAndAssumptionViolationFallThrough; @@ -71,11 +71,10 @@ public void multiTenancyStrategy_none() { // This is necessary to correctly rethrow assumption failures (when not using H2) .satisfies( AssertionAndAssumptionViolationFallThrough.get() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .defaultBackendContext() .failure( "Invalid backend configuration: " + "mapping requires multi-tenancy but no multi-tenancy strategy is set" ) - .build() ); } diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/massindexing/AbstractMassIndexingFailureIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/massindexing/AbstractMassIndexingFailureIT.java index b57ce87c4dc..4b77af1b925 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/massindexing/AbstractMassIndexingFailureIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/massindexing/AbstractMassIndexingFailureIT.java @@ -31,7 +31,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.GenericField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.ThreadSpy; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.index.StubIndexScaleWork; @@ -279,10 +279,9 @@ public void dropAndCreateSchema_exception() { Search.mapping( sessionFactory ).scope( Object.class ).massIndexer().dropAndCreateSchemaOnStart( true ), ThreadExpectation.NOT_CREATED, throwable -> assertThat( throwable ).isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( Book.class.getName() ) - .failure( exceptionMessage ) - .build() ), + .failure( exceptionMessage ) ), expectSchemaManagementWorkException( StubSchemaManagementWork.Type.DROP_AND_CREATE ) ); diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/TransientPropertyIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/TransientPropertyIT.java index cfbcf70efef..6d670e0508b 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/TransientPropertyIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/model/TransientPropertyIT.java @@ -27,7 +27,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.ObjectPath; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.PropertyBinding; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.PropertyValue; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmUtils; @@ -48,16 +48,14 @@ public void withoutDerivedFrom() { assertThatThrownBy( () -> ormSetupHelper.start().setup( EntityWithoutDerivedFrom.class ) ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( EntityWithoutDerivedFrom.class.getName() ) .failure( "Unable to resolve path '.APlusB' to a persisted attribute in Hibernate ORM metadata.", "If this path points to a transient attribute, use @IndexingDependency(derivedFrom = ...)" + " to specify which persisted attributes it is derived from.", "See the reference documentation for more information" - ) - .build() - ); + ) ); } @Test diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java index ebff0d4d4f2..b3d83acfb98 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.mapper.orm.schema.management.SearchSchemaManager; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.SchemaManagementWorkBehavior; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -105,10 +105,9 @@ public void exception_single() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } @Test @@ -124,12 +123,11 @@ public void exception_multiple() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My exception 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception 2" ) - .build() ); + .failure( "My exception 2" ) ); } protected abstract void execute(SearchSchemaManager manager); diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java index 50297e29c41..06cc9f3a8e6 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java @@ -13,7 +13,7 @@ import org.hibernate.search.mapper.orm.Search; import org.hibernate.search.mapper.orm.schema.management.SearchSchemaManager; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.junit.Test; @@ -34,10 +34,9 @@ public void failure_single() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure" ) - .build() ); + .failure( "My failure" ) ); } @Test @@ -57,12 +56,11 @@ public void failure_multiple() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure 2" ) - .build() ); + .failure( "My failure 2" ) ); } @Test @@ -80,11 +78,10 @@ public void failure_exception() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure" ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } } diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyIT.java index af6f36a1539..903059903ae 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyIT.java @@ -17,7 +17,7 @@ import org.hibernate.search.mapper.orm.schema.management.SchemaManagementStrategyName; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.SchemaManagementWorkBehavior; import org.hibernate.search.util.impl.integrationtest.mapper.orm.OrmSetupHelper; @@ -75,10 +75,9 @@ public void exception_single() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } @Test @@ -90,12 +89,11 @@ public void exception_multiple() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My exception 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception 2" ) - .build() ); + .failure( "My exception 2" ) ); } protected abstract SchemaManagementStrategyName getStrategyName(); diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java index 86a0700ed2d..62b55c24240 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java @@ -11,7 +11,7 @@ import java.util.concurrent.CompletableFuture; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.junit.Test; @@ -27,10 +27,9 @@ public void failure_single() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure" ) - .build() ); + .failure( "My failure" ) ); } @Test @@ -46,12 +45,11 @@ public void failure_multiple() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure 2" ) - .build() ); + .failure( "My failure 2" ) ); } @Test @@ -65,11 +63,10 @@ public void failure_exception() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure" ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/automaticindexing/DefaultReindexOnUpdateIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/automaticindexing/DefaultReindexOnUpdateIT.java index aef03aee9f9..4b8f131a345 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/automaticindexing/DefaultReindexOnUpdateIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/automaticindexing/DefaultReindexOnUpdateIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.junit.Before; @@ -160,7 +160,7 @@ public void default_associationInverseSideUnknown() { .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( ParentEntity.class.getName() ) .pathContext( ".child.value" ) .failure( @@ -169,9 +169,7 @@ public void default_associationInverseSideUnknown() { "Hibernate Search needs this information in order to reindex '" + ParentEntity.class.getName() + "' when '" + ChildEntity.class.getName() + "' is modified." - ) - .build() - ); + ) ); } /** * If ReindexOnUpdate.NO is the default, diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/alternative/AlternativeBinderIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/alternative/AlternativeBinderIT.java index cc079c0d3b3..1351b6d3561 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/alternative/AlternativeBinderIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/alternative/AlternativeBinderIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.DocumentId; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -117,14 +117,12 @@ class IndexedEntity { .expectCustomBeans() .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "No property annotated with @Alternative(id = null).", "There must be exactly one such property in order to map property 'text' to multi-alternative fields." ) .failure( "No property annotated with @Alternative(id = null).", - "There must be exactly one such property in order to map property 'title' to multi-alternative fields." ) - .build() - ); + "There must be exactly one such property in order to map property 'title' to multi-alternative fields." ) ); } @Test @@ -147,13 +145,11 @@ class IndexedEntity { .expectCustomBeans() .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Multiple properties annotated with @Alternative(id = null).", "There must be exactly one such property in order to map property 'text' to multi-alternative fields." ) .failure( "Multiple properties annotated with @Alternative(id = null).", - "There must be exactly one such property in order to map property 'title' to multi-alternative fields." ) - .build() - ); + "There must be exactly one such property in order to map property 'title' to multi-alternative fields." ) ); } } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomPropertyMappingAnnotationBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomPropertyMappingAnnotationBaseIT.java index c9db1cf2492..9dbe0f6e3a0 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomPropertyMappingAnnotationBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomPropertyMappingAnnotationBaseIT.java @@ -34,7 +34,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.PropertyMappingStep; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.reporting.EventContext; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -104,12 +104,10 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .annotationTypeContext( AnnotationWithEmptyProcessorRef.class ) .failure( "Empty annotation processor reference in meta-annotation '" - + PropertyMapping.class.getName() + "'" ) - .build() - ); + + PropertyMapping.class.getName() + "'" ) ); } @Retention(RetentionPolicy.RUNTIME) @@ -128,13 +126,11 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .annotationTypeContext( AnnotationWithProcessorWithDifferentAnnotationType.class ) .failure( "Invalid annotation processor: '" + DifferentAnnotationType.Processor.TO_STRING + "'", "This processor expects annotations of a different type: '" - + DifferentAnnotationType.class.getName() + "'" ) - .build() - ); + + DifferentAnnotationType.class.getName() + "'" ) ); } @Retention(RetentionPolicy.RUNTIME) diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomTypeMappingAnnotationBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomTypeMappingAnnotationBaseIT.java index 8d458885a43..cc782fc7e57 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomTypeMappingAnnotationBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/annotation/processing/CustomTypeMappingAnnotationBaseIT.java @@ -29,7 +29,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.reporting.EventContext; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -99,12 +99,10 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .annotationTypeContext( AnnotationWithEmptyProcessorRef.class ) .failure( "Empty annotation processor reference in meta-annotation '" - + TypeMapping.class.getName() + "'" ) - .build() - ); + + TypeMapping.class.getName() + "'" ) ); } @Retention(RetentionPolicy.RUNTIME) @@ -123,13 +121,11 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .annotationTypeContext( AnnotationWithProcessorWithDifferentAnnotationType.class ) .failure( "Invalid annotation processor: '" + DifferentAnnotationType.Processor.TO_STRING + "'", "This processor expects annotations of a different type: '" - + DifferentAnnotationType.class.getName() + "'" ) - .build() - ); + + DifferentAnnotationType.class.getName() + "'" ) ); } @Retention(RetentionPolicy.RUNTIME) diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DependencyIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DependencyIT.java index 698b9f7bdef..7ca3d98cfec 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DependencyIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DependencyIT.java @@ -23,7 +23,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.ObjectPath; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.PropertyValue; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -54,14 +54,13 @@ public IndexedEntity getOther() { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".other" ) .annotationContextAnyParameters( AssociationInverseSide.class ) .failure( "@AssociationInverseSide.inversePath is empty" ) - .build() ); } @@ -601,14 +600,13 @@ public String getDerived() { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".derived" ) .annotationContextAnyParameters( IndexingDependency.class ) .failure( "@IndexingDependency.derivedFrom contains an empty path" ) - .build() ); } @@ -628,13 +626,11 @@ public String getDerived() { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".derived" ) .failure( "No readable property named 'invalidPath' on type '" - + IndexedEntity.class.getName() + "'" ) - .build() - ); + + IndexedEntity.class.getName() + "'" ) ); } @Test @@ -684,7 +680,7 @@ public String getDerivedC() { .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( DerivedFromCycle.A.class.getName() ) .pathContext( ".derivedA" ) .failure( "Unable to resolve dependencies of a derived property:" @@ -692,9 +688,7 @@ public String getDerivedC() { + " on type '" + DerivedFromCycle.A.class.getName() + "'", "A derived property cannot be marked as derived from itself", "you should consider disabling automatic reindexing" - ) - .build() - ); + ) ); } @Test @@ -768,7 +762,7 @@ class B { ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( CannotInvertAssociation.A.class.getName() ) .pathContext( ".embedded.b.text" ) .failure( @@ -784,9 +778,7 @@ class B { + CannotInvertAssociation.A.class.getName() + "' when '" + CannotInvertAssociation.B.class.getName() + "' is modified", "@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)" - ) - .build() - ); + ) ); } @Test diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdBaseIT.java index 1ca1f407337..61d1cba48b3 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdBaseIT.java @@ -31,7 +31,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.StubSearchWorkBehavior; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.StubBackendUtils; @@ -67,13 +67,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "No default identifier bridge implementation for type '" + Object.class.getName() + "'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } @Test @@ -88,13 +86,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "No default identifier bridge implementation for type 'java.lang.Enum (java.lang.Enum)'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } @Test @@ -108,12 +104,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "No default identifier bridge implementation for type 'java.lang.Enum'", "Use a custom bridge" ) - .build() ); } @@ -128,14 +123,12 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "No default identifier bridge implementation for type 'java.lang.Enum<" + EnumForEnumSuperClassTest.class.getName() + ">'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } enum EnumForEnumSuperClassTest { @@ -154,14 +147,12 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Invalid bridge for input type '" + Integer.class.getName() + "': '" + MyStringBridge.TOSTRING + "'", - "This bridge expects an input of type '" + String.class.getName() + "'." ) - .build() - ); + "This bridge expects an input of type '" + String.class.getName() + "'." ) ); } public static class MyStringBridge implements IdentifierBridge { @@ -191,13 +182,12 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Invalid bridge for input type '" + Object.class.getName() + "': '" + MyNumberBridge.TOSTRING + "'", - "This bridge expects an input of type '" + Number.class.getName() + "'" ) - .build() ); + "This bridge expects an input of type '" + Number.class.getName() + "'" ) ); } @Test @@ -210,13 +200,12 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Invalid bridge for input type '" + Integer.class.getName() + "': '" + MyNumberBridge.TOSTRING + "'", - "This bridge expects an input of type '" + Number.class.getName() + "'." ) - .build() ); + "This bridge expects an input of type '" + Number.class.getName() + "'." ) ); } public static class MyNumberBridge implements IdentifierBridge { @@ -250,7 +239,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .annotationContextAnyParameters( DocumentId.class ) @@ -258,7 +247,6 @@ class IndexedEntity { "Ambiguous identifier bridge reference: both 'identifierBridge' and 'identifierBinder' are set." + " Only one can be set." ) - .build() ); } @@ -272,7 +260,7 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Unable to infer expected identifier type for identifier bridge '" @@ -283,7 +271,6 @@ class IndexedEntity { + " when this type parameter is set to a raw class." + " Use an IdentifierBinder to set the expected identifier type explicitly," + " or set the type parameter I to a definite, raw type." ) - .build() ); } @@ -317,7 +304,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Unable to define a document identifier for indexed type '" @@ -325,9 +312,7 @@ class IndexedEntity { "The property representing the entity identifier is unknown", "Define the document identifier explicitly by annotating" + " a property whose values are unique with @DocumentId" - ) - .build() - ); + ) ); } @Test @@ -394,11 +379,10 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Param with name 'fixedPrefix' has not been defined for the binder." ) - .build() ); } @@ -425,13 +409,12 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .annotationContextAnyParameters( DocumentId.class ) .failure( "Conflicting usage of @Param annotation for parameter name: 'fixedPrefix'. " + "Can't assign both value 'fixed-prefix-' and 'fixed-prefix-'" ) - .build() ); } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdDefaultBridgeAdditionIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdDefaultBridgeAdditionIT.java index d99b6b4a642..45fbeb567a5 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdDefaultBridgeAdditionIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/DocumentIdDefaultBridgeAdditionIT.java @@ -22,7 +22,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.DocumentId; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -127,11 +127,10 @@ private void doTestFailure(Consumer bridgesConf .withConfiguration( builder -> bridgesConfigurer.accept( builder.bridges() ) ) .setup( indexedType ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( indexedType.getName() ) .pathContext( ".id" ) - .failure( "No default identifier bridge implementation for type", "Use a custom bridge" ) - .build() ); + .failure( "No default identifier bridge implementation for type", "Use a custom bridge" ) ); } @Indexed(index = INDEX_NAME) diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldBaseIT.java index d14c32be04f..55a9029e071 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldBaseIT.java @@ -22,7 +22,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.mapper.pojo.bridge.mapping.annotation.ValueBridgeRef; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -63,14 +63,12 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( "No default value bridge implementation for type '" + Object.class.getName() + "'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } @Test @@ -87,13 +85,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( "No default value bridge implementation for type 'java.lang.Enum (java.lang.Enum)'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } @Test @@ -109,12 +105,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( "No default value bridge implementation for type 'java.lang.Enum'", "Use a custom bridge" ) - .build() ); } @@ -131,14 +126,12 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( "No default value bridge implementation for type 'java.lang.Enum<" + EnumForEnumSuperClassTest.class.getName() + ">'", - "Use a custom bridge" ) - .build() - ); + "Use a custom bridge" ) ); } enum EnumForEnumSuperClassTest { @@ -158,14 +151,12 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Invalid bridge for input type '" + Integer.class.getName() + "': '" + MyStringBridge.TOSTRING + "'", - "This bridge expects an input of type '" + String.class.getName() + "'" ) - .build() - ); + "This bridge expects an input of type '" + String.class.getName() + "'" ) ); } @Test @@ -181,14 +172,12 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".numbers" ) .failure( "Invalid bridge for input type '" + Integer.class.getName() + "': '" + MyStringBridge.TOSTRING + "'", - "This bridge expects an input of type '" + String.class.getName() + "'" ) - .build() - ); + "This bridge expects an input of type '" + String.class.getName() + "'" ) ); } public static class MyStringBridge implements ValueBridge { @@ -219,7 +208,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .annotationContextAnyParameters( GenericField.class ) @@ -227,7 +216,6 @@ class IndexedEntity { "Ambiguous value bridge reference: both 'valueBridge' and 'valueBinder' are set." + " Only one can be set." ) - .build() ); } @@ -242,7 +230,7 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Unable to infer expected value type for value bridge '" @@ -253,7 +241,6 @@ class IndexedEntity { + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the expected value type explicitly," + " or set the type parameter V to a definite, raw type." ) - .build() ); } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldContainerExtractorBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldContainerExtractorBaseIT.java index 48c08125a30..39e2f425839 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldContainerExtractorBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldContainerExtractorBaseIT.java @@ -26,7 +26,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.GenericField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -124,7 +124,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( @@ -132,9 +132,7 @@ class IndexedEntity { + " Check that this name matches a container extractor," + " either a builtin one whose name is a constant in '" + BuiltinContainerExtractors.class.getName() + "'" + " or a custom one that was properly registered." - ) - .build() - ); + ) ); } @Test @@ -153,16 +151,14 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Unable to interpret the type arguments to the ContainerExtractor interface in " + " implementation '" + RawContainerExtractor.class.getName() + "'. Only the following implementations of ContainerExtractor are valid" - ) - .build() - ); + ) ); } @SuppressWarnings("rawtypes") @@ -188,15 +184,13 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".numbers" ) .failure( "Invalid container extractor for type '" + List.class.getName() + "<" + Integer.class.getName() + ">': '" + BuiltinContainerExtractors.MAP_VALUE - + "' (implementation class: '" + MapValueExtractor.class.getName() + "')" ) - .build() - ); + + "' (implementation class: '" + MapValueExtractor.class.getName() + "')" ) ); } @Test @@ -215,7 +209,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".numbers" ) .annotationContextAnyParameters( GenericField.class ) @@ -225,7 +219,6 @@ class IndexedEntity { "Either leave 'extract' to its default value to define extractors explicitly", "or leave the 'extractor' list to its default, empty value to disable extraction" ) - .build() ); } } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldDefaultBridgeAdditionIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldDefaultBridgeAdditionIT.java index bf8c14dd45b..24e3c278267 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldDefaultBridgeAdditionIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FieldDefaultBridgeAdditionIT.java @@ -23,7 +23,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.GenericField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -133,12 +133,11 @@ private void doTestFailure(Consumer bridgesConf .withConfiguration( builder -> bridgesConfigurer.accept( builder.bridges() ) ) .setup( indexedType ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( indexedType.getName() ) .pathContext( ".property" ) .failure( "No default value bridge implementation for type", - "Use a custom bridge" ) - .build() ); + "Use a custom bridge" ) ); } @Indexed(index = INDEX_NAME) diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FullTextFieldIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FullTextFieldIT.java index 137e1600e9c..2db170993fe 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FullTextFieldIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/FullTextFieldIT.java @@ -33,7 +33,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.ProgrammaticMappingConfigurationContext; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -130,13 +130,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( FullTextField.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -419,7 +417,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( @@ -430,9 +428,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -447,7 +443,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -458,9 +454,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -475,7 +469,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -486,9 +480,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -504,7 +496,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".property" ) .failure( "Unable to infer index field type for value bridge '" @@ -514,8 +506,7 @@ class IndexedEntity { + " The index field type can only be inferred automatically" + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the index field type explicitly," - + " or set the type parameter F to a definite, raw type." ) - .build() ); + + " or set the type parameter F to a definite, raw type." ) ); } private void doTestValidMapping(Class entityType, diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/GenericFieldIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/GenericFieldIT.java index 46a933b6dc6..5579d8ab846 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/GenericFieldIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/GenericFieldIT.java @@ -33,7 +33,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.StubBackendExtension; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -99,13 +99,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( GenericField.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -248,11 +246,10 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .failure( "Param with name 'stringBase' has not been defined for the binder." ) - .build() ); } @@ -276,13 +273,12 @@ class IndexedEntity { () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( GenericField.class ) .failure( "Conflicting usage of @Param annotation for parameter name: 'stringBase'. " + "Can't assign both value '4' and '4'" ) - .build() ); } @@ -340,7 +336,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -351,9 +347,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StandardIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -369,7 +363,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".property" ) .failure( "Unable to infer index field type for value bridge '" @@ -379,8 +373,7 @@ class IndexedEntity { + " The index field type can only be inferred automatically" + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the index field type explicitly," - + " or set the type parameter F to a definite, raw type." ) - .build() ); + + " or set the type parameter F to a definite, raw type." ) ); } public static class ValidTypeBridge implements ValueBridge { diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedBaseIT.java index 0faceaf3de7..cf881561ff2 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedBaseIT.java @@ -26,7 +26,7 @@ import org.hibernate.search.mapper.pojo.route.DocumentRoutes; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; import org.hibernate.search.util.impl.test.rule.StaticCounters; @@ -447,16 +447,14 @@ class IndexedWithoutEntityMetadata { .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedWithoutEntityMetadata.class.getName() ) .failure( "Unable to index type '" + IndexedWithoutEntityMetadata.class.getName() + "': this type is not an entity type." + " If you only expect subtypes to be instantiated, make this type abstract." + " If you expect this exact type to be instantiated and want it to be indexed, make it an entity type." + " Otherwise, ensure this type and its subtypes are never indexed by removing the @Indexed annotation" - + " or by annotating the type with @Indexed(enabled = false)." ) - .build() - ); + + " or by annotating the type with @Indexed(enabled = false)." ) ); } @Test @@ -486,10 +484,9 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) - .failure( "Simulated failure" ) - .build() ); + .failure( "Simulated failure" ) ); } @Test diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedEmbeddedBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedEmbeddedBaseIT.java index 8c7cfaca94b..c36e38318b5 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedEmbeddedBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/IndexedEmbeddedBaseIT.java @@ -50,7 +50,7 @@ import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; import org.hibernate.search.util.common.SearchException; import org.hibernate.search.util.common.impl.CollectionHelper; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.document.StubDocumentNode; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -199,13 +199,11 @@ public IndexedEntity(int id, String value) { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".level1" ) .annotationContextAnyParameters( IndexedEmbedded.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -231,14 +229,13 @@ public IndexedEntity(int id, String value) { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".level1" ) .annotationContextAnyParameters( IndexedEmbedded.class ) .failure( "Ambiguous @IndexedEmbedded name: both 'name' and 'prefix' are set.", "Only one can be set.", "Name is 'somename', prefix is 'someprefix.'" ) - .build() ); } @@ -608,7 +605,7 @@ public IndexedEntity(int id, String ignoredProperty, String includedProperty) { .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "An @IndexedEmbedded defines includePaths filters that do not match anything", @@ -617,9 +614,7 @@ public IndexedEntity(int id, String ignoredProperty, String includedProperty) { "Encountered field paths:", CollectionHelper.asLinkedHashSet( "ignoredProperty", "includedProperty" ).toString(), "Check the filters for typos, or remove them if they are not useful" - ) - .build() - ); + ) ); } /** @@ -1510,13 +1505,11 @@ class IndexedEntity { .withAnnotatedEntityTypes( IndexedEntity.class ) .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".invalid" ) .failure( "Unable to index-embed type '" + String.class.getName() + "': no index mapping" - + " (@GenericField, @FullTextField, custom bridges, ...) is defined for that type." ) - .build() - ); + + " (@GenericField, @FullTextField, custom bridges, ...) is defined for that type." ) ); } @Test @@ -1548,13 +1541,11 @@ class IndexedEntity { .withAnnotatedEntityTypes( IndexedEntity.class ) .setup() ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".invalid" ) .failure( "Unable to index-embed type '" + EmptyNested.class.getName() + "': no index mapping" - + " (@GenericField, @FullTextField, custom bridges, ...) is defined for that type." ) - .build() - ); + + " (@GenericField, @FullTextField, custom bridges, ...) is defined for that type." ) ); } private void doTestEmbeddedRuntime(SearchMapping mapping, diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/KeywordFieldIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/KeywordFieldIT.java index 24981fb3c08..738abe4dbb1 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/KeywordFieldIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/KeywordFieldIT.java @@ -31,7 +31,7 @@ import org.hibernate.search.mapper.pojo.bridge.mapping.annotation.ValueBridgeRef; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -108,13 +108,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( KeywordField.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -342,7 +340,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".notString" ) .failure( @@ -353,9 +351,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -371,7 +367,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -382,9 +378,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -400,7 +394,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -411,9 +405,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type", "encountered type DSL step '", "expected interface '" + StringIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -429,7 +421,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".property" ) .failure( "Unable to infer index field type for value bridge '" @@ -439,8 +431,7 @@ class IndexedEntity { + " The index field type can only be inferred automatically" + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the index field type explicitly," - + " or set the type parameter F to a definite, raw type." ) - .build() ); + + " or set the type parameter F to a definite, raw type." ) ); } private void doTestValidMapping(Class entityType, diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/NonStandardFieldIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/NonStandardFieldIT.java index 5d298c1142b..d519529deea 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/NonStandardFieldIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/NonStandardFieldIT.java @@ -21,7 +21,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.NonStandardField; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.StubBackendExtension; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -98,13 +98,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( NonStandardField.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -137,7 +135,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".myProperty" ) .failure( @@ -146,9 +144,7 @@ class IndexedEntity { "Switch to a standard field annotation such as @GenericField", "encountered type DSL step '", "does extend the interface '" + StandardIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -163,7 +159,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -172,9 +168,7 @@ class IndexedEntity { "Switch to a standard field annotation such as @GenericField", "encountered type DSL step '", "does extend the interface '" + StandardIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -190,7 +184,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".property" ) .failure( "Unable to infer index field type for value bridge '" @@ -200,8 +194,7 @@ class IndexedEntity { + " The index field type can only be inferred automatically" + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the index field type explicitly," - + " or set the type parameter F to a definite, raw type." ) - .build() ); + + " or set the type parameter F to a definite, raw type." ) ); } public static class ValidTypeBridge implements ValueBridge { diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBindingBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBindingBaseIT.java index 9383d00b81f..e848cf83b2c 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBindingBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBindingBaseIT.java @@ -28,7 +28,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.PropertyBinding; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -100,12 +100,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".text" ) .annotationContextAnyParameters( PropertyBinding.class ) .failure( "Empty binder reference." ) - .build() ); } @@ -142,11 +141,10 @@ public void customBridge_withParams_paramNotDefined() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedNoParamEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedNoParamEntity.class.getName() ) .pathContext( ".value" ) .failure( "Param with name 'stringBase' has not been defined for the binder." ) - .build() ); } @@ -156,13 +154,12 @@ public void customBridge_withParams_paramDefinedTwice() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedSameParamTwiceEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedSameParamTwiceEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( PropertyBinding.class ) .failure( "Conflicting usage of @Param annotation for parameter name: 'stringBase'. " + "Can't assign both value '7' and '7'" ) - .build() ); } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBridgeBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBridgeBaseIT.java index 550eaee678c..d3c38bea5b9 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBridgeBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/PropertyBridgeBaseIT.java @@ -40,7 +40,7 @@ import org.hibernate.search.mapper.pojo.model.path.PojoModelPath; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -304,13 +304,11 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".contained" ) .failure( "No readable property named 'doesNotExist' on type '" - + Contained.class.getName() + "'" ) - .build() - ); + + Contained.class.getName() + "'" ) ); } @Test @@ -342,14 +340,12 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".contained" ) .failure( "Invalid container extractor for type '" + Contained.class.getName() + "': '" + BuiltinContainerExtractors.COLLECTION - + "' (implementation class: '" + CollectionElementExtractor.class.getName() + "')" ) - .build() - ); + + "' (implementation class: '" + CollectionElementExtractor.class.getName() + "')" ) ); } /** @@ -478,13 +474,11 @@ public void explicitReindexing_error_use_invalidProperty() { ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".child" ) .failure( "No readable property named 'doesNotExist' on type '" - + PropertyBridgeExplicitIndexingClasses.ContainedLevel2Entity.class.getName() + "'" ) - .build() - ); + + PropertyBridgeExplicitIndexingClasses.ContainedLevel2Entity.class.getName() + "'" ) ); } @Test @@ -510,13 +504,11 @@ public void explicitReindexing_error_fromOtherEntity_invalidProperty() { ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".child" ) .failure( "No readable property named 'doesNotExist' on type '" - + PropertyBridgeExplicitIndexingClasses.ContainedLevel2Entity.class.getName() + "'" ) - .build() - ); + + PropertyBridgeExplicitIndexingClasses.ContainedLevel2Entity.class.getName() + "'" ) ); } @Test @@ -543,15 +535,13 @@ public void explicitReindexing_error_fromOtherEntity_invalidContainerExtractorPa ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".child" ) .failure( "Invalid container extractor for type '" + PropertyBridgeExplicitIndexingClasses.ContainedLevel1Entity.class.getName() + "': '" + BuiltinContainerExtractors.COLLECTION - + "' (implementation class: '" + CollectionElementExtractor.class.getName() + "')" ) - .build() - ); + + "' (implementation class: '" + CollectionElementExtractor.class.getName() + "')" ) ); } @Test @@ -578,16 +568,14 @@ public void explicitReindexing_error_fromOtherEntity_bridgedElementNotEntityType ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".notEntity" ) .failure( "Invalid use of 'fromOtherEntity': this method can only be used when the bridged element has an entity type," + " but the bridged element has type '" + PropertyBridgeExplicitIndexingClasses.NotEntity.class.getName() + "'," + " which is not an entity type." - ) - .build() - ); + ) ); } @Test @@ -614,16 +602,14 @@ public void explicitReindexing_error_fromOtherEntity_otherEntityTypeNotEntityTyp ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".child" ) .failure( "Invalid type passed to 'fromOtherEntity': the type must be an entity type", "Type '" + PropertyBridgeExplicitIndexingClasses.NotEntity.class.getName() + "' is not an entity type." - ) - .build() - ); + ) ); } @Test @@ -650,15 +636,13 @@ public void explicitReindexing_error_fromOtherEntity_inverseAssociationPathTarge ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( PropertyBridgeExplicitIndexingClasses.IndexedEntity.class.getName() ) .pathContext( ".child" ) .failure( "The inverse association targets type '" + PropertyBridgeExplicitIndexingClasses.DifferentEntity.class.getName() + "'," + " but a supertype or subtype of '" + PropertyBridgeExplicitIndexingClasses.ContainedLevel1Entity.class.getName() + "' was expected." - ) - .build() - ); + ) ); } @Test @@ -686,7 +670,7 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".contained" ) .failure( @@ -694,9 +678,7 @@ class IndexedEntity { "the binder did not declare any dependency to the entity model during binding." + " Declare dependencies using context.dependencies().use(...) or," + " if the bridge really does not depend on the entity model, context.dependencies().useRootOnly()" - ) - .build() - ); + ) ); } @Test @@ -727,16 +709,14 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".contained" ) .failure( "Incorrect binder implementation", "the binder called context.dependencies().useRootOnly() during binding," + " but also declared extra dependencies to the entity model." - ) - .build() - ); + ) ); } @Test @@ -1014,13 +994,11 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".stringProperty" ) .failure( "'.stringProperty' cannot be assigned to '" - + Integer.class.getName() + "'" ) - .build() - ); + + Integer.class.getName() + "'" ) ); } private static class UnusedPropertyBridge implements PropertyBridge { @@ -1041,14 +1019,12 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".id" ) .failure( "Invalid bridge for input type '" + Integer.class.getName() + "': '" + MyStringBridge.TOSTRING + "'", - "This bridge expects an input of type '" + String.class.getName() + "'" ) - .build() - ); + "This bridge expects an input of type '" + String.class.getName() + "'" ) ); } public static class MyStringBridge implements PropertyBridge { diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/RoutingBridgeBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/RoutingBridgeBaseIT.java index fcd709da211..873b1ef546d 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/RoutingBridgeBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/RoutingBridgeBaseIT.java @@ -29,7 +29,7 @@ import org.hibernate.search.mapper.pojo.route.DocumentRoutes; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.document.StubDocumentNode; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -71,13 +71,11 @@ class IndexedEntity { } ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Invalid routing bridge for entity type '" + IndexedEntity.class.getName() + "': '" + UnusedRoutingBridge.TOSTRING + "'", - "This bridge expects an entity type extending '" + Integer.class.getName() ) - .build() - ); + "This bridge expects an entity type extending '" + Integer.class.getName() ) ); } @Test @@ -373,12 +371,10 @@ class IndexedEntity { } ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "'.stringProperty' cannot be assigned to '" - + Integer.class.getName() + "'" ) - .build() - ); + + Integer.class.getName() + "'" ) ); } /** @@ -484,11 +480,10 @@ class IndexedEntity { } ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "No readable property named 'doesNotExist' on type '" - + IndexedEntity.class.getName() + "'" ) - .build() ); + + IndexedEntity.class.getName() + "'" ) ); } @Test @@ -510,13 +505,12 @@ class IndexedEntity { } ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Incorrect binder implementation", "the binder did not declare any dependency to the entity model during binding.", " Declare dependencies using context.dependencies().use(...) or," - + " if the bridge really does not depend on the entity model, context.dependencies().useRootOnly()" ) - .build() ); + + " if the bridge really does not depend on the entity model, context.dependencies().useRootOnly()" ) ); } @Test @@ -541,12 +535,11 @@ class IndexedEntity { } ) .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Incorrect binder implementation", "the binder called context.dependencies().useRootOnly() during binding," - + " but also declared extra dependencies to the entity model." ) - .build() ); + + " but also declared extra dependencies to the entity model." ) ); } @Test @@ -668,10 +661,9 @@ public void params_paramNotDefined() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedRoutedNoParamEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedRoutedNoParamEntity.class.getName() ) .failure( "Param with name 'stringModulus' has not been defined for the binder." ) - .build() ); } @@ -681,12 +673,11 @@ public void params_paramDefinedTwice() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedRoutedSameParamTwiceEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedRoutedSameParamTwiceEntity.class.getName() ) .annotationContextAnyParameters( Indexed.class ) .failure( "Conflicting usage of @Param annotation for parameter name: 'stringModulus'. " + "Can't assign both value '7' and '7'" ) - .build() ); } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/ScaledNumberFieldIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/ScaledNumberFieldIT.java index 2b079d32a9c..8f521d4012c 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/ScaledNumberFieldIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/ScaledNumberFieldIT.java @@ -33,7 +33,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.ScaledNumberField; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -98,13 +98,11 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".value" ) .annotationContextAnyParameters( ScaledNumberField.class ) - .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) - .build() - ); + .failure( "Invalid index field name 'invalid.withdot': field names cannot contain a dot ('.')" ) ); } @Test @@ -169,7 +167,7 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".notScalable" ) .failure( @@ -181,9 +179,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type.", "encountered type DSL step '", "expected interface '" + ScaledNumberIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -377,7 +373,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -389,9 +385,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type.", "encountered type DSL step '", "expected interface '" + ScaledNumberIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -406,7 +400,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".wrap" ) .failure( @@ -418,9 +412,7 @@ class IndexedEntity { "If you are already using a custom ValueBridge or ValueBinder, check its field type.", "encountered type DSL step '", "expected interface '" + ScaledNumberIndexFieldTypeOptionsStep.class.getName() + "'" - ) - .build() - ); + ) ); } @Test @@ -436,7 +428,7 @@ class IndexedEntity { assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".property" ) .failure( "Unable to infer index field type for value bridge '" @@ -446,8 +438,7 @@ class IndexedEntity { + " The index field type can only be inferred automatically" + " when this type parameter is set to a raw class." + " Use a ValueBinder to set the index field type explicitly," - + " or set the type parameter F to a definite, raw type." ) - .build() ); + + " or set the type parameter F to a definite, raw type." ) ); } public static class ValidTypeBridge implements ValueBridge { diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBindingBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBindingBaseIT.java index d132a17d42c..d1b216664ec 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBindingBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBindingBaseIT.java @@ -28,7 +28,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.TypeBinding; import org.hibernate.search.mapper.pojo.mapping.definition.programmatic.TypeMappingStep; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -101,11 +101,10 @@ class IndexedEntity { () -> setupHelper.start().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .annotationContextAnyParameters( TypeBinding.class ) .failure( "Empty binder reference." ) - .build() ); } @@ -142,10 +141,9 @@ public void customBridge_withParams_paramNotDefined() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedNoParamEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedNoParamEntity.class.getName() ) .failure( "Param with name 'stringBase' has not been defined for the binder." ) - .build() ); } @@ -155,12 +153,11 @@ public void customBridge_withParams_paramDefinedTwice() { () -> setupHelper.start().expectCustomBeans().setup( AnnotatedSameParamTwiceEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( AnnotatedSameParamTwiceEntity.class.getName() ) .annotationContextAnyParameters( TypeBinding.class ) .failure( "Conflicting usage of @Param annotation for parameter name: 'stringBase'. " + "Can't assign both value '7' and '7'" ) - .build() ); } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBridgeBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBridgeBaseIT.java index 96bfa0679a5..4f5e84278d5 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBridgeBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/mapping/definition/TypeBridgeBaseIT.java @@ -32,7 +32,7 @@ import org.hibernate.search.mapper.pojo.model.PojoElementAccessor; import org.hibernate.search.util.common.AssertionFailure; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.test.annotation.TestForIssue; @@ -208,12 +208,10 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "No readable property named 'doesNotExist' on type '" - + IndexedEntity.class.getName() + "'" ) - .build() - ); + + IndexedEntity.class.getName() + "'" ) ); } /** @@ -327,12 +325,10 @@ class ContainedEntity { .setup( IndexedEntity.class, ContainedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "No readable property named 'doesNotExist' on type '" - + ContainedEntity.class.getName() + "'" ) - .build() - ); + + ContainedEntity.class.getName() + "'" ) ); } @Test @@ -363,12 +359,10 @@ class ContainedEntity { .setup( IndexedEntity.class, ContainedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "No readable property named 'doesNotExist' on type '" - + ContainedEntity.class.getName() + "'" ) - .build() - ); + + ContainedEntity.class.getName() + "'" ) ); } @Test @@ -404,16 +398,14 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .pathContext( ".notEntity" ) .failure( "Invalid use of 'fromOtherEntity': this method can only be used when the bridged element has an entity type," + " but the bridged element has type '" + NotEntity.class.getName() + "'," + " which is not an entity type." - ) - .build() - ); + ) ); } @Test @@ -443,14 +435,12 @@ class NotEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Invalid type passed to 'fromOtherEntity': the type must be an entity type", "Type '" + NotEntity.class.getName() + "' is not an entity type." - ) - .build() - ); + ) ); } @Test @@ -484,14 +474,12 @@ class ContainedEntity { .setup( IndexedEntity.class, ContainedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "The inverse association targets type '" + DifferentEntity.class.getName() + "'," + " but a supertype or subtype of '" + IndexedEntity.class.getName() + "' was expected." - ) - .build() - ); + ) ); } @Test @@ -515,16 +503,14 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Incorrect binder implementation", "the binder did not declare any dependency to the entity model during binding." + " Declare dependencies using context.dependencies().use(...) or," + " if the bridge really does not depend on the entity model, context.dependencies().useRootOnly()" - ) - .build() - ); + ) ); } @Test @@ -551,15 +537,13 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Incorrect binder implementation", "the binder called context.dependencies().useRootOnly() during binding," + " but also declared extra dependencies to the entity model." - ) - .build() - ); + ) ); } @Test @@ -866,12 +850,10 @@ class IndexedEntity { .setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "'.stringProperty' cannot be assigned to '" - + Integer.class.getName() + "'" ) - .build() - ); + + Integer.class.getName() + "'" ) ); } private static class UnusedTypeBridge implements TypeBridge { @@ -892,13 +874,11 @@ class IndexedEntity { } assertThatThrownBy( () -> setupHelper.start().expectCustomBeans().setup( IndexedEntity.class ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity.class.getName() ) .failure( "Invalid bridge for input type '" + IndexedEntity.class.getName() + "': '" + MyTargetTypeBridge.TOSTRING + "'", - "This bridge expects an input of type '" + TargetType.class.getName() + "'" ) - .build() - ); + "This bridge expects an input of type '" + TargetType.class.getName() + "'" ) ); } public static class MyTargetTypeBridge implements TypeBridge { diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/AbstractMassIndexingFailureIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/AbstractMassIndexingFailureIT.java index 8d878552868..570642a56b1 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/AbstractMassIndexingFailureIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/AbstractMassIndexingFailureIT.java @@ -40,7 +40,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.mapper.pojo.massindexing.MassIndexingFailureHandler; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.ThreadSpy; import org.hibernate.search.util.impl.integrationtest.common.stub.backend.index.StubIndexScaleWork; @@ -278,10 +278,9 @@ public void dropAndCreateSchema_exception() { .dropAndCreateSchemaOnStart( true ), ThreadExpectation.NOT_CREATED, throwable -> assertThat( throwable ).isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( Book.class.getName() ) - .failure( exceptionMessage ) - .build() ), + .failure( exceptionMessage ) ), expectSchemaManagementWorkException( StubSchemaManagementWork.Type.DROP_AND_CREATE ) ); diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java index 3d1de0d3b23..74598f2adf7 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerSimpleOperationIT.java @@ -18,7 +18,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.SchemaManagementWorkBehavior; import org.junit.Before; @@ -109,10 +109,9 @@ public void exception_single() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } } @@ -130,12 +129,11 @@ public void exception_multiple() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My exception 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception 2" ) - .build() ); + .failure( "My exception 2" ) ); } } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java index 43b0fa1eb1e..4fc829b3c13 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/manager/AbstractSearchSchemaManagerValidatingSimpleOperationIT.java @@ -13,7 +13,7 @@ import org.hibernate.search.mapper.javabean.session.SearchSession; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.junit.Test; @@ -35,10 +35,9 @@ public void failure_single() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure" ) - .build() ); + .failure( "My failure" ) ); } } @@ -60,12 +59,11 @@ public void failure_multiple() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure 2" ) - .build() ); + .failure( "My failure 2" ) ); } } @@ -85,11 +83,10 @@ public void failure_exception() { assertThatThrownBy( () -> execute( manager ) ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure" ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } } diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyIT.java index f29fdd0c3ff..53a9b5a3aa5 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyIT.java @@ -17,7 +17,7 @@ import org.hibernate.search.mapper.pojo.mapping.definition.annotation.DocumentId; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock; import org.hibernate.search.util.impl.integrationtest.common.rule.SchemaManagementWorkBehavior; @@ -74,10 +74,9 @@ public void exception_single() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } @Test @@ -89,12 +88,11 @@ public void exception_multiple() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My exception 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My exception 2" ) - .build() ); + .failure( "My exception 2" ) ); } protected abstract SchemaManagementStrategyName getStrategyName(); diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java index f7850bd1c80..3d06e0b4ad0 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/schema/management/strategy/AbstractSchemaManagementStrategyValidatingIT.java @@ -11,7 +11,7 @@ import java.util.concurrent.CompletableFuture; import org.hibernate.search.util.common.SearchException; -import org.hibernate.search.util.impl.integrationtest.common.FailureReportUtils; +import org.hibernate.search.util.impl.integrationtest.common.reporting.FailureReportUtils; import org.junit.Test; @@ -27,10 +27,9 @@ public void failure_single() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure" ) - .build() ); + .failure( "My failure" ) ); } @Test @@ -46,12 +45,11 @@ public void failure_multiple() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure 1" ) .typeContext( IndexedEntity2.class.getName() ) - .failure( "My failure 2" ) - .build() ); + .failure( "My failure 2" ) ); } @Test @@ -65,11 +63,10 @@ public void failure_exception() { assertThatThrownBy( this::setup ) .isInstanceOf( SearchException.class ) - .hasMessageMatching( FailureReportUtils.buildFailureReportPattern() + .satisfies( FailureReportUtils.hasFailureReport() .typeContext( IndexedEntity1.class.getName() ) .failure( "My failure" ) - .failure( "My exception" ) - .build() ); + .failure( "My exception" ) ); } } diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/FailureReportUtils.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/FailureReportUtils.java deleted file mode 100644 index 30895c58357..00000000000 --- a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/FailureReportUtils.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Hibernate Search, full-text search for your domain model - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or . - */ -package org.hibernate.search.util.impl.integrationtest.common; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.lang.annotation.Annotation; -import java.util.Arrays; -import java.util.function.Consumer; -import java.util.stream.Collectors; - -import org.hibernate.search.util.common.reporting.EventContext; -import org.hibernate.search.util.common.reporting.EventContextElement; -import org.hibernate.search.util.common.SearchException; - -public final class FailureReportUtils { - - private FailureReportUtils() { - } - - /** - * @param first The first part of the expected context. - * @param others The other parts of the expected context, if any. To be concatenated to the first part. - * @return A consumer representing an assertion to be passed as a parameter to - * {@link org.assertj.core.api.AbstractThrowableAssert#satisfies(Consumer)}. - */ - public static Consumer hasContext(EventContext first, EventContext... others) { - return hasContext( - EventContext.concat( first, others ).elements().toArray( new EventContextElement[] { } ) - ); - } - - /** - * @param contextElements The expect context elements, in order. - * @return A consumer representing an assertion to be passed as a parameter to - * {@link org.assertj.core.api.AbstractThrowableAssert#satisfies(Consumer)}. - */ - public static Consumer hasContext(EventContextElement... contextElements) { - return throwable -> { - assertThat( throwable ) - .isInstanceOf( SearchException.class ); - EventContext actualContext = ( (SearchException) throwable ).context(); - assertThat( actualContext ).as( "throwable.getContext()" ).isNotNull(); - assertThat( actualContext.elements() ) - .containsExactly( contextElements ); - String renderedContextElements = Arrays.stream( contextElements ).map( EventContextElement::render ) - .collect( Collectors.joining( ", " ) ); - assertThat( throwable.getMessage() ) - .endsWith( "Context: " + renderedContextElements ); - }; - } - - public static FailureReportPatternBuilder buildFailureReportPattern() { - return new FailureReportPatternBuilder(); - } - - /* - * Notes on meta-characters used here: - * - "\h" in a regex means "horizontal whitespace characters", i.e. spaces or tabs but not newline - * - "\Q" and "\E" in a regex allow to escape all the characters enclosed between them, - * which comes in handy to escape user-provided strings - * - "." does not match newline characters - * - "[\S\s]" matches any character, including newline characters - */ - public static class FailureReportPatternBuilder { - private final StringBuilder patternBuilder = new StringBuilder(); - private boolean lastPatternWasFailure = false; - - private FailureReportPatternBuilder() { - } - - public FailureReportPatternBuilder typeContext(String exactTypeName) { - return contextLiteral( "type '" + exactTypeName + "'" ); - } - - public FailureReportPatternBuilder indexContext(String exactIndexName) { - return contextLiteral( "index '" + exactIndexName + "'" ); - } - - public FailureReportPatternBuilder indexSchemaRootContext() { - return contextLiteral( "index schema root" ); - } - - public FailureReportPatternBuilder defaultBackendContext() { - return contextLiteral( "default backend" ); - } - - public FailureReportPatternBuilder backendContext(String exactBackendName) { - return contextLiteral( "backend '" + exactBackendName + "'" ); - } - - public FailureReportPatternBuilder pathContext(String pathPattern) { - return contextLiteral( "path '" + pathPattern + "'" ); - } - - public FailureReportPatternBuilder indexFieldContext(String exactPath) { - return contextLiteral( "field '" + exactPath + "'" ); - } - - public FailureReportPatternBuilder mappingAttributeContext(String exactName) { - return contextLiteral( "attribute '" + exactName + "'" ); - } - - public FailureReportPatternBuilder indexFieldTemplateContext(String exactPath) { - return contextLiteral( "field template '" + exactPath + "'" ); - } - - public FailureReportPatternBuilder fieldTemplateAttributeContext(String exactPath) { - return contextLiteral( "attribute '" + exactPath + "'" ); - } - - public FailureReportPatternBuilder analyzerContext(String exactName) { - return contextLiteral( "analyzer '" + exactName + "'" ); - } - - public FailureReportPatternBuilder normalizerContext(String exactName) { - return contextLiteral( "normalizer '" + exactName + "'" ); - } - - public FailureReportPatternBuilder charFilterContext(String exactName) { - return contextLiteral( "char filter '" + exactName + "'" ); - } - - public FailureReportPatternBuilder tokenizerContext(String exactName) { - return contextLiteral( "tokenizer '" + exactName + "'" ); - } - - public FailureReportPatternBuilder tokenFilterContext(String exactName) { - return contextLiteral( "token filter '" + exactName + "'" ); - } - - public FailureReportPatternBuilder analysisDefinitionParameterContext(String exactName) { - return contextLiteral( "parameter '" + exactName + "'" ); - } - - public FailureReportPatternBuilder aliasContext(String exactName) { - return contextLiteral( "alias '" + exactName + "'" ); - } - - public FailureReportPatternBuilder aliasAttributeContext(String exactName) { - return contextLiteral( "attribute '" + exactName + "'" ); - } - - public FailureReportPatternBuilder indexSettingsCustomAttributeContext(String exactName) { - return contextLiteral( "attribute '" + exactName + "'" ); - } - - public FailureReportPatternBuilder annotationContextAnyParameters(Class annotationType) { - return contextPattern( "annotation '@\\Q" + annotationType.getName() + "\\E\\(.*'" ); - } - - public FailureReportPatternBuilder annotationTypeContext(Class annotationType) { - return contextLiteral( "annotation type '@" + annotationType.getName() + "'" ); - } - - public FailureReportPatternBuilder contextLiteral(String contextLiteral) { - return contextPattern( "\\Q" + contextLiteral + "\\E" ); - } - - public FailureReportPatternBuilder contextPattern(String contextPattern) { - lastPatternWasFailure = false; - patternBuilder.append( "\n\\h+" ) - .append( contextPattern ) - .append( ": " ); - return this; - } - - public FailureReportPatternBuilder failure(String ... literalStringsContainedInFailureMessageInOrder) { - if ( !lastPatternWasFailure ) { - patternBuilder.append( "\n\\h+failures: " ); - } - lastPatternWasFailure = true; - patternBuilder.append( "\n\\h+-\\h" ); - for ( String contained : literalStringsContainedInFailureMessageInOrder ) { - patternBuilder.append( ".*" ) - .append( "\\Q" ).append( contained ).append( "\\E" ); - } - patternBuilder.append( ".*" ); - return this; - } - - public FailureReportPatternBuilder multilineFailure(String ... literalStringsContainedInFailureMessageInOrder) { - if ( !lastPatternWasFailure ) { - patternBuilder.append( "\n\\h+failures: " ); - } - lastPatternWasFailure = true; - patternBuilder.append( "\n\\h+-\\h" ); - for ( String contained : literalStringsContainedInFailureMessageInOrder ) { - patternBuilder.append( "[\\S\\s]*" ) - .append( "\\Q" ).append( contained ).append( "\\E" ); - } - patternBuilder.append( "[\\S\\s]*" ); - return this; - } - - public String build() { - /* - * Prepend and append "[\S\s]*" because we have to match against the entire failure report, - * so we must match any characters before and after what we're looking for. - */ - return "[\\S\\s]*" - + patternBuilder.toString() - + "[\\S\\s]*"; - } - } - -} diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportChecker.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportChecker.java new file mode 100644 index 00000000000..1b2acf5762c --- /dev/null +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportChecker.java @@ -0,0 +1,215 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.util.impl.integrationtest.common.reporting; + +import static org.assertj.core.api.Assertions.fail; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * Notes on meta-characters used here: + * - "\h" in a regex means "horizontal whitespace characters", i.e. spaces or tabs but not newline + * - "\Q" and "\E" in a regex allow to escape all the characters enclosed between them, + * which comes in handy to escape user-provided strings + * - "." does not match newline characters + * - "[\S\s]" matches any character, including newline characters + */ +public class FailureReportChecker implements Consumer { + private final List elementsToMatch = new ArrayList<>(); + private boolean lastPatternWasFailure = false; + + FailureReportChecker() { + } + + public FailureReportChecker typeContext(String exactTypeName) { + return contextLiteral( "type '" + exactTypeName + "'" ); + } + + public FailureReportChecker indexContext(String exactIndexName) { + return contextLiteral( "index '" + exactIndexName + "'" ); + } + + public FailureReportChecker indexSchemaRootContext() { + return contextLiteral( "index schema root" ); + } + + public FailureReportChecker defaultBackendContext() { + return contextLiteral( "default backend" ); + } + + public FailureReportChecker backendContext(String exactBackendName) { + return contextLiteral( "backend '" + exactBackendName + "'" ); + } + + public FailureReportChecker pathContext(String pathPattern) { + return contextLiteral( "path '" + pathPattern + "'" ); + } + + public FailureReportChecker indexFieldContext(String exactPath) { + return contextLiteral( "field '" + exactPath + "'" ); + } + + public FailureReportChecker mappingAttributeContext(String exactName) { + return contextLiteral( "attribute '" + exactName + "'" ); + } + + public FailureReportChecker indexFieldTemplateContext(String exactPath) { + return contextLiteral( "field template '" + exactPath + "'" ); + } + + public FailureReportChecker fieldTemplateAttributeContext(String exactPath) { + return contextLiteral( "attribute '" + exactPath + "'" ); + } + + public FailureReportChecker analyzerContext(String exactName) { + return contextLiteral( "analyzer '" + exactName + "'" ); + } + + public FailureReportChecker normalizerContext(String exactName) { + return contextLiteral( "normalizer '" + exactName + "'" ); + } + + public FailureReportChecker charFilterContext(String exactName) { + return contextLiteral( "char filter '" + exactName + "'" ); + } + + public FailureReportChecker tokenizerContext(String exactName) { + return contextLiteral( "tokenizer '" + exactName + "'" ); + } + + public FailureReportChecker tokenFilterContext(String exactName) { + return contextLiteral( "token filter '" + exactName + "'" ); + } + + public FailureReportChecker analysisDefinitionParameterContext(String exactName) { + return contextLiteral( "parameter '" + exactName + "'" ); + } + + public FailureReportChecker aliasContext(String exactName) { + return contextLiteral( "alias '" + exactName + "'" ); + } + + public FailureReportChecker aliasAttributeContext(String exactName) { + return contextLiteral( "attribute '" + exactName + "'" ); + } + + public FailureReportChecker indexSettingsCustomAttributeContext(String exactName) { + return contextLiteral( "attribute '" + exactName + "'" ); + } + + public FailureReportChecker annotationContextAnyParameters(Class annotationType) { + return contextPattern( "annotation '@\\Q" + annotationType.getName() + "\\E\\(.*'" ); + } + + public FailureReportChecker annotationTypeContext(Class annotationType) { + return contextLiteral( "annotation type '@" + annotationType.getName() + "'" ); + } + + public FailureReportChecker contextLiteral(String contextLiteral) { + return contextPattern( "\\Q" + contextLiteral + "\\E" ); + } + + public FailureReportChecker contextPattern(String contextPattern) { + lastPatternWasFailure = false; + elementsToMatch.add( new ElementToMatch( "\\n\\h+" + contextPattern + ": " ) ); + return this; + } + + public FailureReportChecker failure(String... literalStringsContainedInFailureMessageInOrder) { + if ( !lastPatternWasFailure ) { + elementsToMatch.add( new ElementToMatch( "\\n\\h+failures: " ) ); + } + lastPatternWasFailure = true; + elementsToMatch.add( new ElementToMatch( "\\n\\h+-\\h" ) ); + for ( String contained : literalStringsContainedInFailureMessageInOrder ) { + elementsToMatch.add( new ElementToMatch( ".*" + "\\Q" + contained + "\\E" ) ); + } + // Consume the rest of the line + elementsToMatch.add( new ElementToMatch( ".*" ) ); + return this; + } + + public FailureReportChecker multilineFailure(String... literalStringsContainedInFailureMessageInOrder) { + if ( !lastPatternWasFailure ) { + elementsToMatch.add( new ElementToMatch( "\\n\\h+failures: " ) ); + } + lastPatternWasFailure = true; + elementsToMatch.add( new ElementToMatch( "\\n\\h+-\\h" ) ); + for ( String contained : literalStringsContainedInFailureMessageInOrder ) { + elementsToMatch.add( new ElementToMatch( "[\\S\\s]*" + "\\Q" + contained + "\\E" ) ); + } + // Match the rest of the line + // We can't match multiple lines here, or we would run the risk of + // matching text meant for the following elements to match + elementsToMatch.add( new ElementToMatch( ".*" ) ); + return this; + } + + private static class ElementToMatch { + + private final Pattern pattern; + + ElementToMatch(String patternString) { + this.pattern = Pattern.compile( patternString ); + } + + int consumeFirst(String fullMessage) { + Matcher matcher = pattern.matcher( fullMessage ); + if ( matcher.find() ) { + return matcher.end(); + } + else { + return fail( + "Expected to find substring matching the following pattern:" + + "\n\t%s" + + "\n\nbut did not." + + "\n\nFull actual message:\n\t%s", + pattern.pattern(), + fullMessage + ); + } + } + + int consumeNext(String fullMessage, int currentIndex) { + Matcher matcher = pattern.matcher( fullMessage ); + if ( matcher.find( currentIndex ) && matcher.start() == currentIndex ) { + return matcher.end(); + } + else { + return fail( + "After:\n\t[...]%s" + + "\n\nExpected to find substring matching the following pattern:" + + "\n\t%s" + + "\n\nbut found this instead:\n\t%s[..]" + + "\n\nFull actual message:\n\t%s", + fullMessage.substring( Math.max( 0, currentIndex - 200 ), currentIndex ), + pattern.pattern(), + fullMessage.substring( currentIndex, Math.min( fullMessage.length(), currentIndex + 100 + pattern.pattern().length() ) ), + fullMessage + ); + } + } + + } + + @Override + public void accept(Throwable throwable) { + String message = throwable.getMessage(); + if ( elementsToMatch.isEmpty() ) { + throw new IllegalStateException( "Must add at least one element to match" ); + } + int currentIndex = elementsToMatch.get( 0 ).consumeFirst( message ); + for ( int i = 1; i < elementsToMatch.size(); i++ ) { + currentIndex = elementsToMatch.get( i ).consumeNext( message, currentIndex ); + } + } +} diff --git a/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportUtils.java b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportUtils.java new file mode 100644 index 00000000000..a4ea05f94e6 --- /dev/null +++ b/util/internal/integrationtest/common/src/main/java/org/hibernate/search/util/impl/integrationtest/common/reporting/FailureReportUtils.java @@ -0,0 +1,60 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.util.impl.integrationtest.common.reporting; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import org.hibernate.search.util.common.reporting.EventContext; +import org.hibernate.search.util.common.reporting.EventContextElement; +import org.hibernate.search.util.common.SearchException; + +public final class FailureReportUtils { + + private FailureReportUtils() { + } + + /** + * @param first The first part of the expected context. + * @param others The other parts of the expected context, if any. To be concatenated to the first part. + * @return A consumer representing an assertion to be passed as a parameter to + * {@link org.assertj.core.api.AbstractThrowableAssert#satisfies(Consumer[])}. + */ + public static Consumer hasContext(EventContext first, EventContext... others) { + return hasContext( + EventContext.concat( first, others ).elements().toArray( new EventContextElement[] { } ) + ); + } + + /** + * @param contextElements The expect context elements, in order. + * @return A consumer representing an assertion to be passed as a parameter to + * {@link org.assertj.core.api.AbstractThrowableAssert#satisfies(Consumer[])}. + */ + public static Consumer hasContext(EventContextElement... contextElements) { + return throwable -> { + assertThat( throwable ) + .isInstanceOf( SearchException.class ); + EventContext actualContext = ( (SearchException) throwable ).context(); + assertThat( actualContext ).as( "throwable.getContext()" ).isNotNull(); + assertThat( actualContext.elements() ) + .containsExactly( contextElements ); + String renderedContextElements = Arrays.stream( contextElements ).map( EventContextElement::render ) + .collect( Collectors.joining( ", " ) ); + assertThat( throwable.getMessage() ) + .endsWith( "Context: " + renderedContextElements ); + }; + } + + public static FailureReportChecker hasFailureReport() { + return new FailureReportChecker(); + } + +}