mirror of https://github.com/flightphp/core
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							112 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
	
	
							112 lines
						
					
					
						
							3.7 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
use flight\database\PdoWrapper;
 | 
						|
 | 
						|
/**
 | 
						|
 * Flight: An extensible micro-framework.
 | 
						|
 *
 | 
						|
 * @copyright   Copyright (c) 2012, Mike Cao <mike@mikecao.com>
 | 
						|
 * @license     MIT, http://flightphp.com/license
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class PdoWrapperTest extends PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var Pdo_Wrapper
 | 
						|
     */
 | 
						|
    private $pdo_wrapper;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->pdo_wrapper = new PdoWrapper('sqlite::memory:');
 | 
						|
		// create a test table and insert 3 rows of data
 | 
						|
		$this->pdo_wrapper->exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
 | 
						|
		$this->pdo_wrapper->exec('INSERT INTO test (name) VALUES ("one")');
 | 
						|
		$this->pdo_wrapper->exec('INSERT INTO test (name) VALUES ("two")');
 | 
						|
		$this->pdo_wrapper->exec('INSERT INTO test (name) VALUES ("three")');
 | 
						|
    }
 | 
						|
 | 
						|
	protected function tearDown(): void
 | 
						|
	{
 | 
						|
		// delete the test table
 | 
						|
		$this->pdo_wrapper->exec('DROP TABLE test');
 | 
						|
	}
 | 
						|
 | 
						|
	public function testRunQuerySelectAllStatement() {
 | 
						|
		$statement = $this->pdo_wrapper->runQuery('SELECT * FROM test');
 | 
						|
		$this->assertInstanceOf(PDOStatement::class, $statement);
 | 
						|
		$this->assertCount(3, $statement->fetchAll());
 | 
						|
	}
 | 
						|
 | 
						|
	public function testRunQuerySelectOneStatement() {
 | 
						|
		$statement = $this->pdo_wrapper->runQuery('SELECT * FROM test WHERE id = 1');
 | 
						|
		$this->assertInstanceOf(PDOStatement::class, $statement);
 | 
						|
		$this->assertCount(1, $statement->fetchAll());
 | 
						|
	}
 | 
						|
 | 
						|
	public function testRunQueryInsertStatement() {
 | 
						|
		$statement = $this->pdo_wrapper->runQuery('INSERT INTO test (name) VALUES ("four")');
 | 
						|
		$this->assertInstanceOf(PDOStatement::class, $statement);
 | 
						|
		$this->assertEquals(1, $statement->rowCount());
 | 
						|
	}
 | 
						|
 | 
						|
	public function testRunQueryUpdateStatement() {
 | 
						|
		$statement = $this->pdo_wrapper->runQuery('UPDATE test SET name = "something" WHERE name LIKE ?', ['%t%']);
 | 
						|
		$this->assertInstanceOf(PDOStatement::class, $statement);
 | 
						|
		$this->assertEquals(2, $statement->rowCount());
 | 
						|
	}
 | 
						|
 | 
						|
	public function testRunQueryDeleteStatement() {
 | 
						|
		$statement = $this->pdo_wrapper->runQuery('DELETE FROM test WHERE name LIKE ?', ['%t%']);
 | 
						|
		$this->assertInstanceOf(PDOStatement::class, $statement);
 | 
						|
		$this->assertEquals(2, $statement->rowCount());
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchField() {
 | 
						|
		$id = $this->pdo_wrapper->fetchField('SELECT id FROM test WHERE name = ?', ['two']);
 | 
						|
		$this->assertEquals(2, $id);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchRow() {
 | 
						|
		$row = $this->pdo_wrapper->fetchRow('SELECT * FROM test WHERE name = ?', ['two']);
 | 
						|
		$this->assertEquals(2, $row['id']);
 | 
						|
		$this->assertEquals('two', $row['name']);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchAll() {
 | 
						|
		$rows = $this->pdo_wrapper->fetchAll('SELECT * FROM test');
 | 
						|
		$this->assertCount(3, $rows);
 | 
						|
		$this->assertEquals(1, $rows[0]['id']);
 | 
						|
		$this->assertEquals('one', $rows[0]['name']);
 | 
						|
		$this->assertEquals(2, $rows[1]['id']);
 | 
						|
		$this->assertEquals('two', $rows[1]['name']);
 | 
						|
		$this->assertEquals(3, $rows[2]['id']);
 | 
						|
		$this->assertEquals('three', $rows[2]['name']);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchAllWithNamedParams() {
 | 
						|
		$rows = $this->pdo_wrapper->fetchAll('SELECT * FROM test WHERE name = :name', [ 'name' => 'two']);
 | 
						|
		$this->assertCount(1, $rows);
 | 
						|
		$this->assertEquals(2, $rows[0]['id']);
 | 
						|
		$this->assertEquals('two', $rows[0]['name']);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchAllWithInInt() {
 | 
						|
		$rows = $this->pdo_wrapper->fetchAll('SELECT id FROM test WHERE id IN(?)', [ [1,2 ]]);
 | 
						|
		$this->assertEquals(2, count($rows));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchAllWithInString() {
 | 
						|
		$rows = $this->pdo_wrapper->fetchAll('SELECT id FROM test WHERE name IN(?)', [ ['one','two' ]]);
 | 
						|
		$this->assertEquals(2, count($rows));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testFetchAllWithInStringCommas() {
 | 
						|
		$rows = $this->pdo_wrapper->fetchAll('SELECT id FROM test WHERE id > ? AND name IN(?)', [ 0, 'one,two' ]);
 | 
						|
		$this->assertEquals(2, count($rows));
 | 
						|
	}
 | 
						|
 | 
						|
}
 |