-
Notifications
You must be signed in to change notification settings - Fork 11.3k
/
Copy pathDatabaseMigrationRepositoryTest.php
executable file
·121 lines (103 loc) · 5.43 KB
/
DatabaseMigrationRepositoryTest.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
121
<?php
namespace Illuminate\Tests\Database;
use Closure;
use Illuminate\Database\Connection;
use Illuminate\Database\ConnectionResolverInterface;
use Illuminate\Database\Migrations\DatabaseMigrationRepository;
use Illuminate\Support\Collection;
use Mockery as m;
use PHPUnit\Framework\TestCase;
use stdClass;
class DatabaseMigrationRepositoryTest extends TestCase
{
protected function tearDown(): void
{
m::close();
}
public function testGetRanMigrationsListMigrationsByPackage()
{
$repo = $this->getRepository();
$query = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('table')->once()->with('migrations')->andReturn($query);
$query->shouldReceive('orderBy')->once()->with('batch', 'asc')->andReturn($query);
$query->shouldReceive('orderBy')->once()->with('migration', 'asc')->andReturn($query);
$query->shouldReceive('pluck')->once()->with('migration')->andReturn(new Collection(['bar']));
$query->shouldReceive('useWritePdo')->once()->andReturn($query);
$this->assertEquals(['bar'], $repo->getRan());
}
public function testGetLastMigrationsGetsAllMigrationsWithTheLatestBatchNumber()
{
$repo = $this->getMockBuilder(DatabaseMigrationRepository::class)->onlyMethods(['getLastBatchNumber'])->setConstructorArgs([
$resolver = m::mock(ConnectionResolverInterface::class), 'migrations',
])->getMock();
$repo->expects($this->once())->method('getLastBatchNumber')->willReturn(1);
$query = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('table')->once()->with('migrations')->andReturn($query);
$query->shouldReceive('where')->once()->with('batch', 1)->andReturn($query);
$query->shouldReceive('orderBy')->once()->with('migration', 'desc')->andReturn($query);
$query->shouldReceive('get')->once()->andReturn(new Collection(['foo']));
$query->shouldReceive('useWritePdo')->once()->andReturn($query);
$this->assertEquals(['foo'], $repo->getLast());
}
public function testLogMethodInsertsRecordIntoMigrationTable()
{
$repo = $this->getRepository();
$query = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('table')->once()->with('migrations')->andReturn($query);
$query->shouldReceive('insert')->once()->with(['migration' => 'bar', 'batch' => 1]);
$query->shouldReceive('useWritePdo')->once()->andReturn($query);
$repo->log('bar', 1);
}
public function testDeleteMethodRemovesAMigrationFromTheTable()
{
$repo = $this->getRepository();
$query = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('table')->once()->with('migrations')->andReturn($query);
$query->shouldReceive('where')->once()->with('migration', 'foo')->andReturn($query);
$query->shouldReceive('delete')->once();
$query->shouldReceive('useWritePdo')->once()->andReturn($query);
$migration = (object) ['migration' => 'foo'];
$repo->delete($migration);
}
public function testGetNextBatchNumberReturnsLastBatchNumberPlusOne()
{
$repo = $this->getMockBuilder(DatabaseMigrationRepository::class)->onlyMethods(['getLastBatchNumber'])->setConstructorArgs([
m::mock(ConnectionResolverInterface::class), 'migrations',
])->getMock();
$repo->expects($this->once())->method('getLastBatchNumber')->willReturn(1);
$this->assertEquals(2, $repo->getNextBatchNumber());
}
public function testGetLastBatchNumberReturnsMaxBatch()
{
$repo = $this->getRepository();
$query = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('table')->once()->with('migrations')->andReturn($query);
$query->shouldReceive('max')->once()->andReturn(1);
$query->shouldReceive('useWritePdo')->once()->andReturn($query);
$this->assertEquals(1, $repo->getLastBatchNumber());
}
public function testCreateRepositoryCreatesProperDatabaseTable()
{
$repo = $this->getRepository();
$schema = m::mock(stdClass::class);
$connectionMock = m::mock(Connection::class);
$repo->getConnectionResolver()->shouldReceive('connection')->with(null)->andReturn($connectionMock);
$repo->getConnection()->shouldReceive('getSchemaBuilder')->once()->andReturn($schema);
$schema->shouldReceive('create')->once()->with('migrations', m::type(Closure::class));
$repo->createRepository();
}
protected function getRepository()
{
return new DatabaseMigrationRepository(m::mock(ConnectionResolverInterface::class), 'migrations');
}
}