Added some basic tests for uploading (title validation tests for now)
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Sat, 20 Mar 2010 22:41:45 +0000 (22:41 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Sat, 20 Mar 2010 22:41:45 +0000 (22:41 +0000)
maintenance/tests/UploadTest.php [new file with mode: 0644]
maintenance/tests/phpunit.xml

diff --git a/maintenance/tests/UploadTest.php b/maintenance/tests/UploadTest.php
new file mode 100644 (file)
index 0000000..152525c
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/**
+ * @group Upload
+ */
+class UploadTest extends PHPUnit_Framework_TestCase {
+       protected $upload;
+       
+
+       function setUp() {
+               parent::setup();
+               $this->upload = new UploadTestHandler;  
+       }
+       
+       /**
+        * Test various forms of valid and invalid titles that can be supplied.
+        */
+       public function testTitleValidation() {
+
+               
+               /* Test a valid title */
+               $this->assertUploadTitleAndCode( 'ValidTitle.jpg', 
+                       'ValidTitle.jpg', UploadTestHandler::OK,
+                       'upload valid title' );
+                       
+               /* A title with a slash */
+               $this->assertUploadTitleAndCode( 'A/B.jpg',
+                       'B.jpg', UploadTestHandler::OK,
+                       'upload title with slash' );
+               
+               /* A title with illegal char */
+               $this->assertUploadTitleAndCode( 'A:B.jpg',
+                       'A-B.jpg', UploadTestHandler::OK,
+                       'upload title with colon' );
+                       
+               /* A title without extension */
+               $this->assertUploadTitleAndCode( 'A',
+                       null, UploadTestHandler::FILETYPE_MISSING,
+                       'upload title without extension' );
+               
+               /* A title with no basename */
+               $this->assertUploadTitleAndCode( '.A',
+                       null, UploadTestHandler::MIN_LENGTH_PARTNAME,
+                       'upload title without basename' );
+                       
+       }
+       /**
+        * Helper function for testTitleValidation. First checks the return code 
+        * of UploadBase::getTitle() and then the actual returned titl
+        */
+       private function assertUploadTitleAndCode( $srcFilename, $dstFilename, $code, $msg ) {
+               /* Check the result code */
+               $this->assertEquals( $code,
+                       $this->upload->testTitleValidation( $srcFilename ),
+                       "$msg code" );
+               
+               /* If we expect a valid title, check the title itself. */
+               if ( $code == UploadTestHandler::OK ) {
+                       $this->assertEquals( $dstFilename,
+                               $this->upload->getTitle()->getText(),
+                               "$msg text" );
+               }
+       }
+       
+       /**
+        * Test the upload verification functions
+        */
+       public function testVerifyUpload() {
+               /* Setup with zero file size */
+               $this->upload->initializePathInfo( '', '', 0 );
+               $result = $this->upload->verifyUpload();
+               $this->assertEquals( UploadTestHandler::EMPTY_FILE,
+                       $result['status'], 
+                       'upload empty file' );
+       }
+
+}
+
+class UploadTestHandler extends UploadBase {
+               public function initializeFromRequest( &$request ) {}
+               public function testTitleValidation( $name ) {
+                       $this->mTitle = false;
+                       $this->mDesiredDestName = $name;
+                       $this->getTitle();
+                       return $this->mTitleError;
+               }
+
+
+}
\ No newline at end of file
index 279a4bb..11b6b0e 100644 (file)
@@ -18,6 +18,7 @@
     <file>SiteConfigurationTest.php</file>
     <file>TimeAdjustTest.php</file>
     <file>TitleTest.php</file>
+    <file>UploadTest.php</file>
     <file>XmlTest.php</file>
   </testsuite>
   <groups>