public function testRunTransactions()
{
$kind = 'Person';
$key1 = self::$client->key($kind, 'Frank');
$key2 = self::$client->key($kind, 'Greg');
$key2->ancestorKey($key1);
$data = ['lastName' => 'Smith'];
$newLastName = 'NotSmith';
$entity1 = self::$client->entity($key1, $data);
$entity2 = self::$client->entity($key2, $data);
$transaction = self::$client->transaction();
$transaction->insert($entity1);
$transaction->upsert($entity2);
$transaction->commit();
self::$deletionQueue[] = $key1;
self::$deletionQueue[] = $key2;
// transaction with query
$transaction2 = self::$client->transaction();
$query = self::$client->query()->kind($kind)->hasAncestor($key1);
$results = iterator_to_array($transaction2->runQuery($query));
$results[1]['lastName'] = $newLastName;
$transaction2->update($results[1]);
$transaction2->commit();
$this->assertEquals(2, count($results));
// transaction with lookup
$transaction3 = self::$client->transaction();
$result = $transaction3->lookup($key2);
$transaction3->rollback();
$this->assertEquals($newLastName, $result['lastName']);
}