Pass config dir as parameter to detection class
In order to properly test the mimetype function: * constructor takes path to configdir * Added unit tests for mimetype (only if vfsStream is available)
This commit is contained in:
parent
88fb389eab
commit
d276aebf40
|
@ -47,11 +47,16 @@ class Detection implements IMimeTypeDetector {
|
||||||
/** @var IURLGenerator */
|
/** @var IURLGenerator */
|
||||||
private $urlGenerator;
|
private $urlGenerator;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $configDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param IURLGenerator $urlGenerator
|
* @param IURLGenerator $urlGenerator
|
||||||
|
* @param string $configDir
|
||||||
*/
|
*/
|
||||||
public function __construct(IURLGenerator $urlGenerator) {
|
public function __construct(IURLGenerator $urlGenerator, $configDir) {
|
||||||
$this->urlGenerator = $urlGenerator;
|
$this->urlGenerator = $urlGenerator;
|
||||||
|
$this->configDir = $configDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -96,11 +101,11 @@ class Detection implements IMimeTypeDetector {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = file_get_contents(\OC::$configDir . '/mimetypealiases.dist.json');
|
$file = file_get_contents($this->configDir . '/mimetypealiases.dist.json');
|
||||||
$this->mimeTypeAlias = get_object_vars(json_decode($file));
|
$this->mimeTypeAlias = get_object_vars(json_decode($file));
|
||||||
|
|
||||||
if (file_exists(\OC::$configDir . '/mimetypealiases.json')) {
|
if (file_exists($this->configDir . '/mimetypealiases.json')) {
|
||||||
$custom = get_object_vars(json_decode(file_get_contents(\OC::$configDir . '/mimetypealiases.json')));
|
$custom = get_object_vars(json_decode(file_get_contents($this->configDir . '/mimetypealiases.json')));
|
||||||
$this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom);
|
$this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,12 +118,12 @@ class Detection implements IMimeTypeDetector {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dist = file_get_contents(\OC::$configDir . '/mimetypemapping.dist.json');
|
$dist = file_get_contents($this->configDir . '/mimetypemapping.dist.json');
|
||||||
$mimetypemapping = get_object_vars(json_decode($dist));
|
$mimetypemapping = get_object_vars(json_decode($dist));
|
||||||
|
|
||||||
//Check if need to load custom mappings
|
//Check if need to load custom mappings
|
||||||
if (file_exists(\OC::$configDir . '/mimetypemapping.json')) {
|
if (file_exists($this->configDir . '/mimetypemapping.json')) {
|
||||||
$custom = file_get_contents(\OC::$configDir . '/mimetypemapping.json');
|
$custom = file_get_contents($this->configDir . '/mimetypemapping.json');
|
||||||
$custom_mapping = get_object_vars(json_decode($custom));
|
$custom_mapping = get_object_vars(json_decode($custom));
|
||||||
$mimetypemapping = array_merge($mimetypemapping, $custom_mapping);
|
$mimetypemapping = array_merge($mimetypemapping, $custom_mapping);
|
||||||
}
|
}
|
||||||
|
|
|
@ -445,7 +445,9 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
return new \OC\Files\Mount\Manager();
|
return new \OC\Files\Mount\Manager();
|
||||||
});
|
});
|
||||||
$this->registerService('MimeTypeDetector', function(Server $c) {
|
$this->registerService('MimeTypeDetector', function(Server $c) {
|
||||||
return new \OC\Files\Type\Detection($c->getURLGenerator());
|
return new \OC\Files\Type\Detection(
|
||||||
|
$c->getURLGenerator(),
|
||||||
|
\OC::$configDir);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ use \OC\Files\Type\Detection;
|
||||||
class DetectionTest extends \Test\TestCase {
|
class DetectionTest extends \Test\TestCase {
|
||||||
|
|
||||||
public function testDetect() {
|
public function testDetect() {
|
||||||
$detection = new Detection(\OC::$server->getURLGenerator());
|
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
|
||||||
$dir = \OC::$SERVERROOT.'/tests/data';
|
$dir = \OC::$SERVERROOT.'/tests/data';
|
||||||
|
|
||||||
$result = $detection->detect($dir."/");
|
$result = $detection->detect($dir."/");
|
||||||
|
@ -51,7 +51,7 @@ class DetectionTest extends \Test\TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetSecureMimeType() {
|
public function testGetSecureMimeType() {
|
||||||
$detection = new Detection(\OC::$server->getURLGenerator());
|
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
|
||||||
|
|
||||||
$result = $detection->getSecureMimeType('image/svg+xml');
|
$result = $detection->getSecureMimeType('image/svg+xml');
|
||||||
$expected = 'text/plain';
|
$expected = 'text/plain';
|
||||||
|
@ -63,7 +63,7 @@ class DetectionTest extends \Test\TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDetectPath() {
|
public function testDetectPath() {
|
||||||
$detection = new Detection(\OC::$server->getURLGenerator());
|
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
|
||||||
|
|
||||||
$this->assertEquals('text/plain', $detection->detectPath('foo.txt'));
|
$this->assertEquals('text/plain', $detection->detectPath('foo.txt'));
|
||||||
$this->assertEquals('image/png', $detection->detectPath('foo.png'));
|
$this->assertEquals('image/png', $detection->detectPath('foo.png'));
|
||||||
|
@ -78,11 +78,206 @@ class DetectionTest extends \Test\TestCase {
|
||||||
$this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
|
$this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
|
||||||
}
|
}
|
||||||
|
|
||||||
$detection = new Detection(\OC::$server->getURLGenerator());
|
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
|
||||||
|
|
||||||
$result = $detection->detectString("/data/data.tar.gz");
|
$result = $detection->detectString("/data/data.tar.gz");
|
||||||
$expected = 'text/plain; charset=us-ascii';
|
$expected = 'text/plain; charset=us-ascii';
|
||||||
$this->assertEquals($expected, $result);
|
$this->assertEquals($expected, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testMimeTypeIcon() {
|
||||||
|
if (!class_exists('org\\bovigo\\vfs\\vfsStream')) {
|
||||||
|
$this->markTestSkipped('Pacakge vfsStream not installed');
|
||||||
|
}
|
||||||
|
$confDir = \org\bovigo\vfs\vfsStream::setup();
|
||||||
|
$mimetypealiases_dist = \org\bovigo\vfs\vfsStream::newFile('mimetypealiases.dist.json')->at($confDir);
|
||||||
|
|
||||||
|
//Empty alias file
|
||||||
|
$mimetypealiases_dist->setContent(json_encode([], JSON_FORCE_OBJECT));
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test dir mimetype
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/folder.png'))
|
||||||
|
->willReturn('folder.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('dir');
|
||||||
|
$this->assertEquals('folder.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test dir-shareed mimetype
|
||||||
|
*/
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/folder-shared.png'))
|
||||||
|
->willReturn('folder-shared.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('dir-shared');
|
||||||
|
$this->assertEquals('folder-shared.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test dir external
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/folder-external.png'))
|
||||||
|
->willReturn('folder-external.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('dir-external');
|
||||||
|
$this->assertEquals('folder-external.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test complete mimetype
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/my-type.png'))
|
||||||
|
->willReturn('my-type.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('my-type');
|
||||||
|
$this->assertEquals('my-type.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test subtype
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->exactly(2))
|
||||||
|
->method('imagePath')
|
||||||
|
->withConsecutive(
|
||||||
|
[$this->equalTo('core'), $this->equalTo('filetypes/my-type.png')],
|
||||||
|
[$this->equalTo('core'), $this->equalTo('filetypes/my.png')]
|
||||||
|
)
|
||||||
|
->will($this->returnCallback(
|
||||||
|
function($appName, $file) {
|
||||||
|
if ($file === 'filetypes/my.png') {
|
||||||
|
return 'my.svg';
|
||||||
|
}
|
||||||
|
throw new \RuntimeException();
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('my-type');
|
||||||
|
$this->assertEquals('my.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test default mimetype
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->exactly(3))
|
||||||
|
->method('imagePath')
|
||||||
|
->withConsecutive(
|
||||||
|
[$this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png')],
|
||||||
|
[$this->equalTo('core'), $this->equalTo('filetypes/foo.png')],
|
||||||
|
[$this->equalTo('core'), $this->equalTo('filetypes/file.png')]
|
||||||
|
)
|
||||||
|
->will($this->returnCallback(
|
||||||
|
function($appName, $file) {
|
||||||
|
if ($file === 'filetypes/file.png') {
|
||||||
|
return 'file.svg';
|
||||||
|
}
|
||||||
|
throw new \RuntimeException();
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('foo-bar');
|
||||||
|
$this->assertEquals('file.svg', $mimeType);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test chaching
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png'))
|
||||||
|
->willReturn('foo-bar.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('foo-bar');
|
||||||
|
$this->assertEquals('foo-bar.svg', $mimeType);
|
||||||
|
$mimeType = $detection->mimeTypeIcon('foo-bar');
|
||||||
|
$this->assertEquals('foo-bar.svg', $mimeType);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test aliases
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Put alias
|
||||||
|
$mimetypealiases_dist->setContent(json_encode(['foo' => 'foobar/baz'], JSON_FORCE_OBJECT));
|
||||||
|
|
||||||
|
//Mock UrlGenerator
|
||||||
|
$urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
//Only call the url generator once
|
||||||
|
$urlGenerator->expects($this->once())
|
||||||
|
->method('imagePath')
|
||||||
|
->with($this->equalTo('core'), $this->equalTo('filetypes/foobar-baz.png'))
|
||||||
|
->willReturn('foobar-baz.svg');
|
||||||
|
|
||||||
|
$detection = new Detection($urlGenerator, $confDir->url());
|
||||||
|
$mimeType = $detection->mimeTypeIcon('foo');
|
||||||
|
$this->assertEquals('foobar-baz.svg', $mimeType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue