Skip to content

Commit c5e15fa

Browse files
committed
HSEARCH-4877 Test use of provided identifier bridge in Search DSL and projections
1 parent 7d8919d commit c5e15fa

File tree

1 file changed

+71
-13
lines changed
  • integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/providedid

1 file changed

+71
-13
lines changed

integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/providedid/ProvidedIdIT.java

Lines changed: 71 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,32 @@
1010
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1111

1212
import java.lang.invoke.MethodHandles;
13+
import java.util.Arrays;
1314
import java.util.Collections;
1415
import java.util.HashMap;
1516
import java.util.Map;
1617

18+
import org.hibernate.search.engine.backend.types.converter.runtime.FromDocumentValueConvertContext;
19+
import org.hibernate.search.engine.backend.types.converter.runtime.ToDocumentValueConvertContext;
20+
import org.hibernate.search.engine.backend.types.converter.runtime.spi.FromDocumentValueConvertContextImpl;
21+
import org.hibernate.search.engine.backend.types.converter.runtime.spi.ToDocumentValueConvertContextImpl;
22+
import org.hibernate.search.engine.backend.types.converter.spi.DslConverter;
23+
import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter;
1724
import org.hibernate.search.engine.environment.bean.BeanReference;
18-
import org.hibernate.search.mapper.pojo.common.spi.PojoEntityReference;
19-
import org.hibernate.search.util.impl.integrationtest.mapper.pojo.standalone.StandalonePojoMappingSetupHelper;
20-
import org.hibernate.search.mapper.pojo.standalone.mapping.SearchMapping;
21-
import org.hibernate.search.engine.search.query.SearchQuery;
22-
import org.hibernate.search.mapper.pojo.standalone.session.SearchSession;
25+
import org.hibernate.search.integrationtest.mapper.pojo.mapping.definition.BridgeTestUtils;
2326
import org.hibernate.search.mapper.pojo.bridge.IdentifierBridge;
2427
import org.hibernate.search.mapper.pojo.bridge.runtime.IdentifierBridgeFromDocumentIdentifierContext;
2528
import org.hibernate.search.mapper.pojo.bridge.runtime.IdentifierBridgeToDocumentIdentifierContext;
29+
import org.hibernate.search.mapper.pojo.common.spi.PojoEntityReference;
2630
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed;
27-
import org.hibernate.search.engine.common.EntityReference;
31+
import org.hibernate.search.mapper.pojo.standalone.mapping.SearchMapping;
32+
import org.hibernate.search.mapper.pojo.standalone.session.SearchSession;
2833
import org.hibernate.search.util.common.SearchException;
2934
import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock;
3035
import org.hibernate.search.util.impl.integrationtest.common.rule.StubSearchWorkBehavior;
3136
import org.hibernate.search.util.impl.integrationtest.common.stub.backend.StubBackendUtils;
37+
import org.hibernate.search.util.impl.integrationtest.common.stub.backend.document.model.impl.StubIndexModel;
38+
import org.hibernate.search.util.impl.integrationtest.mapper.pojo.standalone.StandalonePojoMappingSetupHelper;
3239

3340
import org.junit.Rule;
3441
import org.junit.Test;
@@ -41,6 +48,46 @@ public class ProvidedIdIT {
4148
@Rule
4249
public StandalonePojoMappingSetupHelper setupHelper = StandalonePojoMappingSetupHelper.withBackendMock( MethodHandles.lookup(), backendMock );
4350

51+
private StubIndexModel indexModel;
52+
53+
@Test
54+
public void converters() {
55+
final String entityAndIndexName = "indexed";
56+
@Indexed
57+
class IndexedEntity {
58+
}
59+
60+
// Schema
61+
backendMock.expectSchema( entityAndIndexName, b -> { },
62+
indexModel -> this.indexModel = indexModel );
63+
SearchMapping mapping = withBaseConfiguration()
64+
.withAnnotatedEntityType( IndexedEntity.class, entityAndIndexName )
65+
.setup();
66+
backendMock.verifyExpectationsMet();
67+
68+
// DslConverter
69+
@SuppressWarnings("unchecked")
70+
DslConverter<Object, String> dslConverter =
71+
(DslConverter<Object, String>) indexModel.identifier().dslConverter();
72+
ToDocumentValueConvertContext toDocumentConvertContext =
73+
new ToDocumentValueConvertContextImpl( BridgeTestUtils.toBackendMappingContext( mapping ) );
74+
assertThat( dslConverter.toDocumentValue( 120, toDocumentConvertContext ) )
75+
.isEqualTo( "120" );
76+
assertThat( dslConverter.unknownTypeToDocumentValue( 120, toDocumentConvertContext ) )
77+
.isEqualTo( "120" );
78+
79+
// ProjectionConverter
80+
@SuppressWarnings("unchecked")
81+
ProjectionConverter<String, Object> projectionConverter =
82+
(ProjectionConverter<String, Object>) indexModel.identifier().projectionConverter();
83+
try ( SearchSession searchSession = mapping.createSession() ) {
84+
FromDocumentValueConvertContext fromDocumentConvertContext =
85+
new FromDocumentValueConvertContextImpl( BridgeTestUtils.toBackendSessionContext( searchSession ) );
86+
assertThat( projectionConverter.fromDocumentValue( "120", fromDocumentConvertContext ) )
87+
.isEqualTo( 120 );
88+
}
89+
}
90+
4491
@Test
4592
public void indexAndSearch() {
4693
final String entityAndIndexName = "indexed";
@@ -59,7 +106,7 @@ class IndexedEntity {
59106
try ( SearchSession session = mapping.createSession() ) {
60107
IndexedEntity entity1 = new IndexedEntity();
61108

62-
session.indexingPlan().add( "42", null, entity1 );
109+
session.indexingPlan().add( 42, null, entity1 );
63110

64111
backendMock.expectWorks( entityAndIndexName )
65112
.add( "42", b -> { } );
@@ -68,21 +115,32 @@ class IndexedEntity {
68115

69116
// Searching
70117
try ( SearchSession session = mapping.createSession() ) {
118+
// Check provided ID bridge is applied when fetching entity references
71119
backendMock.expectSearchReferences(
72120
Collections.singletonList( entityAndIndexName ),
73121
StubSearchWorkBehavior.of(
74122
1L,
75123
StubBackendUtils.reference( entityAndIndexName, "42" )
76124
)
77125
);
78-
79-
SearchQuery<EntityReference> query = session.search( IndexedEntity.class )
126+
assertThat( session.search( IndexedEntity.class )
80127
.selectEntityReference()
81-
.where( f -> f.matchAll() )
82-
.toQuery();
128+
.where( f -> f.matchAll() ).fetchAllHits() )
129+
.containsExactly( PojoEntityReference.withName( IndexedEntity.class, entityAndIndexName, 42 ) );
83130

84-
assertThat( query.fetchAll().hits() )
85-
.containsExactly( PojoEntityReference.withName( IndexedEntity.class, entityAndIndexName, "42" ) );
131+
// Check provided ID bridge is applied when fetching IDs
132+
backendMock.expectSearchIds(
133+
Collections.singletonList( entityAndIndexName ),
134+
b -> { },
135+
StubSearchWorkBehavior.of(
136+
1L,
137+
Arrays.asList( "42" )
138+
)
139+
);
140+
assertThat( session.search( IndexedEntity.class )
141+
.select( f -> f.id() )
142+
.where( f -> f.matchAll() ).fetchAllHits() )
143+
.containsExactly( 42 );
86144
}
87145
backendMock.verifyExpectationsMet();
88146
}

0 commit comments

Comments
 (0)