/**
  *
  */
 public function test()
 {
     $jsonDataList = \UserProvider::getJsonData();
     $rawUserInfoList = [];
     foreach ($jsonDataList as $json) {
         $arr = json_decode($json, true);
         $this->assertTrue(is_array($arr));
         $rawUserInfoList[] = $arr;
     }
     $docFactory = new DocumentFactory(self::$documentPrototype);
     foreach ($rawUserInfoList as $rawUserInfo) {
         $payload = $docFactory->buildPayload($rawUserInfo);
         $this->assertArrayNotHasKey('name', $payload, print_r($payload, true));
         $this->assertArrayNotHasKey('email', $payload, print_r($payload, true));
         $this->assertArrayNotHasKey('track_ref', $payload, print_r($payload, true));
         $this->assertArrayNotHasKey('loginip', $payload, print_r($payload, true));
         $this->assertArrayHasKey('country', $payload, print_r($payload, true));
         foreach ($payload as $field => $value) {
             if ($field === 'status') {
                 $this->assertTrue(is_int($value) && $value >= 0);
                 continue;
             }
             $this->assertNotEmpty($value, sprintf('field [%s] should not be empty', $field));
         }
         $document = $docFactory->buildDocument($payload['snsid'], $payload);
         $this->assertEquals($payload, $document->getData());
         $document2 = $docFactory->make($payload['snsid'], $rawUserInfo);
         $this->assertEquals($payload, $document2->getData());
     }
 }
 /**
  * @param array $userInfoList
  *
  * @return Generator
  */
 protected function documentsGenerator(array $userInfoList)
 {
     while ($batch = array_splice($userInfoList, 0, $this->magicNumber)) {
         $documents = array_map(function (array $userInfo) {
             return $this->documentFactory->make($userInfo['snsid'], $userInfo);
         }, $batch);
         (yield $documents);
     }
 }