File: tests/eMapper/SQLite/QueryTest.php

Recommend this page to a friend!
  Classes of Emmanuel Antico  >  eMapper  >  tests/eMapper/SQLite/QueryTest.php  >  Download  
File: tests/eMapper/SQLite/QueryTest.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: eMapper
Database abstraction layer that maps data types
Author: By
Last change:
Date: 6 years ago
Size: 5,095 bytes
 

Contents

Class file image Download
<?php
namespace eMapper\SQLite;

use
eMapper\AbstractQueryTest;
use
eMapper\Engine\SQLite\SQLiteDriver;
use
eMapper\Reflection\Profiler;
use
eMapper\Query\Builder\SelectQueryBuilder;
use
eMapper\Query\Attr;

/**
 * SQLite query test
 * @author emaphp
 * @group sqlite
 * @group query
 */
class QueryTest extends AbstractQueryTest {
    public function
build() {
       
$this->driver = new SQLiteDriver(SQLiteTest::$filename);
       
$this->profile = Profiler::getClassProfile('Acme\Entity\Product');
    }
   
   
//SELECT icontains
   
public function testSelectIContains() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->icontains('GFX'));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/^SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('%GFX%', $args[$index]);
    }
   
    public function
testSelectNotIContains() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->icontains('GFX', false));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/^SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('%GFX%', $args[$index]);
    }
   
   
//SELECT istartswith
   
public function testSelectIStartsWith() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->istartswith('IND'));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('IND%', $args[$index]);
    }
   
    public function
testSelectNotIStartsWith() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->istartswith('IND', false));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('IND%', $args[$index]);
    }
   
   
//SELECT iendswith
   
public function testSelectIEndsWith() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->iendswith('232'));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('%232', $args[$index]);
    }
   
    public function
testSelectNotIEndsWith() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->iendswith('232', false));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT LIKE #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('%232', $args[$index]);
    }
   
   
//SELECT regex
   
public function testRegex() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->matches('^(An?|The) +'));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code REGEXP #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('^(An?|The) +', $args[$index]);
    }
   
    public function
testNotRegex() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->matches('^(An?|The) +', false));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT REGEXP #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('^(An?|The) +', $args[$index]);
    }
   
   
//SELECT iregex
   
public function testIRegex() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->imatches('^(an?|the) +'));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code REGEXP #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('(?i)^(an?|the) +', $args[$index]);
    }
   
    public function
testNotIRegex() {
       
$query = new SelectQueryBuilder($this->profile);
       
$query->setCondition(Attr::code()->imatches('^(an?|the) +', false));
        list(
$query, $args) = $query->build($this->driver, []);
       
$this->assertRegExpMatch("/SELECT \* FROM @@products WHERE product_code NOT REGEXP #\{([\w]+)\}/", $query, $matches);
       
$index = $matches[1];
       
$this->assertArrayHasKey($index, $args);
       
$this->assertEquals('(?i)^(an?|the) +', $args[$index]);
    }
}
?>


For more information send a message to info at phpclasses dot org.