summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php')
-rw-r--r--www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php56
1 files changed, 56 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php b/www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php
new file mode 100644
index 00000000..b0c1c8f1
--- /dev/null
+++ b/www/wiki/tests/phpunit/structure/DatabaseIntegrationTest.php
@@ -0,0 +1,56 @@
+<?php
+
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\Database;
+
+/**
+ * @group Database
+ */
+class DatabaseIntegrationTest extends MediaWikiTestCase {
+ /**
+ * @var Database
+ */
+ protected $db;
+
+ private $functionTest = false;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->db = wfGetDB( DB_MASTER );
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+ if ( $this->functionTest ) {
+ $this->dropFunctions();
+ $this->functionTest = false;
+ }
+ $this->db->restoreFlags( IDatabase::RESTORE_INITIAL );
+ }
+
+ public function testStoredFunctions() {
+ if ( !in_array( wfGetDB( DB_MASTER )->getType(), [ 'mysql', 'postgres' ] ) ) {
+ $this->markTestSkipped( 'MySQL or Postgres required' );
+ }
+ global $IP;
+ $this->dropFunctions();
+ $this->functionTest = true;
+ $this->assertTrue(
+ $this->db->sourceFile( "$IP/tests/phpunit/data/db/{$this->db->getType()}/functions.sql" )
+ );
+ $res = $this->db->query( 'SELECT mw_test_function() AS test', __METHOD__ );
+ $this->assertEquals( 42, $res->fetchObject()->test );
+ }
+
+ private function dropFunctions() {
+ $this->db->query( 'DROP FUNCTION IF EXISTS mw_test_function'
+ . ( $this->db->getType() == 'postgres' ? '()' : '' )
+ );
+ }
+
+ public function testUnknownTableCorruptsResults() {
+ $res = $this->db->select( 'page', '*', [ 'page_id' => 1 ] );
+ $this->assertFalse( $this->db->tableExists( 'foobarbaz' ) );
+ $this->assertInternalType( 'int', $res->numRows() );
+ }
+}