/**
  * Start transaction
  */
 public function testBeginTransactionBasic()
 {
     $obj_request = new \google\appengine\datastore\v4\BeginTransactionRequest();
     $obj_response = new \google\appengine\datastore\v4\BeginTransactionResponse();
     $obj_response->setTransaction('test-txn-ref-123');
     $this->apiProxyMock->expectCall('datastore_v4', 'BeginTransaction', $obj_request, $obj_response);
     $_SERVER['APPLICATION_ID'] = 'DatasetTest';
     $obj_gateway = $this->getMockBuilder('\\GDS\\Gateway\\ProtoBuf')->setMethods(['withTransaction', 'fetchById'])->getMock();
     $obj_gateway->expects($this->once())->method('withTransaction')->with($this->equalTo('test-txn-ref-123'))->willReturn($obj_gateway);
     $obj_store = new GDS\Store('Book', $obj_gateway);
     $obj_store->beginTransaction();
     $obj_store->fetchById('123456');
     $this->apiProxyMock->verify();
 }
 /**
  * Test Failure on cross-group transactions
  *
  * @expectedException        Exception
  * @expectedExceptionMessage Cross group transactions not supported over JSON API
  */
 public function testFailCrossGroup()
 {
     $obj_gateway = new GDS\Gateway\GoogleAPIClient($this->setupTestClient(), 'Dataset');
     $obj_store = new \GDS\Store('Film', $obj_gateway);
     $obj_store->beginTransaction(TRUE);
 }
 /**
  * Test transactional entity fetch
  */
 public function testTxnFetch()
 {
     // First begin the transaction
     $str_txn_ref = 'ghei34g498jhegijv0894hiwgerhiugjreiugh';
     $obj_http = $this->initTestHttpClient('https://datastore.googleapis.com/v1/projects/DatasetTest:beginTransaction', [], ['transaction' => $str_txn_ref]);
     /** @var \GDS\Gateway\RESTv1 $obj_gateway */
     $obj_gateway = $this->initTestGateway()->setHttpClient($obj_http);
     $obj_store = new \GDS\Store('Test', $obj_gateway);
     $obj_store->beginTransaction();
     $this->validateHttpClient($obj_http);
     // Now set up the transactional fetch
     $str_id = '1263751723';
     $obj_http = $this->initTestHttpClient('https://datastore.googleapis.com/v1/projects/DatasetTest:lookup', ['json' => (object) ['readOptions' => (object) ['transaction' => $str_txn_ref], 'keys' => [(object) ['path' => [(object) ['kind' => 'Test', 'id' => $str_id]], 'partitionId' => (object) ['projectId' => self::TEST_PROJECT]]]]], ['found' => [(object) ['entity' => (object) ['key' => (object) ['path' => [(object) ['kind' => 'Test', 'id' => $str_id]]], 'properties' => (object) ['name' => (object) ['excludeFromIndexes' => false, 'stringValue' => 'Tom']]], 'version' => '123', 'cursor' => 'gfuh37f86gyu23']]]);
     $obj_gateway->setHttpClient($obj_http);
     $obj_entity = $obj_store->fetchById($str_id);
     $this->assertInstanceOf('\\GDS\\Entity', $obj_entity);
     $this->assertEquals($str_id, $obj_entity->getKeyId());
     $this->assertEquals('Tom', $obj_entity->name);
     $this->validateHttpClient($obj_http);
 }