mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 00:32:29 -04:00
Merge pull request #56919 from nextcloud/jtr/fix-mime-detection-tests
fix(files/type): preserve numeric keys (follow-up)
This commit is contained in:
commit
8c90d4f822
2 changed files with 63 additions and 15 deletions
|
|
@ -97,7 +97,7 @@ class Detection implements IMimeTypeDetector {
|
|||
if (file_exists($this->customConfigDir . '/' . $fileName)) {
|
||||
$custom = json_decode(file_get_contents($this->customConfigDir . '/' . $fileName), true);
|
||||
if (json_last_error() === JSON_ERROR_NONE) {
|
||||
$definitions = array_merge($definitions, $custom);
|
||||
$definitions = array_replace($definitions, $custom);
|
||||
} else {
|
||||
$this->logger->warning('Failed to parse ' . $fileName . ': ' . json_last_error_msg());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,24 +117,72 @@ class DetectionTest extends \Test\TestCase {
|
|||
*/
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('dataMimeTypeCustom')]
|
||||
public function testDetectMimeTypeCustom(string $ext, string $mime): void {
|
||||
$confDir = sys_get_temp_dir();
|
||||
file_put_contents($confDir . '/mimetypemapping.dist.json', json_encode([]));
|
||||
$tmpDir = sys_get_temp_dir() . '/nc-detect-' . uniqid('', true);
|
||||
mkdir($tmpDir, 0700);
|
||||
|
||||
/** @var IURLGenerator $urlGenerator */
|
||||
$urlGenerator = $this->getMockBuilder(IURLGenerator::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
try {
|
||||
// Create a default / shipped mapping file (dist)
|
||||
file_put_contents($tmpDir . '/mimetypemapping.dist.json', json_encode([]));
|
||||
|
||||
/** @var LoggerInterface $logger */
|
||||
$logger = $this->createMock(LoggerInterface::class);
|
||||
// Create new custom mapping file that should be picked up by Detection
|
||||
file_put_contents($tmpDir . '/mimetypemapping.json', json_encode([$ext => [$mime]]));
|
||||
|
||||
// Create new mapping file
|
||||
file_put_contents($confDir . '/mimetypemapping.dist.json', json_encode([$ext => [$mime]]));
|
||||
/** @var IURLGenerator $urlGenerator */
|
||||
$urlGenerator = $this->getMockBuilder(IURLGenerator::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$detection = new Detection($urlGenerator, $logger, $confDir, $confDir);
|
||||
$mappings = $detection->getAllMappings();
|
||||
$this->assertArrayHasKey($ext, $mappings);
|
||||
$this->assertEquals($mime, $detection->detectPath('foo.' . $ext));
|
||||
/** @var LoggerInterface $logger */
|
||||
$logger = $this->createMock(LoggerInterface::class);
|
||||
|
||||
$detection = new Detection($urlGenerator, $logger, $tmpDir, $tmpDir);
|
||||
$mappings = $detection->getAllMappings();
|
||||
|
||||
$this->assertArrayHasKey($ext, $mappings);
|
||||
$this->assertEquals($mime, $detection->detectPath('foo.' . $ext));
|
||||
} finally {
|
||||
// cleanup
|
||||
@unlink($tmpDir . '/mimetypemapping.json');
|
||||
@unlink($tmpDir . '/mimetypemapping.dist.json');
|
||||
@rmdir($tmpDir);
|
||||
}
|
||||
}
|
||||
|
||||
public function testDetectMimeTypePreservesLeadingZeroKeys(): void {
|
||||
$tmpDir = sys_get_temp_dir() . '/nc-detect-' . uniqid();
|
||||
mkdir($tmpDir, 0700);
|
||||
try {
|
||||
// Create a default / shipped mapping file (dist)
|
||||
file_put_contents($tmpDir . '/mimetypemapping.dist.json', json_encode([]));
|
||||
|
||||
// Create new custom mapping file with potentially problematic keys
|
||||
$mappings = [
|
||||
'001' => ['application/x-zeroone', null],
|
||||
'1' => ['application/x-one', null],
|
||||
];
|
||||
file_put_contents($tmpDir . '/mimetypemapping.json', json_encode($mappings));
|
||||
|
||||
/** @var IURLGenerator $urlGenerator */
|
||||
$urlGenerator = $this->getMockBuilder(IURLGenerator::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
/** @var LoggerInterface $logger */
|
||||
$logger = $this->createMock(LoggerInterface::class);
|
||||
|
||||
$detection = new Detection($urlGenerator, $logger, $tmpDir, $tmpDir);
|
||||
$mappings = $detection->getAllMappings();
|
||||
|
||||
$this->assertArrayHasKey('001', $mappings, 'Expected mapping to contain key "001"');
|
||||
$this->assertArrayHasKey('1', $mappings, 'Expected mapping to contain key "1"');
|
||||
|
||||
$this->assertEquals('application/x-zeroone', $detection->detectPath('foo.001'));
|
||||
$this->assertEquals('application/x-one', $detection->detectPath('foo.1'));
|
||||
} finally {
|
||||
@unlink($tmpDir . '/mimetypemapping.json');
|
||||
@unlink($tmpDir . '/mimetypemapping.dist.json');
|
||||
@rmdir($tmpDir);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dataGetSecureMimeType(): array {
|
||||
|
|
|
|||
Loading…
Reference in a new issue