diff --git a/docs/guides/testing-with-testentitybuilder.md b/docs/guides/testing-with-testentitybuilder.md index 86d1b8b891..3b310e56f7 100644 --- a/docs/guides/testing-with-testentitybuilder.md +++ b/docs/guides/testing-with-testentitybuilder.md @@ -96,6 +96,37 @@ Product product = builder.save(Product.class); assert database.find(Product.class, product.getId()) != null; ``` +### Save Multiple Entities + +The `saveAll()` method persists multiple pre-built entities in a single call: + +```java +Product p1 = builder.build(Product.class); +Product p2 = builder.build(Product.class); +builder.saveAll(p1, p2); + +// Both are now in the database with assigned IDs: +assert p1.getId() != null; +assert p2.getId() != null; +``` + +This is equivalent to `database.saveAll(p1, p2)` but avoids needing a separate +`Database` reference in tests that already hold a `TestEntityBuilder`. + +### Access the Underlying Database + +The `database()` method returns the `Database` instance used internally by the builder. +This is useful in tests where you want a single injected object (`TestEntityBuilder`) but +still need to perform `find()`, `delete()`, or other database operations: + +```java +Product saved = builder.save(Product.class); + +// Use builder.database() instead of injecting a separate Database bean: +Product found = builder.database().find(Product.class, saved.getId()); +assert found != null; +``` + --- ## Using with Dependency Injection @@ -569,7 +600,6 @@ class TestConfig { class OrderRepositoryTest { @Autowired OrderRepository orderRepository; - @Autowired Database database; @Autowired TestEntityBuilder builder; @Test @@ -583,7 +613,7 @@ class OrderRepositoryTest { Order shipped = builder.build(Order.class); shipped.setStatus(OrderStatus.SHIPPED); - database.saveAll(pending1, pending2, shipped); + builder.saveAll(pending1, pending2, shipped); List pending = orderRepository.findByStatus(OrderStatus.PENDING); assertThat(pending).hasSize(2); @@ -606,7 +636,6 @@ class TestConfiguration { @InjectTest class OrderControllerTest { - @Inject Database database; @Inject TestEntityBuilder builder; @Test @@ -620,7 +649,7 @@ class OrderControllerTest { Order shipped = builder.build(Order.class); shipped.setStatus(OrderStatus.SHIPPED); - database.saveAll(pending1, pending2, shipped); + builder.saveAll(pending1, pending2, shipped); // ... test assertions } diff --git a/ebean-test/src/main/java/io/ebean/test/TestEntityBuilder.java b/ebean-test/src/main/java/io/ebean/test/TestEntityBuilder.java index 4483c777a0..031a0892a5 100644 --- a/ebean-test/src/main/java/io/ebean/test/TestEntityBuilder.java +++ b/ebean-test/src/main/java/io/ebean/test/TestEntityBuilder.java @@ -98,6 +98,20 @@ public T save(Class beanClass) { return bean; } + /** + * Save all the entity beans. + */ + public void saveAll(Object... beans) { + database.saveAll(beans); + } + + /** + * Return the underlying database. + */ + public Database database() { + return database; + } + private T build(Class beanClass, Set> buildStack) { BeanDescriptor descriptor = (BeanDescriptor) database.pluginApi().beanType(beanClass); if (descriptor == null) { diff --git a/ebean-test/src/test/java/io/ebean/test/TestEntityBuilderTest.java b/ebean-test/src/test/java/io/ebean/test/TestEntityBuilderTest.java index 47a0bf9ba4..3e28d7dd9d 100644 --- a/ebean-test/src/test/java/io/ebean/test/TestEntityBuilderTest.java +++ b/ebean-test/src/test/java/io/ebean/test/TestEntityBuilderTest.java @@ -77,6 +77,32 @@ void save_entityWithCascadeManyToOne_savesCascades() { assertThat(foundMaster).isNotNull(); } + @Test + void saveAll_insertsMultipleBeans_andAllCanBeFound() { + EBasic bean1 = builder.build(EBasic.class); + EBasic bean2 = builder.build(EBasic.class); + EBasic bean3 = builder.build(EBasic.class); + + builder.saveAll(bean1, bean2, bean3); + + assertThat(bean1.getId()).isNotNull(); + assertThat(bean2.getId()).isNotNull(); + assertThat(bean3.getId()).isNotNull(); + + assertThat(DB.find(EBasic.class, bean1.getId())).isNotNull(); + assertThat(DB.find(EBasic.class, bean2.getId())).isNotNull(); + assertThat(DB.find(EBasic.class, bean3.getId())).isNotNull(); + } + + @Test + void database_returnsTheDatabaseInstance() { + EBasic saved = builder.save(EBasic.class); + + EBasic found = builder.database().find(EBasic.class, saved.getId()); + assertThat(found).isNotNull(); + assertThat(found.getName()).isEqualTo(saved.getName()); + } + @Test void build_unknownClass_throwsIllegalArgumentException() { org.assertj.core.api.Assertions.assertThatThrownBy(() -> builder.build(String.class))