3 class FileBackendDBRepoWrapperTest
extends MediaWikiTestCase
{
4 protected $backendName = 'foo-backend';
5 protected $repoName = 'pureTestRepo';
8 * @dataProvider getBackendPathsProvider
9 * @covers FileBackendDBRepoWrapper::getBackendPaths
11 public function testGetBackendPaths(
19 list( $dbMock, $backendMock, $wrapperMock ) = $mocks;
21 $dbMock->expects( $dbReadsExpected )
22 ->method( 'selectField' )
23 ->will( $this->returnValue( $dbReturnValue ) );
25 $newPaths = $wrapperMock->getBackendPaths( [ $originalPath ], $latest );
33 public function getBackendPathsProvider() {
34 $prefix = 'mwstore://' . $this->backendName
. '/' . $this->repoName
;
35 $mocksForCaching = $this->getMocks();
42 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
43 $prefix . '-public/f/o/foobar.jpg',
44 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
45 'Public path translated correctly',
51 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
52 $prefix . '-public/f/o/foobar.jpg',
53 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
54 'LRU cache leveraged',
60 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
61 $prefix . '-public/f/o/foobar.jpg',
62 $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
69 '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
70 $prefix . '-deleted/f/o/foobar.jpg',
71 $prefix . '-original/f/o/o/foobar',
72 'Deleted path translated correctly',
79 $prefix . '-public/b/a/baz.jpg',
80 $prefix . '-public/b/a/baz.jpg',
81 'Path left untouched if no sha1 can be found',
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 ] ] );
108 [ $filenamePath => 'foo' ],
110 'File contents paths translated properly'
114 protected function getMocks() {
115 $dbMock = $this->getMockBuilder( 'DatabaseMysqli' )
116 ->disableOriginalClone()
117 ->disableOriginalConstructor()
120 $backendMock = $this->getMock( 'FSFileBackend',
123 'name' => $this->backendName
,
124 'wikiId' => wfWikiID()
127 $wrapperMock = $this->getMock( 'FileBackendDBRepoWrapper',
130 'backend' => $backendMock,
131 'repoName' => $this->repoName
,
132 'dbHandleFactory' => null
135 $wrapperMock->expects( $this->any() )->method( 'getDB' )->will( $this->returnValue( $dbMock ) );
137 return [ $dbMock, $backendMock, $wrapperMock ];