-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathQueryObjectContextAwareManager.phpt
More file actions
96 lines (73 loc) · 2.62 KB
/
QueryObjectContextAwareManager.phpt
File metadata and controls
96 lines (73 loc) · 2.62 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
<?php declare(strict_types = 1);
use Contributte\Nextras\Orm\QueryObject\Exception\InvalidObjectCreationException;
use Contributte\Nextras\Orm\QueryObject\QueryObject;
use Contributte\Nextras\Orm\QueryObject\QueryObjectContextAwareManager;
use Nette\DI\Container;
use Nextras\Dbal\Connection;
use Nextras\Dbal\QueryBuilder\QueryBuilder;
use Nextras\Dbal\Result\Result;
use Tester\Assert;
use Tests\Mocks\SimpleQueryObject;
require_once __DIR__ . '/../bootstrap.php';
test('QueryObjectContextAwareManager create returns QueryObject', function (): void {
$queryObject = new SimpleQueryObject();
$container = Mockery::mock(Container::class);
$container->shouldReceive('getByType')
->with(SimpleQueryObject::class)
->once()
->andReturn($queryObject);
$manager = new QueryObjectContextAwareManager($container);
$result = $manager->create(SimpleQueryObject::class);
Assert::type(QueryObject::class, $result);
Assert::same($queryObject, $result);
Mockery::close();
});
test('QueryObjectContextAwareManager create throws InvalidObjectCreationException for non-QueryObject', function (): void {
$nonQueryObject = new stdClass();
$container = Mockery::mock(Container::class);
$container->shouldReceive('getByType')
->with(stdClass::class)
->once()
->andReturn($nonQueryObject);
$manager = new QueryObjectContextAwareManager($container);
Assert::exception(function () use ($manager): void {
$manager->create(stdClass::class);
}, InvalidObjectCreationException::class);
Mockery::close();
});
test('QueryObjectContextAwareManager fetch returns Result', 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('[foobar]')
->once()
->andReturnSelf();
$queryBuilder->shouldReceive('getQuerySql')
->once()
->andReturn('SELECT * FROM foobar');
$queryBuilder->shouldReceive('getQueryParameters')
->once()
->andReturn([]);
$connection->shouldReceive('createQueryBuilder')
->once()
->andReturn($queryBuilder);
$connection->shouldReceive('queryArgs')
->with('SELECT * FROM foobar', [])
->once()
->andReturn($result);
$container = Mockery::mock(Container::class);
$container->shouldReceive('getByType')
->with(Connection::class)
->once()
->andReturn($connection);
$manager = new QueryObjectContextAwareManager($container);
$queryObject = new SimpleQueryObject();
$fetchResult = $manager->fetch($queryObject);
Assert::type(Result::class, $fetchResult);
Mockery::close();
});