public function testEntityLifeCycle()
{
$key = self::$client->key('Person', 'Alton');
$data = ['description' => 'A great chef.', 'birthDate' => new \DateTimeImmutable(), 'birthPlace' => self::$client->geoPoint(37.422, -122.0841), 'favoriteFloat' => (double) 5.25, 'favoriteInt' => (int) 5, 'favoriteDishes' => ['Hamburgers', 'Hot Dogs'], 'isNamedAlton' => true, 'labels' => ['location' => 'at home'], 'nothingSpecial' => null, 'blob' => self::$client->blob('blob!')];
$upsertData = ['labels' => ['location' => 'someplace else']];
$updateData = ['labels' => ['location' => 'yet another location']];
$entity = self::$client->entity($key, $data);
self::$client->insert($entity);
self::$deletionQueue[] = $key;
$entity = self::$client->lookup($key);
$blobValue = (string) $data['blob'];
$actualData = $entity->get();
$actualBlobValue = (string) $actualData['blob'];
unset($data['blob']);
unset($actualData['blob']);
$this->assertEquals($data, $actualData);
$this->assertEquals($blobValue, $actualBlobValue);
$entity = self::$client->entity($key, $upsertData);
self::$client->upsert($entity);
$entity = self::$client->lookup($key);
$this->assertEquals($upsertData, $entity->get());
$entity = self::$client->entity($key, $updateData);
self::$client->update($entity, ['allowOverwrite' => true]);
$entity = self::$client->lookup($key);
$this->assertEquals($updateData, $entity->get());
}