mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-25 14:58:40 +00:00
Give a bit better error messages in tests
This commit is contained in:
@@ -33,6 +33,6 @@ class Subquery extends Node
|
|||||||
|
|
||||||
public function __toString(): string
|
public function __toString(): string
|
||||||
{
|
{
|
||||||
return ($this->prohibited ? '-' : '') . '(' . implode(' ', array_map(fn($node) => (string)$node, $this->nodes)) . ')';
|
return ($this->prohibited ? '-' : '') . '[' . implode(' ', array_map(fn($node) => (string)$node, $this->nodes)) . ']';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,7 @@ abstract class AbstractQueryParserInterfaceParseQueryTest extends TestCase
|
|||||||
'expected' => []
|
'expected' => []
|
||||||
],
|
],
|
||||||
'simple word' => [
|
'simple word' => [
|
||||||
'query' => 'grocaeries',
|
'query' => 'groceries',
|
||||||
'expected' => [new Word('groceries')]
|
'expected' => [new Word('groceries')]
|
||||||
],
|
],
|
||||||
'prohibited word' => [
|
'prohibited word' => [
|
||||||
@@ -196,7 +196,13 @@ abstract class AbstractQueryParserInterfaceParseQueryTest extends TestCase
|
|||||||
|
|
||||||
private function assertNodesMatch(array $expected, array $actual): void
|
private function assertNodesMatch(array $expected, array $actual): void
|
||||||
{
|
{
|
||||||
$this->assertCount(count($expected), $actual);
|
$message = sprintf(
|
||||||
|
"Expected: %s\nActual: %s",
|
||||||
|
$this->formatNodes($expected),
|
||||||
|
$this->formatNodes($actual)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertCount(count($expected), $actual, $message);
|
||||||
|
|
||||||
foreach ($expected as $index => $expectedNode) {
|
foreach ($expected as $index => $expectedNode) {
|
||||||
$actualNode = $actual[$index];
|
$actualNode = $actual[$index];
|
||||||
@@ -206,8 +212,10 @@ abstract class AbstractQueryParserInterfaceParseQueryTest extends TestCase
|
|||||||
|
|
||||||
private function assertNodeMatches(Node $expected, Node $actual): void
|
private function assertNodeMatches(Node $expected, Node $actual): void
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(get_class($expected), $actual);
|
$message = $this->formatAssertMessage($expected, $actual);
|
||||||
$this->assertEquals($expected->isProhibited(), $actual->isProhibited());
|
|
||||||
|
$this->assertInstanceOf(get_class($expected), $actual, $message);
|
||||||
|
$this->assertEquals($expected->isProhibited(), $actual->isProhibited(), $message);
|
||||||
|
|
||||||
match (get_class($expected)) {
|
match (get_class($expected)) {
|
||||||
Word::class => $this->assertWordMatches($expected, $actual),
|
Word::class => $this->assertWordMatches($expected, $actual),
|
||||||
@@ -220,15 +228,22 @@ abstract class AbstractQueryParserInterfaceParseQueryTest extends TestCase
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function assertWordMatches(Word $expected, Word $actual): void
|
private function assertWordMatches(Word $expected, Word $actual): void
|
||||||
{
|
{
|
||||||
$this->assertEquals($expected->getValue(), $actual->getValue());
|
$message = $this->formatAssertMessage($expected, $actual); // Using your implementation
|
||||||
|
$this->assertEquals($expected->getValue(), $actual->getValue(), $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function assertFieldMatches(Field $expected, Field $actual): void
|
private function assertFieldMatches(Field $expected, Field $actual): void
|
||||||
{
|
{
|
||||||
$this->assertEquals($expected->getOperator(), $actual->getOperator());
|
$message = sprintf(
|
||||||
$this->assertEquals($expected->getValue(), $actual->getValue());
|
"\nExpected field: %s\nActual field: %s",
|
||||||
|
$this->formatNode($expected),
|
||||||
|
$this->formatNode($actual)
|
||||||
|
);
|
||||||
|
$this->assertEquals($expected->getOperator(), $actual->getOperator(), $message);
|
||||||
|
$this->assertEquals($expected->getValue(), $actual->getValue(), $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function assertSubqueryMatches(Subquery $expected, Subquery $actual): void
|
private function assertSubqueryMatches(Subquery $expected, Subquery $actual): void
|
||||||
@@ -236,43 +251,30 @@ abstract class AbstractQueryParserInterfaceParseQueryTest extends TestCase
|
|||||||
$this->assertNodesMatch($expected->getNodes(), $actual->getNodes());
|
$this->assertNodesMatch($expected->getNodes(), $actual->getNodes());
|
||||||
}
|
}
|
||||||
|
|
||||||
private function assertIsWord(Node $node, string $expectedValue, bool $prohibited = false): void
|
private function formatAssertMessage(Node $expected, Node $actual): string
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(Word::class, $node);
|
return sprintf(
|
||||||
/** @var Word $node */
|
"\nExpected: %s\nActual: %s",
|
||||||
$this->assertEquals($expectedValue, $node->getValue());
|
$this->formatNode($expected),
|
||||||
$this->assertEquals($prohibited, $node->isProhibited());
|
$this->formatNode($actual)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function assertIsField(
|
private function formatNode(Node $node): string
|
||||||
Node $node,
|
|
||||||
string $expectedOperator,
|
|
||||||
string $expectedValue,
|
|
||||||
bool $prohibited = false
|
|
||||||
): void {
|
|
||||||
$this->assertInstanceOf(Field::class, $node);
|
|
||||||
/** @var Field $node */
|
|
||||||
$this->assertEquals($expectedOperator, $node->getOperator());
|
|
||||||
$this->assertEquals($expectedValue, $node->getValue());
|
|
||||||
$this->assertEquals($prohibited, $node->isProhibited());
|
|
||||||
}
|
|
||||||
|
|
||||||
private function assertIsSubquery(Node $node, array $expectedNodes, bool $prohibited = false): void
|
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(Subquery::class, $node);
|
return sprintf(
|
||||||
/** @var Subquery $node */
|
'%s(%s)',
|
||||||
$this->assertCount(count($expectedNodes), $node->getNodes());
|
basename(str_replace('\\', '/', get_class($node))),
|
||||||
$this->assertEquals($prohibited, $node->isProhibited());
|
$node->__toString()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($expectedNodes as $index => $expected) {
|
|
||||||
$actual = $node->getNodes()[$index];
|
private function formatNodes(array $nodes): string
|
||||||
if ($expected instanceof Word) {
|
{
|
||||||
$this->assertIsWord($actual, $expected->getValue(), $expected->isProhibited());
|
return '[' . implode(', ', array_map(
|
||||||
} elseif ($expected instanceof Field) {
|
fn(Node $node) => $this->formatNode($node),
|
||||||
$this->assertIsField($actual, $expected->getOperator(), $expected->getValue(), $expected->isProhibited());
|
$nodes
|
||||||
} elseif ($expected instanceof Subquery) {
|
)) . ']';
|
||||||
$this->assertIsSubquery($actual, $expected->getNodes(), $expected->isProhibited());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user