@@ -274,6 +274,50 @@ void insert() {
274274 }
275275 }
276276
277+ @ Test
278+ @ DisplayName ("fail on `create` if one of entities existed before transaction" )
279+ void insertMany () {
280+ Key key = keyFactory .newKey (newUuid ());
281+ String propertyName = "some_property" ;
282+ Entity oldEntity = Entity .newBuilder (key ).build ();
283+ Entity newEntity = Entity .newBuilder (key )
284+ .set (propertyName , 42L )
285+ .build ();
286+ datastore .createOrUpdate (oldEntity );
287+ Key freshNewKey = keyFactory .newKey (newUuid ());
288+ try (TransactionWrapper tx = datastore .newTransaction ()) {
289+ Entity freshNewEntity = Entity .newBuilder (freshNewKey ).build ();
290+ tx .create (ImmutableList .of (freshNewEntity , newEntity ));
291+ assertThrows (DatastoreException .class , tx ::commit );
292+ }
293+ assertThat (datastore .read (freshNewKey ))
294+ .isNull ();
295+ assertThat (datastore .read (oldEntity .getKey ()))
296+ .isEqualTo (oldEntity );
297+ }
298+
299+ @ Test
300+ @ DisplayName ("put many entities into database" )
301+ void putMany () {
302+ String propertyName = "foo" ;
303+ Key key = keyFactory .newKey (newUuid ());
304+ Entity oldEntity = Entity .newBuilder (key ).build ();
305+ Entity newEntity = Entity .newBuilder (key )
306+ .set (propertyName , 42L )
307+ .build ();
308+ datastore .createOrUpdate (oldEntity );
309+ Key freshNewKey = keyFactory .newKey (newUuid ());
310+ try (TransactionWrapper tx = datastore .newTransaction ()) {
311+ Entity freshNewEntity = Entity .newBuilder (freshNewKey ).build ();
312+ tx .createOrUpdate (ImmutableList .of (freshNewEntity , newEntity ));
313+ tx .commit ();
314+ }
315+ assertThat (datastore .read (freshNewKey ))
316+ .isNotNull ();
317+ assertThat (datastore .read (oldEntity .getKey ()))
318+ .isEqualTo (newEntity );
319+ }
320+
277321 @ Test
278322 @ DisplayName ("read multiple entities by IDs" )
279323 void lookup () {
0 commit comments