|
14 | 14 | */ |
15 | 15 | package jakarta.nosql.tck.communication.driver.column; |
16 | 16 |
|
| 17 | +import jakarta.nosql.NonUniqueResultException; |
17 | 18 | import jakarta.nosql.ServiceLoaderProvider; |
18 | 19 | import jakarta.nosql.column.Column; |
19 | 20 | import jakarta.nosql.column.ColumnDeleteQuery; |
|
31 | 32 | import java.util.stream.Collectors; |
32 | 33 |
|
33 | 34 | import static jakarta.nosql.column.ColumnDeleteQuery.delete; |
| 35 | +import static jakarta.nosql.column.ColumnQuery.select; |
34 | 36 | import static org.junit.jupiter.api.Assertions.assertEquals; |
35 | 37 | import static org.junit.jupiter.api.Assertions.assertNotNull; |
36 | 38 | import static org.junit.jupiter.api.Assertions.assertThrows; |
| 39 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
37 | 40 | import static org.junit.jupiter.api.Assumptions.assumeTrue; |
38 | 41 |
|
39 | 42 | public class ColumnFamilyManagerTest { |
@@ -78,7 +81,7 @@ public void shouldInsertTTL(ColumnArgument argument) throws InterruptedException |
78 | 81 | .orElseThrow(() -> new ColumnDriverException("Should return the id in the entity")); |
79 | 82 |
|
80 | 83 | TimeUnit.SECONDS.sleep(2L); |
81 | | - final ColumnQuery query = ColumnQuery.select().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 84 | + final ColumnQuery query = select().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
82 | 85 | final long count = manager.select(query).count(); |
83 | 86 | assertEquals(0L, count); |
84 | 87 | } |
@@ -138,7 +141,7 @@ public void shouldInsertIterableTTL(ColumnArgument argument) throws InterruptedE |
138 | 141 | .map(Optional::get).map(Column::get).collect(Collectors.toList()); |
139 | 142 |
|
140 | 143 | TimeUnit.SECONDS.sleep(2L); |
141 | | - final ColumnQuery query = ColumnQuery.select().from(entities.get(0).getName()) |
| 144 | + final ColumnQuery query = select().from(entities.get(0).getName()) |
142 | 145 | .where(argument.getIdName()).in(ids).build(); |
143 | 146 | final long count = manager.select(query).count(); |
144 | 147 | assertEquals(0L, count); |
@@ -216,6 +219,117 @@ public void shouldReturnErrorWhenUpdateIterableIsNull(ColumnArgument argument) { |
216 | 219 | assertThrows(NullPointerException.class, () -> manager.update((Iterable<ColumnEntity>) null)); |
217 | 220 | } |
218 | 221 |
|
| 222 | + @ParameterizedTest |
| 223 | + @ColumnSource("column.properties") |
| 224 | + public void shouldDelete(ColumnArgument argument) { |
| 225 | + assumeTrue(argument.isEmpty()); |
| 226 | + ColumnFamilyManager manager = getManager(); |
| 227 | + Optional<ColumnEntity> entityOptional = argument.getQuery().stream().flatMap(manager::query) |
| 228 | + .findFirst(); |
| 229 | + Assertions.assertTrue(entityOptional.isPresent()); |
| 230 | + final ColumnEntity entity = entityOptional |
| 231 | + .orElseThrow(() -> new ColumnDriverException("Should return an entity when the entity is saved")); |
| 232 | + |
| 233 | + final Column id = entity.find(argument.getIdName()) |
| 234 | + .orElseThrow(() -> new ColumnDriverException("Should return the id in the entity")); |
| 235 | + ColumnDeleteQuery deleteQuery = delete().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 236 | + manager.delete(deleteQuery); |
| 237 | + |
| 238 | + ColumnQuery query = select().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 239 | + assertEquals(0L, manager.select(query).count()); |
| 240 | + } |
| 241 | + |
| 242 | + @ParameterizedTest |
| 243 | + @ColumnSource("column.properties") |
| 244 | + public void shouldReturnErrorWhenDelete(ColumnArgument argument) { |
| 245 | + assumeTrue(argument.isEmpty()); |
| 246 | + ColumnFamilyManager manager = getManager(); |
| 247 | + assertThrows(NullPointerException.class, () -> manager.delete(null)); |
| 248 | + } |
| 249 | + |
| 250 | + @ParameterizedTest |
| 251 | + @ColumnSource("column.properties") |
| 252 | + public void shouldSelect(ColumnArgument argument) { |
| 253 | + assumeTrue(argument.isEmpty()); |
| 254 | + ColumnFamilyManager manager = getManager(); |
| 255 | + Optional<ColumnEntity> entityOptional = argument.getQuery().stream().flatMap(manager::query) |
| 256 | + .findFirst(); |
| 257 | + Assertions.assertTrue(entityOptional.isPresent()); |
| 258 | + final ColumnEntity entity = entityOptional |
| 259 | + .orElseThrow(() -> new ColumnDriverException("Should return an entity when the entity is saved")); |
| 260 | + |
| 261 | + final Column id = entity.find(argument.getIdName()) |
| 262 | + .orElseThrow(() -> new ColumnDriverException("Should return the id in the entity")); |
| 263 | + |
| 264 | + ColumnQuery query = select().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 265 | + assertEquals(1L, manager.select(query).count()); |
| 266 | + ColumnDeleteQuery deleteQuery = delete().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 267 | + manager.delete(deleteQuery); |
| 268 | + } |
| 269 | + |
| 270 | + @ParameterizedTest |
| 271 | + @ColumnSource("column.properties") |
| 272 | + public void shouldReturnErrorWhenSelect(ColumnArgument argument) { |
| 273 | + assumeTrue(argument.isEmpty()); |
| 274 | + ColumnFamilyManager manager = getManager(); |
| 275 | + assertThrows(NullPointerException.class, () -> manager.select(null)); |
| 276 | + } |
| 277 | + |
| 278 | + @ParameterizedTest |
| 279 | + @ColumnSource("column.properties") |
| 280 | + public void shouldSingleResult(ColumnArgument argument) { |
| 281 | + assumeTrue(argument.isEmpty()); |
| 282 | + ColumnFamilyManager manager = getManager(); |
| 283 | + Optional<ColumnEntity> entityOptional = argument.getQuery().stream().flatMap(manager::query) |
| 284 | + .findFirst(); |
| 285 | + Assertions.assertTrue(entityOptional.isPresent()); |
| 286 | + final ColumnEntity entity = entityOptional |
| 287 | + .orElseThrow(() -> new ColumnDriverException("Should return an entity when the entity is saved")); |
| 288 | + |
| 289 | + final Column id = entity.find(argument.getIdName()) |
| 290 | + .orElseThrow(() -> new ColumnDriverException("Should return the id in the entity")); |
| 291 | + |
| 292 | + ColumnQuery query = select().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 293 | + final Optional<ColumnEntity> optional = manager.singleResult(query); |
| 294 | + assertTrue(optional.isPresent()); |
| 295 | + ColumnDeleteQuery deleteQuery = delete().from(entity.getName()).where(id.getName()).eq(id.get()).build(); |
| 296 | + manager.delete(deleteQuery); |
| 297 | + } |
| 298 | + |
| 299 | + @ParameterizedTest |
| 300 | + @ColumnSource("column_iterable.properties") |
| 301 | + public void shouldAnEmptySingleResult(ColumnArgument argument) { |
| 302 | + assumeTrue(argument.isEmpty()); |
| 303 | + ColumnFamilyManager manager = getManager(); |
| 304 | + List<ColumnEntity> entities = argument.getQuery().stream().flatMap(manager::query) |
| 305 | + .collect(Collectors.toList()); |
| 306 | + |
| 307 | + assertNotNull(manager.update(entities)); |
| 308 | + final List<Object> ids = entities.stream() |
| 309 | + .map(c -> c.find(argument.getIdName())) |
| 310 | + .filter(Optional::isPresent) |
| 311 | + .map(Optional::get) |
| 312 | + .map(Column::get) |
| 313 | + .collect(Collectors.toList()); |
| 314 | + |
| 315 | + ColumnQuery query = select().from(entities.get(0).getName()) |
| 316 | + .where(argument.getIdName()).in(ids).build(); |
| 317 | + |
| 318 | + assertThrows(NonUniqueResultException.class, () -> manager.singleResult(query)); |
| 319 | + ColumnDeleteQuery deleteQuery = delete().from(entities.get(0).getName()) |
| 320 | + .where(argument.getIdName()).in(ids).build(); |
| 321 | + manager.delete(deleteQuery); |
| 322 | + } |
| 323 | + |
| 324 | + @ParameterizedTest |
| 325 | + @ColumnSource("column.properties") |
| 326 | + public void shouldReturnErrorWhenSingleResult(ColumnArgument argument) { |
| 327 | + assumeTrue(argument.isEmpty()); |
| 328 | + ColumnFamilyManager manager = getManager(); |
| 329 | + assertThrows(NullPointerException.class, () -> manager.singleResult(null)); |
| 330 | + } |
| 331 | + |
| 332 | + |
219 | 333 | private ColumnFamilyManager getManager() { |
220 | 334 | final ColumnFamilyManagerSupplier supplier = ServiceLoaderProvider.get(ColumnFamilyManagerSupplier.class); |
221 | 335 | return supplier.get(); |
|
0 commit comments