Example #1
0
 public function testProcessNoData()
 {
     $logHandler = new \Monolog\Handler\TestHandler();
     $logger = new \Monolog\Logger('test', [$logHandler]);
     Logger::setLogger($logger);
     $parser = new Json(Parser::create($logger));
     $parser->process([], 'empty');
     self::assertTrue($logHandler->hasDebug("No data returned in 'empty'"));
 }
 /**
  * No change to JSON parser structure should happen when nothing is parsed!
  */
 public function testRunMetadataUpdate()
 {
     $logger = $this->getLogger('test', true);
     Logger::setLogger($logger);
     $meta = ['json_parser.struct' => ['tickets.via' => ['channel' => 'scalar', 'source' => 'object']], 'time' => ['previousStart' => 123]];
     $cfg = new Config('testApp', 'testCfg', []);
     $api = Api::create(['baseUrl' => 'http://example.com'], $cfg);
     $ex = new GenericExtractor(new Temp());
     $ex->setLogger($logger);
     $ex->setApi($api);
     $ex->setMetadata($meta);
     $ex->run($cfg);
     $after = $ex->getMetadata();
     self::assertEquals($meta['json_parser.struct'], $after['json_parser.struct']);
     self::assertArrayHasKey('time', $after);
 }
Example #3
0
 public function testMergeResults()
 {
     Logger::setLogger($this->getLogger('testMergeResults', true));
     $configFirst = JobConfig::create(['endpoint' => '1st', 'dataType' => 'first']);
     $configTags = JobConfig::create(['endpoint' => '2nd', 'dataType' => 'tags']);
     $config = new Config('ex', 'test', []);
     $config->setAttributes(['mappings' => ['first' => ['id' => ['type' => 'column', 'mapping' => ['destination' => 'item_id']], 'tags' => ['type' => 'table', 'destination' => 'tags', 'tableMapping' => ['user' => ['mapping' => ['destination' => 'user', 'primaryKey' => true]], 'tag' => ['mapping' => ['destination' => 'tag', 'primaryKey' => true]]], 'parentKey' => ['disable' => true]]], 'tags' => ['user' => ['mapping' => ['destination' => 'user', 'primaryKey' => true]], 'tag' => ['mapping' => ['destination' => 'tag', 'primaryKey' => true]]]]]);
     $firstData = json_decode('[
         {
             "id": 1,
             "arr": [1,2,3]
         },
         {
             "id": 2,
             "arr": ["a","b","c"],
             "tags": [
                 {
                     "user": "******",
                     "tag": "tag1"
                 },
                 {
                     "user": "******",
                     "tag": "tag2"
                 }
             ]
         }
     ]');
     $secondData = json_decode('[
         {
             "user": "******",
             "tag": "tag3"
         },
         {
             "user": "******",
             "tag": "tag4"
         }
     ]');
     $parser = JsonMap::create($config);
     $parser->process($firstData, $configFirst->getDataType());
     $parser->process($secondData, $configTags->getDataType());
     self::assertEquals(['"user","tag"' . PHP_EOL, '"asd","tag1"' . PHP_EOL, '"asd","tag2"' . PHP_EOL, '"asd","tag3"' . PHP_EOL, '"asd","tag4"' . PHP_EOL], file($parser->getResults()['tags']));
 }
Example #4
0
 /**
  * Cannot use dataProvider because that gets set up before all tests
  * and the delay causes issues
  */
 public function testCurlBackoff()
 {
     // mapped curl error
     $retries = 3;
     $handler = new \Monolog\Handler\TestHandler();
     $logger = new \Monolog\Logger("test", [$handler]);
     Logger::setLogger($logger);
     $client = RestClient::create([], ['maxRetries' => $retries, 'curl' => ['codes' => [6]]]);
     try {
         $client->download(new RestRequest('http://keboolakeboolakeboola.com'));
         $this->fail("Request shoul fail");
     } catch (\Exception $e) {
         $this->assertCount($retries, $handler->getRecords());
         foreach ($handler->getRecords() as $record) {
             $this->assertEquals(100, $record['level']);
             $this->assertRegExp('/retrying/ui', $record['message']);
             $this->assertRegExp('/curl error 6\\:/ui', $record['context']['message']);
         }
         $this->assertRegExp('/curl error 6\\:/ui', $e->getMessage());
         $this->assertTrue($e instanceof \Keboola\Juicer\Exception\UserException);
     }
     // non-mapped curl error
     $retries = 3;
     $handler = new \Monolog\Handler\TestHandler();
     $logger = new \Monolog\Logger("test", [$handler]);
     Logger::setLogger($logger);
     $client = RestClient::create([], ['maxRetries' => $retries, 'curl' => ['codes' => [77]]]);
     try {
         $client->download(new RestRequest('http://keboolakeboolakeboola.com'));
         $this->fail("Request shoul fail");
     } catch (\Exception $e) {
         $this->assertCount(0, $handler->getRecords());
         $this->assertRegExp('/curl error 6\\:/ui', $e->getMessage());
         $this->assertTrue($e instanceof \Keboola\Juicer\Exception\UserException);
     }
 }