Skip to content

Commit

Permalink
tests & coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
LucaRainone committed Aug 5, 2018
1 parent d501118 commit 881b24a
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 21 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[![Build Status](https://travis-ci.org/LucaRainone/conditionbuilder.svg?branch=master)](https://travis-ci.org/LucaRainone/conditionbuilder)

[![Coverage Status](https://coveralls.io/repos/github/LucaRainone/conditionbuilder/badge.svg?branch=master)](https://coveralls.io/github/LucaRainone/conditionbuilder?branch=master)

This package allows you to build query conditions for PDO-like interfaces.

Expand Down
2 changes: 1 addition & 1 deletion src/Expression/MySQL/Date/DateAdd.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public function __construct($date, $adding, $unit)

public function __toString()
{
return "DATE_ADD({$this->date}, INTERVAL {$this->adding} {$this->unit})";
return "DATE_ADD(\"{$this->date}\", INTERVAL {$this->adding} {$this->unit})";
}

}
3 changes: 1 addition & 2 deletions src/Operator/IsBetween.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@ private function _buildWithOneLimit() {
else if (is_null($this->start)) {
$operator = $this->isNot ? ">" : "<=";
$operand = $this->fetchPlaceholderOrExpressionString($this->end);
} else
throw new Exception("all operators are null");
}

return "{$this->field} $operator {$operand}";
}
Expand Down
7 changes: 4 additions & 3 deletions src/Operator/IsEqual.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ public function build():String
}

private function _buildInOperatorCondition(string $left, array $right, string $placeholder) {

if(empty($right))
return "FALSE";

$operator = $this->isNot ? "NOT IN" : "IN";
return "$left $operator (" .
$this->_commaSeparatedPlaceholder(count($right), $placeholder) .
Expand All @@ -49,9 +53,6 @@ private function _commaSeparatedPlaceholder(int $count, string $placeholder):str

public function mustBeConsidered()
{
if(is_array($this->rightOperand))
return !empty($this->rightOperand);

return !is_null($this->rightOperand);
}

Expand Down
69 changes: 61 additions & 8 deletions test/ConditionBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function testDummyOperator()

$conditionBuilder->append(new DummyOperator(true));

self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b)");
self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b ? ? ?)");
self::assertEquals($conditionBuilder->values(), [1, 2, 3]);
}

Expand All @@ -38,7 +38,7 @@ public function testDummyOperatorConcatAND()
->append(new DummyOperator(true))
->append(new DummyOperator(true));

self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b AND a DUMMY_OP b)");
self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b ? ? ? AND a DUMMY_OP b ? ? ?)");
self::assertEquals($conditionBuilder->values(), [1, 2, 3, 1, 2, 3]);
}

Expand All @@ -50,7 +50,7 @@ public function testDummyOperatorConcatOR()
->append(new DummyOperator(true))
->append(new DummyOperator(true));

self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b OR a DUMMY_OP b)");
self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b ? ? ? OR a DUMMY_OP b ? ? ?)");
self::assertEquals($conditionBuilder->values(), [1, 2, 3, 1, 2, 3]);
}

Expand All @@ -61,7 +61,7 @@ public function testMultipleArgumentAppend()
$conditionBuilder
->append(new DummyOperator(true), new DummyOperator(true));

self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b AND a DUMMY_OP b)");
self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b ? ? ? AND a DUMMY_OP b ? ? ?)");
self::assertEquals($conditionBuilder->values(), [1, 2, 3, 1, 2, 3]);
}

Expand All @@ -72,17 +72,65 @@ public function testIgnoreNotConfiguredOperator()
$conditionBuilder
->append(new DummyOperator(true), new DummyOperator(false));

self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b)");
self::assertEquals($conditionBuilder->build(), "(a DUMMY_OP b ? ? ?)");
self::assertEquals($conditionBuilder->values(), [1, 2, 3]);
}

