@@ -103,8 +103,7 @@ public void testTermsQueryWithQueryOnlyAndVerifyResults() throws Exception {
103
103
SearchHits mockHits = new SearchHits (
104
104
new SearchHit [] {
105
105
new SearchHit (1 ).sourceRef (new BytesArray ("{\" name\" :\" Jane Doe\" ,\" student_id\" :\" 111\" }" )),
106
- new SearchHit (2 ).sourceRef (new BytesArray ("{\" name\" :\" Mary Major\" ,\" student_id\" :\" 222\" }" ))
107
- },
106
+ new SearchHit (2 ).sourceRef (new BytesArray ("{\" name\" :\" Mary Major\" ,\" student_id\" :\" 222\" }" )) },
108
107
new TotalHits (2 , TotalHits .Relation .EQUAL_TO ),
109
108
1.0f
110
109
);
@@ -123,196 +122,129 @@ public void testTermsQueryWithQueryOnlyAndVerifyResults() throws Exception {
123
122
assertEquals ("Mary Major" , hits [1 ].getSourceAsMap ().get ("name" ));
124
123
assertEquals ("222" , hits [1 ].getSourceAsMap ().get ("student_id" ));
125
124
}
125
+
126
+ public void testEnhancedTermsLookupWithQueryClause () throws Exception {
127
+ // Setup TermsLookup with a query clause
128
+ QueryBuilder queryBuilder = QueryBuilders .matchQuery ("course" , "Math101" );
129
+ TermsLookup termsLookup = new TermsLookup ("courses" , null , "students" , queryBuilder );
130
+
131
+ TermsQueryBuilder termsQueryBuilder = QueryBuilders .termsQuery ("student_id" , termsLookup );
132
+
133
+ // Mock QueryShardContext
134
+ QueryShardContext context = mock (QueryShardContext .class );
135
+ when (context .getIndexSettings ()).thenReturn (null );
136
+
137
+ // Rewrite the query before execution
138
+ QueryBuilder rewrittenQueryBuilder = termsQueryBuilder .rewrite (context );
139
+
140
+ // Validate the rewritten query
141
+ assertNotNull (rewrittenQueryBuilder );
142
+ assertThat (rewrittenQueryBuilder , instanceOf (QueryBuilder .class ));
143
+ }
144
+
145
+ public void testQueryClauseReturnsNoResults () throws Exception {
146
+ // Setup TermsLookup with a query clause that returns no results
147
+ QueryBuilder queryBuilder = QueryBuilders .matchQuery ("course" , "NonExistentCourse" );
148
+ TermsLookup termsLookup = new TermsLookup ("courses" , null , "students" , queryBuilder );
149
+
150
+ TermsQueryBuilder termsQueryBuilder = QueryBuilders .termsQuery ("student_id" , termsLookup );
151
+
152
+ // Mock QueryShardContext
153
+ QueryShardContext context = mock (QueryShardContext .class );
154
+ when (context .getIndexSettings ()).thenReturn (null );
155
+
156
+ // Rewrite the query before execution
157
+ QueryBuilder rewrittenQueryBuilder = termsQueryBuilder .rewrite (context );
158
+
159
+ // Mock the search response with no hits
160
+ SearchResponse mockResponse = mock (SearchResponse .class );
161
+ SearchHits mockHits = new SearchHits (new SearchHit [0 ], new TotalHits (0 , TotalHits .Relation .EQUAL_TO ), 0.0f );
162
+ when (mockResponse .getHits ()).thenReturn (mockHits );
163
+
164
+ // Validate the results
165
+ assertEquals (0 , mockResponse .getHits ().getHits ().length );
166
+ }
167
+
168
+ public void testTermsQueryWithInsertedData () throws Exception {
169
+ // Setup TermsLookup with valid data
170
+ TermsLookup termsLookup = new TermsLookup ("classes" , "102" , "enrolled" );
171
+ TermsQueryBuilder termsQueryBuilder = QueryBuilders .termsQuery ("student_id" , termsLookup );
172
+
173
+ // Mock QueryShardContext
174
+ QueryShardContext context = mock (QueryShardContext .class );
175
+ when (context .getIndexSettings ()).thenReturn (null );
176
+
177
+ // Rewrite the query before execution
178
+ QueryBuilder rewrittenQueryBuilder = termsQueryBuilder .rewrite (context );
179
+
180
+ // Mock the search response
181
+ SearchResponse mockResponse = mock (SearchResponse .class );
182
+ SearchHits mockHits = new SearchHits (
183
+ new SearchHit [] {
184
+ new SearchHit (1 ).sourceRef (new BytesArray ("{\" name\" :\" John Smith\" ,\" student_id\" :\" 333\" }" )),
185
+ new SearchHit (2 ).sourceRef (new BytesArray ("{\" name\" :\" Alice Brown\" ,\" student_id\" :\" 444\" }" )) },
186
+ new TotalHits (2 , TotalHits .Relation .EQUAL_TO ),
187
+ 1.0f
188
+ );
189
+ when (mockResponse .getHits ()).thenReturn (mockHits );
190
+
191
+ // Validate the results
192
+ SearchHit [] hits = mockResponse .getHits ().getHits ();
193
+ assertEquals (2 , hits .length );
194
+ assertEquals ("John Smith" , hits [0 ].getSourceAsMap ().get ("name" ));
195
+ assertEquals ("333" , hits [0 ].getSourceAsMap ().get ("student_id" ));
196
+ assertEquals ("Alice Brown" , hits [1 ].getSourceAsMap ().get ("name" ));
197
+ assertEquals ("444" , hits [1 ].getSourceAsMap ().get ("student_id" ));
198
+ }
199
+
200
+ public void testTermsQueryWithNoIdAndNoQuery () {
201
+ // Attempt to create a TermsLookup with no id and no query
202
+ Exception exception = expectThrows (IllegalArgumentException .class , () -> {
203
+ new TermsLookup ("classes" , null , "enrolled" );
204
+ });
205
+
206
+ // Verify the exception message
207
+ assertEquals ("[" + TermsQueryBuilder .NAME + "] query lookup element requires specifying either the id or the query." , exception .getMessage ());
208
+ }
209
+
210
+ public void testTermsQueryWithIdAndQuery () throws Exception {
211
+ // Setup TermsLookup with both id and query
212
+ QueryBuilder queryBuilder = QueryBuilders .matchQuery ("course" , "CS102" );
213
+ TermsLookup termsLookup = new TermsLookup ("classes" , "103" , "enrolled" );
214
+
215
+ // Expect an exception due to both id and query being set
216
+ Exception exception = expectThrows (IllegalArgumentException .class , () -> termsLookup .setQuery (queryBuilder ));
217
+ assertEquals ("[" + TermsQueryBuilder .NAME + "] query lookup element cannot specify both id and query." , exception .getMessage ());
218
+
219
+ }
220
+
221
+ public void testTermsQueryWithComplexQuery () throws Exception {
222
+ // Setup TermsLookup with a complex query
223
+ QueryBuilder queryBuilder = QueryBuilders .boolQuery ()
224
+ .must (QueryBuilders .matchQuery ("course" , "CS103" ))
225
+ .filter (QueryBuilders .rangeQuery ("year" ).gte (2020 ));
226
+ TermsLookup termsLookup = new TermsLookup ("classes" , null , "enrolled" , queryBuilder );
227
+
228
+ TermsQueryBuilder termsQueryBuilder = QueryBuilders .termsQuery ("student_id" , termsLookup );
229
+
230
+ // Mock QueryShardContext
231
+ QueryShardContext context = mock (QueryShardContext .class );
232
+ when (context .getIndexSettings ()).thenReturn (null );
233
+
234
+ // Rewrite the query before execution
235
+ QueryBuilder rewrittenQueryBuilder = termsQueryBuilder .rewrite (context );
236
+
237
+ // Validate the rewritten query
238
+ assertNotNull (rewrittenQueryBuilder );
239
+ assertThat (rewrittenQueryBuilder , instanceOf (QueryBuilder .class ));
240
+ }
126
241
}
127
- // {
128
- //
129
- // public void testEnhancedTermsLookupWithQueryClause() throws Exception {
130
- // // Setup TermsLookup with a valid id and query clause
131
- // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "CS101");
132
- // TermsLookup termsLookup = new TermsLookup("classes", "101", "enrolled").query(queryBuilder);
133
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
134
- //
135
- // // Create real IndexMetadata with valid settings
136
- // Settings indexSettings = Settings.builder()
137
- // .put("index.query.bool.max_clause_count", 1024) // Example setting
138
- // .put("index.version.created", 8000099) // Add the required index.version.created setting
139
- // .build();
140
- // IndexMetadata indexMetadata = IndexMetadata.builder("test_index")
141
- // .settings(indexSettings)
142
- // .numberOfShards(1)
143
- // .numberOfReplicas(1)
144
- // .build();
145
- //
146
- // // Create IndexSettings using the IndexMetadata
147
- // IndexSettings settings = new IndexSettings(indexMetadata, indexSettings);
148
- //
149
- // // Mock QueryShardContext
150
- // QueryShardContext context = mock(QueryShardContext.class);
151
- // when(context.getIndexSettings()).thenReturn(settings); // Return the real IndexSettings
152
- //
153
- // // Rewrite the query before execution
154
- // QueryBuilder rewrittenQueryBuilder = termsQueryBuilder.rewrite(context);
155
- //
156
- // // Execute the rewritten query and validate
157
- // Query query = rewrittenQueryBuilder.toQuery(context);
158
- // assertNotNull(query);
159
- // assertThat(query, instanceOf(Query.class));
160
- // }
161
- //
162
- //
163
- //
164
- // public void testQueryClauseReturnsNoResults() throws Exception {
165
- // // Setup TermsLookup with a query clause that returns no results
166
- // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "NonExistentClass");
167
- // TermsLookup termsLookup = new TermsLookup("classes", "101", "enrolled").query(queryBuilder);
168
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
169
- //
170
- // // Create real IndexMetadata with valid settings
171
- // Settings indexSettings = Settings.builder()
172
- // .put("index.query.bool.max_clause_count", 1024) // Example setting
173
- // .put("index.version.created", 8000099) // Add the required index.version.created setting
174
- // .build();
175
- // IndexMetadata indexMetadata = IndexMetadata.builder("test_index")
176
- // .settings(indexSettings)
177
- // .numberOfShards(1)
178
- // .numberOfReplicas(1)
179
- // .build();
180
- //
181
- // // Create IndexSettings using the IndexMetadata
182
- // IndexSettings settings = new IndexSettings(indexMetadata, indexSettings);
183
- //
184
- // // Mock QueryShardContext
185
- // QueryShardContext context = mock(QueryShardContext.class);
186
- // when(context.getIndexSettings()).thenReturn(settings); // Return the real IndexSettings
187
- //
188
- // // Rewrite the query before execution
189
- // QueryBuilder rewrittenQueryBuilder = termsQueryBuilder.rewrite(context);
190
- //
191
- // // Check the type of the rewritten query
192
- // if (rewrittenQueryBuilder instanceof MatchNoneQueryBuilder) {
193
- // // Handle the case where the query rewrites to MatchNoneQueryBuilder
194
- // assertNotNull(rewrittenQueryBuilder);
195
- // assertThat(rewrittenQueryBuilder, instanceOf(MatchNoneQueryBuilder.class));
196
- // } else if (rewrittenQueryBuilder instanceof TermsQueryBuilder) {
197
- // // Execute the query and validate
198
- // Query query = rewrittenQueryBuilder.toQuery(context);
199
- // assertNotNull(query);
200
- // assertThat(query, instanceOf(Query.class));
201
- // } else {
202
- // throw new IllegalStateException("Unexpected query type: " + rewrittenQueryBuilder.getClass().getName());
203
- // }
204
- // }
205
- //
206
- // public void testTermsQueryWithInsertedData() throws Exception {
207
- // // Setup TermsLookup with a valid id and query clause
208
- // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "CS101");
209
- // TermsLookup termsLookup = new TermsLookup("classes", "101", "enrolled").query(queryBuilder);
210
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
211
- //
212
- // // Mock data insertion
213
- // String[] enrolledStudents = { "1", "2" };
214
- // String[] allStudents = { "1", "2", "3" };
215
- //
216
- // // Simulate query execution
217
- // boolean queryMatches = false;
218
- // for (String student : allStudents) {
219
- // for (String enrolled : enrolledStudents) {
220
- // if (student.equals(enrolled)) {
221
- // queryMatches = true;
222
- // break;
223
- // }
224
- // }
225
- // }
226
- //
227
- // // Validate the output
228
- // assertTrue("Query should match enrolled students", queryMatches);
229
- // }
230
- //
231
- //
232
- //
233
- // public void testTermsQueryWithIdOnly() throws Exception {
234
- // // Setup TermsLookup with a valid id
235
- // TermsLookup termsLookup = new TermsLookup("classes", "101", "enrolled");
236
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
237
- //
238
- // // Mock QueryShardContext
239
- // QueryShardContext context = mock(QueryShardContext.class);
240
- // when(context.getIndexSettings()).thenReturn(null); // Mock index settings if needed
241
- //
242
- // // Rewrite the query before execution
243
- // QueryBuilder rewrittenQueryBuilder = termsQueryBuilder.rewrite(context);
244
- //
245
- // // Execute the rewritten query and validate
246
- // Query query = rewrittenQueryBuilder.toQuery(context);
247
- // assertNotNull(query);
248
- // assertThat(query, instanceOf(Query.class));
249
- // }
250
- //
251
- // public void testTermsQueryWithQueryOnly() throws Exception {
252
- // // Setup TermsLookup with a query clause
253
- // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "CS101");
254
- // TermsLookup termsLookup = new TermsLookup("classes", null, "enrolled").query(queryBuilder);
255
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
256
- //
257
- // // Mock QueryShardContext
258
- // QueryShardContext context = mock(QueryShardContext.class);
259
- // when(context.getIndexSettings()).thenReturn(null); // Mock index settings if needed
260
- //
261
- // // Rewrite the query before execution
262
- // QueryBuilder rewrittenQueryBuilder = termsQueryBuilder.rewrite(context);
263
- //
264
- // // Execute the rewritten query and validate
265
- // Query query = rewrittenQueryBuilder.toQuery(context);
266
- // assertNotNull(query);
267
- // assertThat(query, instanceOf(Query.class));
268
- // }
269
- //
270
- // public void testTermsQueryWithIdAndQuery() {
271
- // // Setup TermsLookup with both id and query (invalid case)
272
- // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "CS101");
273
- // TermsLookup termsLookup = new TermsLookup("classes", "101", "enrolled").query(queryBuilder);
274
- //
275
- // // Expect an exception during query execution
276
- // IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
277
- // QueryBuilders.termsQuery("student_id", termsLookup);
278
- // });
279
- //
280
- // // Validate the exception message
281
- // assertEquals("[terms_lookup] cannot specify both 'id' and 'query'.", e.getMessage());
282
- // }
283
- //
284
- // public void testTermsQueryWithNoIdAndNoQuery() {
285
- // // Setup TermsLookup with neither id nor query (invalid case)
286
- // TermsLookup termsLookup = new TermsLookup("classes", null, "enrolled");
287
- //
288
- // // Expect an exception during query execution
289
- // IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> {
290
- // QueryBuilders.termsQuery("student_id", termsLookup);
291
- // });
292
- //
293
- // // Validate the exception message
294
- // assertEquals("[terms_lookup] requires either 'id' or 'query' to be specified.", e.getMessage());
295
- // }
296
- //
297
- // public void testTermsQueryWithComplexQuery() throws Exception {
298
- // // Setup TermsLookup with a complex query clause
299
- // QueryBuilder queryBuilder = QueryBuilders.boolQuery()
300
- // .must(QueryBuilders.matchQuery("name", "CS101"))
301
- // .filter(QueryBuilders.rangeQuery("enrolled").gte(100).lte(200));
302
- // TermsLookup termsLookup = new TermsLookup("classes", null, "enrolled").query(queryBuilder);
303
- // TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("student_id", termsLookup);
304
- //
305
- // // Mock QueryShardContext
306
- // QueryShardContext context = mock(QueryShardContext.class);
307
- // when(context.getIndexSettings()).thenReturn(null); // Mock index settings if needed
308
- //
309
- // // Rewrite the query before execution
310
- // QueryBuilder rewrittenQueryBuilder = termsQueryBuilder.rewrite(context);
311
- //
312
- // // Execute the rewritten query and validate
313
- // Query query = rewrittenQueryBuilder.toQuery(context);
314
- // assertNotNull(query);
315
- // assertThat(query, instanceOf(Query.class));
316
- // }
317
- //
318
- // }
242
+
243
+ // testEnhancedTermsLookupWithQueryClause
244
+ // testQueryClauseReturnsNoResults
245
+ // testTermsQueryWithInsertedData
246
+ // testTermsQueryWithIdOnly
247
+ // testTermsQueryWithQueryOnly
248
+ // testTermsQueryWithIdAndQuery
249
+ // testTermsQueryWithNoIdAndNoQuery
250
+ // testTermsQueryWithComplexQuery
0 commit comments