. * * @link http://librenms.org * @copyright 2018 Tony Murray * @author Tony Murray */ namespace LibreNMS\Tests; use LibreNMS\Alerting\QueryBuilderFluentParser; use LibreNMS\Alerting\QueryBuilderParser; use LibreNMS\Config; class QueryBuilderTest extends TestCase { private $data_file = 'tests/data/misc/querybuilder.json'; public function testHasQueryData() { $this->assertNotEmpty( $this->loadQueryData(), "Could not load query builder test data from $this->data_file" ); } /** * @dataProvider loadQueryData * @param string $legacy * @param array $builder * @param string $display * @param string $sql */ public function testQueryConversion($legacy, $builder, $display, $sql, $query) { if (! empty($legacy)) { // some rules don't have a legacy representation $this->assertEquals($builder, QueryBuilderParser::fromOld($legacy)->toArray()); } $qb = QueryBuilderFluentParser::fromJson($builder); $this->assertEquals($display, $qb->toSql(false)); $this->assertEquals($sql, $qb->toSql()); $qbq = $qb->toQuery(); $this->assertEquals($query[0], $qbq->toSql(), 'Fluent SQL does not match'); $this->assertEquals($query[1], $qbq->getBindings(), 'Fluent bindings do not match'); } public function loadQueryData() { $base = Config::get('install_dir'); $data = file_get_contents("$base/$this->data_file"); return json_decode($data, true); } }