public function testNot() {
public function testNot()
{
$conditionBuilder = self::getInstanceModeAnd();
$conditionBuilder->append(new DummyOperator());
self::assertInstanceOf(ConditionBuilder::class, $conditionBuilder->not());
self::assertEquals("!(a DUMMY_OP b)",$conditionBuilder->build());
self::assertEquals("!(a DUMMY_OP b ? ? ?)",$conditionBuilder->build());
}

public function testToStringMagicMethod()
{
$conditionBuilder = self::getInstanceModeAnd();
self::assertEquals("$conditionBuilder", "(TRUE)");

}

public function testInvokeMagicMethod()
{
$conditionBuilder = self::getInstanceModeAnd();
$conditionBuilder->append(new DummyOperator());
self::assertEquals([1, 2, 3], $conditionBuilder());
}

public function testDefaultConfiguration()
{
$conf = new Configuration();
$conf->setPlaceholder("!");
ConditionBuilder::setDefaultConfiguration($conf);
$conditionBuilder = self::getInstanceModeAnd();
$dummyOperator = new DummyOperator();
$conditionBuilder->append($dummyOperator);
self::assertEquals("!", $dummyOperator->getConfiguration()->getPlaceholder());
ConditionBuilder::setDefaultConfiguration(new Configuration());
}

public function testNestedConditionBuilder()
{
$conditionBuilder = self::getInstanceModeAnd();
$conditionBuilderNested = self::getInstanceModeAnd();
$conditionBuilder->append($conditionBuilderNested);

self::assertEquals("((TRUE))", $conditionBuilder->build());
}

public function testDebugInfo()
{
$conditionBuilder = self::getInstanceModeAnd();
$conditionBuilder->append(new DummyOperator());
$debug = $conditionBuilder->__debugInfo();
self::assertEquals(["condition", "values", "elements", "desired"], array_keys($debug));
self::assertEquals("(a DUMMY_OP b ? ? ?)", $debug['condition']);
self::assertEquals([1,2,3], $debug['values']);
self::assertInstanceOf(DummyOperator::class, $debug['elements'][0]);
self::assertEquals("(a DUMMY_OP b 1 2 3)", $debug['desired']);
}

private static function getInstanceModeAnd()
{
return new ConditionBuilder(ConditionBuilder::MODE_AND);
Expand Down Expand Up @@ -110,12 +158,13 @@ public function __construct($mustBeConsidered = true, Configuration $conf = null

public function setConfiguration(ConfigurationInterface $conf):OperatorInterface
{
$this->_conf = $conf;
return $this;
}

public function build(): String
{
return "a DUMMY_OP b";
return "a DUMMY_OP b ? ? ?";
}

public function values():array
Expand All @@ -133,4 +182,8 @@ public function mustBeConsidered()
return $this->_mustBeConsidered;
}

public function getConfiguration() {
return $this->_conf;
}

}
28 changes: 28 additions & 0 deletions test/Operator/Expression/MySQL/Date/DateAddTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace rain1\ConditionBuilder\Operator\Expression\MySQL\Date\test;

use PHPUnit\Framework\TestCase;
use rain1\ConditionBuilder\Expression\MySQL\Date\DateAdd;

class DateAddTest extends TestCase
{

public function testConstructor()
{
$date = new DateAdd("2019-01-01", 3, DateAdd::UNIT_DAY);

self::assertEquals("DATE_ADD(\"2019-01-01\", INTERVAL 3 DAY)", "$date");
}

public function testConstants()
{
self::assertEquals("SECOND", DateAdd::UNIT_SECOND);
self::assertEquals("MINUTE", DateAdd::UNIT_MINUTE);
self::assertEquals("HOUR", DateAdd::UNIT_HOUR);
self::assertEquals("DAY", DateAdd::UNIT_DAY);
self::assertEquals("MONTH", DateAdd::UNIT_MONTH);
self::assertEquals("YEAR", DateAdd::UNIT_YEAR);
}

}
24 changes: 24 additions & 0 deletions test/Operator/Expression/MySQL/Date/DateTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace rain1\ConditionBuilder\Operator\Expression\MySQL\Date\test;

use PHPUnit\Framework\TestCase;
use rain1\ConditionBuilder\Expression\MySQL\Date\Date;

class DateTest extends TestCase
{

public function testConstructor()
{
$date = new Date("2019-01-01");

self::assertEquals("'2019-01-01'", "$date");
}

public function testNow()
{
self::assertEquals("NOW()", Date::now());
}


}
12 changes: 6 additions & 6 deletions test/Operator/IsEqualTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function testRightOperandArray() {
self::assertEquals([1,2,3], $isEqual->values());
}

public function testInEmptyArray() {
$isEqual = new IsEqual("a", []);

self::assertEquals("FALSE", $isEqual->build());
// self::assertEquals([], $isEqual->values());
}

public function testNot() {
$isEqual = new IsEqual("a","b");
Expand All @@ -49,12 +55,6 @@ public function testNotConfigured() {
$isEqual->build();
}

public function testNotConfiguredArray() {
$this->expectException(Exception::class);
$isEqual = new IsEqual("a",[]);
$isEqual->build();
}

public function testExpression() {
$isEqual = new IsEqual("a", new Expression("NOW()"));
self::assertEquals("a = NOW()", $isEqual->build());
Expand Down

0 comments on commit 881b24a

Please sign in to comment.