gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/MediaWiki/Hooks/FileUploadIntegrationTest.php

135 lines
3.5 KiB
PHP

<?php
namespace SMW\Tests\Integration\MediaWiki\Hooks;
use SMW\DIWikiPage;
use SMW\Localizer\Localizer;
use SMW\Tests\SMWIntegrationTestCase;
/**
* @group SMW
* @group SMWExtension
*
* @group semantic-mediawiki-integration
* @group Database
* @group mediawiki-database
*
* @group medium
*
* @license GPL-2.0-or-later
* @since 2.1
*
* @author mwjames
*/
class FileUploadIntegrationTest extends SMWIntegrationTestCase {
private $mwHooksHandler;
private $fixturesFileProvider;
private $semanticDataValidator;
private $pageEditor;
protected function setUp(): void {
parent::setUp();
$utilityFactory = $this->testEnvironment->getUtilityFactory();
$this->fixturesFileProvider = $utilityFactory->newFixturesFactory()->newFixturesFileProvider();
$this->semanticDataValidator = $utilityFactory->newValidatorFactory()->newSemanticDataValidator();
$this->pageEditor = $utilityFactory->newPageEditor();
$this->mwHooksHandler = $utilityFactory->newMwHooksHandler();
$this->mwHooksHandler->deregisterListedHooks();
$this->testEnvironment->withConfiguration( [
'smwgPageSpecialProperties' => [ '_MEDIA', '_MIME' ],
'smwgNamespacesWithSemanticLinks' => [ NS_MAIN => true, NS_FILE => true ],
'smwgMainCacheType' => 'hash',
] );
$this->testEnvironment->withConfiguration( [
'wgEnableUploads' => true,
'wgFileExtensions' => [ 'txt' ],
'wgVerifyMimeType' => true
] );
$this->mwHooksHandler->register(
'FileUpload',
$this->mwHooksHandler->getHookRegistry()->getHandlerFor( 'FileUpload' )
);
$this->mwHooksHandler->register(
'InternalParseBeforeLinks',
$this->mwHooksHandler->getHookRegistry()->getHandlerFor( 'InternalParseBeforeLinks' )
);
$this->mwHooksHandler->register(
'LinksUpdateComplete',
$this->mwHooksHandler->getHookRegistry()->getHandlerFor( 'LinksUpdateComplete' )
);
$this->getStore()->setup( false );
}
protected function tearDown(): void {
$this->mwHooksHandler->restoreListedHooks();
$this->testEnvironment->tearDown();
parent::tearDown();
}
public function testFileUploadForDummyTextFile() {
Localizer::getInstance()->clear();
$subject = new DIWikiPage( 'Foo.txt', NS_FILE );
$fileNS = Localizer::getInstance()->getNsText( NS_FILE );
$dummyTextFile = $this->fixturesFileProvider->newUploadForDummyTextFile( 'Foo.txt' );
$this->assertTrue(
$dummyTextFile->doUpload( '[[HasFile::File:Foo.txt]]' )
);
$this->testEnvironment->executePendingDeferredUpdates();
$expected = [
'propertyCount' => 4,
'propertyKeys' => [ 'HasFile', '_MEDIA', '_MIME', '_SKEY' ],
'propertyValues' => [ "$fileNS:Foo.txt", 'TEXT', 'text/plain', 'Foo.txt' ]
];
$this->semanticDataValidator->assertThatPropertiesAreSet(
$expected,
$this->getStore()->getSemanticData( $subject )
);
}
/**
* @depends testFileUploadForDummyTextFile
*/
public function testReUploadDummyTextFileToEditFilePage() {
$subject = new DIWikiPage( 'Foo.txt', NS_FILE );
$dummyTextFile = $this->fixturesFileProvider->newUploadForDummyTextFile( 'Foo.txt' );
$dummyTextFile->doUpload();
$this->testEnvironment->executePendingDeferredUpdates();
$this->pageEditor
->editPage( $subject->getTitle() )
->doEdit( '[[Ichi::Maru|Kyū]]' );
// File page content is kept from the initial upload
$expected = [
'propertyCount' => 4,
'propertyKeys' => [ '_MEDIA', '_MIME', '_SKEY', 'Ichi' ],
'propertyValues' => [ 'TEXT', 'text/plain', 'Foo.txt', 'Maru' ]
];
$this->semanticDataValidator->assertThatPropertiesAreSet(
$expected,
$this->getStore()->getSemanticData( $subject )
);
}
}