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); }
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'])); }
/** * 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); } }