-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathExecutableQueryObject.phpt
More file actions
114 lines (86 loc) · 2.52 KB
/
ExecutableQueryObject.phpt
File metadata and controls
114 lines (86 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php declare(strict_types = 1);
use Contributte\Nextras\Orm\QueryObject\ExecutableQueryObject;
use Contributte\Tester\Toolkit;
use Nextras\Dbal\Connection;
use Nextras\Dbal\QueryBuilder\QueryBuilder;
use Nextras\Dbal\Result\Result;
use Tester\Assert;
require_once __DIR__ . '/../bootstrap.php';
/**
* Test ExecutableQueryObject
*/
class TestExecutableQueryObject extends ExecutableQueryObject
{
public function doQuery(QueryBuilder $builder): QueryBuilder
{
return $builder->select('*')->from('[test_table]');
}
}
/**
* Test ExecutableQueryObject with custom postResult
*/
class TestExecutableQueryObjectWithPostResult extends ExecutableQueryObject
{
private bool $postResultCalled = false;
public function doQuery(QueryBuilder $builder): QueryBuilder
{
return $builder->select('[id]')->from('[users]');
}
public function postResult(Result $result): Result
{
$this->postResultCalled = true;
return parent::postResult($result);
}
public function wasPostResultCalled(): bool
{
return $this->postResultCalled;
}
}
// Test: ExecutableQueryObject builds query via fetch method
Toolkit::test(static function (): void {
$connection = Mockery::mock(Connection::class);
$queryBuilder = Mockery::mock(QueryBuilder::class);
$queryBuilder->shouldReceive('select')
->with('*')
->once()
->andReturnSelf();
$queryBuilder->shouldReceive('from')
->with('[test_table]')
->once()
->andReturnSelf();
$qo = new TestExecutableQueryObject($connection);
$result = $qo->fetch($queryBuilder);
Assert::type(QueryBuilder::class, $result);
Mockery::close();
});
// Test: ExecutableQueryObject execute method uses connection
Toolkit::test(static function (): void {
$connection = Mockery::mock(Connection::class);
$queryBuilder = Mockery::mock(QueryBuilder::class);
$result = Mockery::mock(Result::class);
$queryBuilder->shouldReceive('select')
->with('*')
->once()
->andReturnSelf();
$queryBuilder->shouldReceive('from')
->with('[test_table]')
->once()
->andReturnSelf();
$queryBuilder->shouldReceive('getQuerySql')
->once()
->andReturn('SELECT * FROM test_table');
$queryBuilder->shouldReceive('getQueryParameters')
->once()
->andReturn([]);
$connection->shouldReceive('createQueryBuilder')
->once()
->andReturn($queryBuilder);
$connection->shouldReceive('queryArgs')
->with('SELECT * FROM test_table', [])
->once()
->andReturn($result);
$qo = new TestExecutableQueryObject($connection);
$executeResult = $qo->execute();
Assert::type(Result::class, $executeResult);
Mockery::close();
});