Merge "Added release notes for 'ContentHandler::runLegacyHooks' removal"
[mediawiki.git] / tests / phpunit / includes / filerepo / FileBackendDBRepoWrapperTest.php
blob6c93c79a4a7ea4ea4cb78c565d3c3bb4bbf9e077
1 <?php
3 class FileBackendDBRepoWrapperTest extends MediaWikiTestCase {
4 protected $backendName = 'foo-backend';
5 protected $repoName = 'pureTestRepo';
7 /**
8 * @dataProvider getBackendPathsProvider
9 * @covers FileBackendDBRepoWrapper::getBackendPaths
11 public function testGetBackendPaths(
12 $mocks,
13 $latest,
14 $dbReadsExpected,
15 $dbReturnValue,
16 $originalPath,
17 $expectedBackendPath,
18 $message ) {
19 list( $dbMock, $backendMock, $wrapperMock ) = $mocks;
21 $dbMock->expects( $dbReadsExpected )
22 ->method( 'selectField' )
23 ->will( $this->returnValue( $dbReturnValue ) );
25 $newPaths = $wrapperMock->getBackendPaths( [ $originalPath ], $latest );
27 $this->assertEquals(
28 $expectedBackendPath,
29 $newPaths[0],
30 $message );
33 public function getBackendPathsProvider() {
34 $prefix = 'mwstore://' . $this->backendName . '/' . $this->repoName;
35 $mocksForCaching = $this->getMocks();
37 return [
39 $mocksForCaching,
40 false,
41 $this->once(),
42 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
43 $prefix . '-public/f/o/foobar.jpg',
44 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
45 'Public path translated correctly',
48 $mocksForCaching,
49 false,
50 $this->never(),
51 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
52 $prefix . '-public/f/o/foobar.jpg',
53 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
54 'LRU cache leveraged',
57 $this->getMocks(),
58 true,
59 $this->once(),
60 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
61 $prefix . '-public/f/o/foobar.jpg',
62 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
63 'Latest obtained',
66 $this->getMocks(),
67 true,
68 $this->never(),
69 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
70 $prefix . '-deleted/f/o/foobar.jpg',
71 $prefix . '-original/f/o/o/foobar',
72 'Deleted path translated correctly',
75 $this->getMocks(),
76 true,
77 $this->once(),
78 null,
79 $prefix . '-public/b/a/baz.jpg',
80 $prefix . '-public/b/a/baz.jpg',
81 'Path left untouched if no sha1 can be found',
86 /**
87 * @covers FileBackendDBRepoWrapper::getFileContentsMulti
89 public function testGetFileContentsMulti() {
90 list( $dbMock, $backendMock, $wrapperMock ) = $this->getMocks();
92 $sha1Path = 'mwstore://' . $this->backendName . '/' . $this->repoName
93 . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9';
94 $filenamePath = 'mwstore://' . $this->backendName . '/' . $this->repoName
95 . '-public/f/o/foobar.jpg';
97 $dbMock->expects( $this->once() )
98 ->method( 'selectField' )
99 ->will( $this->returnValue( '96246614d75ba1703bdfd5d7660bb57407aaf5d9' ) );
101 $backendMock->expects( $this->once() )
102 ->method( 'getFileContentsMulti' )
103 ->will( $this->returnValue( [ $sha1Path => 'foo' ] ) );
105 $result = $wrapperMock->getFileContentsMulti( [ 'srcs' => [ $filenamePath ] ] );
107 $this->assertEquals(
108 [ $filenamePath => 'foo' ],
109 $result,
110 'File contents paths translated properly'
114 protected function getMocks() {
115 $dbMock = $this->getMockBuilder( 'DatabaseMysqli' )
116 ->disableOriginalClone()
117 ->disableOriginalConstructor()
118 ->getMock();
120 $backendMock = $this->getMock( 'FSFileBackend',
123 'name' => $this->backendName,
124 'wikiId' => wfWikiID()
125 ] ] );
127 $wrapperMock = $this->getMock( 'FileBackendDBRepoWrapper',
128 [ 'getDB' ],
130 'backend' => $backendMock,
131 'repoName' => $this->repoName,
132 'dbHandleFactory' => null
133 ] ] );
135 $wrapperMock->expects( $this->any() )->method( 'getDB' )->will( $this->returnValue( $dbMock ) );
137 return [ $dbMock, $backendMock, $wrapperMock ];