* Date: 6/16/14 * Time: 8:56 PM. * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace NilPortugues\Tests\Sql\QueryBuilder\Builder; use NilPortugues\Sql\QueryBuilder\Builder\GenericBuilder; use NilPortugues\Sql\QueryBuilder\Manipulation\Select; class GenericBuilderTest extends \PHPUnit_Framework_TestCase { /** * @var GenericBuilder */ private $writer; /** * */ public function setUp() { $this->writer = new GenericBuilder(); } /** * @test */ public function itShouldCreateSelectObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Select'; $this->assertInstanceOf($className, $this->writer->select()); } /** * @test */ public function itShouldCreateInsertObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Insert'; $this->assertInstanceOf($className, $this->writer->insert()); } /** * @test */ public function itShouldCreateUpdateObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Update'; $this->assertInstanceOf($className, $this->writer->update()); } /** * @test */ public function itShouldCreateDeleteObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Delete'; $this->assertInstanceOf($className, $this->writer->delete()); } /** * @test */ public function itShouldCreateIntersectObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Intersect'; $this->assertInstanceOf($className, $this->writer->intersect()); } /** * @test */ public function itShouldCreateMinusObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Minus'; $this->assertInstanceOf($className, $this->writer->minus(new Select('table1'), new Select('table2'))); } /** * @test */ public function itShouldCreateUnionObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\Union'; $this->assertInstanceOf($className, $this->writer->union()); } /** * @test */ public function itShouldCreateUnionAllObject() { $className = '\NilPortugues\Sql\QueryBuilder\Manipulation\UnionAll'; $this->assertInstanceOf($className, $this->writer->unionAll()); } /** * @test */ public function itCanAcceptATableNameForSelectInsertUpdateDeleteQueries() { $table = 'user'; $queries = [ 'select' => $this->writer->select($table), 'insert' => $this->writer->insert($table), 'update' => $this->writer->update($table), 'delete' => $this->writer->delete($table), ]; foreach ($queries as $type => $query) { $this->assertEquals($table, $query->getTable()->getName(), "Checking table in $type query"); } } /** * @test */ public function itCanAcceptATableAndColumnsForSelect() { $table = 'user'; $columns = ['id', 'role']; $expected = <<writer->select($table, $columns); $this->assertSame($expected, $this->writer->writeFormatted($select)); } /** * @test */ public function itCanAcceptATableAndValuesForInsert() { $table = 'user'; $values = ['id' => 1, 'role' => 'admin']; $expected = <<writer->insert($table, $values); $this->assertSame($expected, $this->writer->writeFormatted($insert)); } /** * @test */ public function itCanAcceptATableAndValuesForUpdate() { $table = 'user'; $values = ['id' => 1, 'role' => 'super-admin']; $expected = <<writer->update($table, $values); $this->assertSame($expected, $this->writer->writeFormatted($update)); } /** * @test */ public function itShouldOutputHumanReadableQuery() { $selectRole = $this->writer->select(); $selectRole ->setTable('role') ->setColumns(array('role_name')) ->limit(1) ->where() ->equals('role_id', 3); $select = $this->writer->select(); $select->setTable('user') ->setColumns(array('user_id', 'username')) ->setSelectAsColumn(array('user_role' => $selectRole)) ->setSelectAsColumn(array($selectRole)) ->where() ->equals('user_id', 4); $expected = <<assertSame($expected, $this->writer->writeFormatted($select)); } /** * @test */ public function it_should_inject_the_builder() { $query = $this->writer->select(); $this->assertSame($this->writer, $query->getBuilder()); } /** * @test */ public function itShouldWriteWhenGettingSql() { $query = $this->writer->select() ->setTable('user'); $expected = $this->writer->write($query); $this->assertSame($expected, $query->getSql()); } /** * @test */ public function itShouldWriteFormattedWhenGettingFormattedSql() { $query = $this->writer->select() ->setTable('user'); $formatted = true; $expected = $this->writer->writeFormatted($query); $this->assertSame($expected, $query->getSql($formatted)); } /** * @test */ public function itShouldWriteSqlWhenCastToString() { $query = $this->writer->select() ->setTable('user'); $expected = $this->writer->write($query); $this->assertSame($expected, (string) $query); } }