forked from doctrine/DoctrineBundle
/
DropDatabaseDoctrineTest.php
120 lines (98 loc) · 3.91 KB
/
DropDatabaseDoctrineTest.php
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
115
116
117
118
119
120
<?php
namespace Doctrine\Bundle\DoctrineBundle\Tests\Command;
use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;
use PHPUnit\Framework\TestCase;
use PHPUnit_Framework_MockObject_MockObject;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Tester\CommandTester;
class DropDatabaseDoctrineTest extends TestCase
{
public function testExecute()
{
$connectionName = 'default';
$dbName = 'test';
$params = [
'url' => 'sqlite:///' . sys_get_temp_dir() . '/test.db',
'path' => sys_get_temp_dir() . '/' . $dbName,
'driver' => 'pdo_sqlite',
];
$container = $this->getMockContainer($connectionName, $params);
$application = new Application();
$application->add(new DropDatabaseDoctrineCommand($container->get('doctrine')));
$command = $application->find('doctrine:database:drop');
$commandTester = new CommandTester($command);
$commandTester->execute(
array_merge(['command' => $command->getName(), '--force' => true])
);
$this->assertContains(
sprintf(
'Dropped database %s for connection named %s',
sys_get_temp_dir() . '/' . $dbName,
$connectionName
),
$commandTester->getDisplay()
);
}
public function testExecuteWithoutOptionForceWillFailWithAttentionMessage()
{
$connectionName = 'default';
$dbName = 'test';
$params = [
'path' => sys_get_temp_dir() . '/' . $dbName,
'driver' => 'pdo_sqlite',
];
$container = $this->getMockContainer($connectionName, $params);
$application = new Application();
$application->add(new DropDatabaseDoctrineCommand($container->get('doctrine')));
$command = $application->find('doctrine:database:drop');
$commandTester = new CommandTester($command);
$commandTester->execute(
array_merge(['command' => $command->getName()])
);
$this->assertContains(
sprintf(
'Would drop the database %s for connection named %s.',
sys_get_temp_dir() . '/' . $dbName,
$connectionName
),
$commandTester->getDisplay()
);
$this->assertContains('Please run the operation with --force to execute', $commandTester->getDisplay());
}
/**
* @param string $connectionName Connection name
* @param array|null $params Connection parameters
*
* @return PHPUnit_Framework_MockObject_MockObject
*/
private function getMockContainer($connectionName, $params = null)
{
// Mock the container and everything you'll need here
$mockDoctrine = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')
->getMock();
$mockDoctrine->expects($this->any())
->method('getDefaultConnectionName')
->withAnyParameters()
->willReturn($connectionName);
$mockConnection = $this->getMockBuilder('Doctrine\DBAL\Connection')
->disableOriginalConstructor()
->setMethods(['getParams'])
->getMockForAbstractClass();
$mockConnection->expects($this->any())
->method('getParams')
->withAnyParameters()
->willReturn($params);
$mockDoctrine->expects($this->any())
->method('getConnection')
->withAnyParameters()
->willReturn($mockConnection);
$mockContainer = $this->getMockBuilder('Symfony\Component\DependencyInjection\Container')
->setMethods(['get'])
->getMock();
$mockContainer->expects($this->any())
->method('get')
->with('doctrine')
->willReturn($mockDoctrine);
return $mockContainer;
}
}