builder = new SelectBuilder(); } public function testFrom() { $params = $this->builder ->from('Test') ->build() ->getRaw(); $this->assertEquals('Test', $params['from']); } public function testSelect1() { $select = $this->builder ->from('Test') ->select(['id', 'name']) ->select('test') ->build(); $this->assertEquals(['id', 'name', 'test'], $select->getSelect()); } public function testSelect2() { $select = $this->builder ->from('Test') ->select('test') ->select(['id', 'name']) ->build(); $this->assertEquals(['id', 'name'], $select->getSelect()); } public function testSelect3() { $select = $this->builder ->from('Test') ->select('test', 'hello') ->build(); $this->assertEquals([['test', 'hello']], $select->getSelect()); } public function testCloneNotSame() { $builder = new SelectBuilder(); $select = $builder ->from('Test') ->build(); $builder = new SelectBuilder(); $selectCloned = $builder ->clone($select) ->build(); $this->assertNotSame($selectCloned, $select); } public function testWhereNull1() { $select = $this->builder ->from('Test') ->where(['test' => null]) ->build(); $raw = $select->getRaw(); $this->assertEquals(['test' => null], $raw['whereClause']); } public function testWhereNull2() { $select = $this->builder ->from('Test') ->where('test', null) ->build(); $raw = $select->getRaw(); $this->assertEquals(['test' => null], $raw['whereClause']); } public function testGroupBy() { $select = $this->builder ->from('Test') ->having(['test' => null]) ->groupBy(['test']) ->build(); $raw = $select->getRaw(); $this->assertEquals(['test' => null], $raw['havingClause']); $this->assertEquals(['test'], $raw['groupBy']); } public function testClone() { $builder = new SelectBuilder(); $select = $builder ->from('Test') ->where('test1', '1') ->build(); $builder = new SelectBuilder(); $selectCloned = $builder ->clone($select) ->distinct() ->where('test2', '2') ->build(); $params = $select->getRaw(); $paramsCloned = $selectCloned->getRaw(); $this->assertTrue($paramsCloned['distinct']); $this->assertFalse($params['distinct'] ?? false); $this->assertEquals(['test1' =>'1'], $params['whereClause']); $this->assertEquals(['test1' => '1', 'test2' => '2'], $paramsCloned['whereClause']); } public function testCloneException() { $builder = new SelectBuilder(); $select = $builder ->from('Test') ->where('test1', '1') ->build(); $builder = new SelectBuilder(); $this->expectException(\RuntimeException::class); $builder ->from('Test') ->clone($select); } public function testWhereSameKeys1() { $builder = new SelectBuilder(); $select = $builder ->from('Test') ->where(['test' => '1']) ->where(['test' => '2']) ->build(); $raw = $select->getRaw(); $expected = [ 'test' => '1', ['test' => '2'], ]; $this->assertEquals($expected, $raw['whereClause']); } public function testWhereSameKeys2() { $builder = new SelectBuilder(); $select = $builder ->from('Test') ->where([ 'OR' => [ 'test' => '1' ], ]) ->where([ 'OR' => [ 'test' => '2' ], ]) ->build(); $raw = $select->getRaw(); $expected = [ 'OR' => [ 'test' => '1' ], [ 'OR' => [ 'test' => '2' ], ] ]; $this->assertEquals($expected, $raw['whereClause']); } public function testLeftJoin() { $params = $this->builder ->from('Test') ->leftJoin('link1') ->leftJoin('link1') ->leftJoin('link2') ->build() ->getRaw(); $this->assertEquals(['link1', 'link2'], $params['leftJoins']); } public function testJoin() { $params = $this->builder ->from('Test') ->join('link1') ->join('link1') ->join('link2') ->build() ->getRaw(); $this->assertEquals(['link1', 'link2'], $params['joins']); } }