3 use Wikimedia\Rdbms\DatabaseDomain
;
6 * @covers Wikimedia\Rdbms\DatabaseDomain
8 class DatabaseDomainTest
extends PHPUnit\Framework\TestCase
{
10 use MediaWikiCoversValidator
;
11 use PHPUnit4And6Compat
;
13 public static function provideConstruct() {
16 [ 'foo', 'bar', 'baz_', 'foo-bar-baz_' ],
18 [ null, null, '', '' ],
19 'Invalid $database' =>
20 [ 0, 'bar', '', '', true ],
22 [ 'foo', 0, '', '', true ],
24 [ 'foo', 'bar', 0, '', true ],
26 [ 'foo-bar', 'baz', 'baa_', 'foo?hbar-baz-baa_' ],
28 [ 'foo?bar', 'baz', 'baa_', 'foo??bar-baz-baa_' ],
33 * @dataProvider provideConstruct
35 public function testConstruct( $db, $schema, $prefix, $id, $exception = false ) {
37 $this->setExpectedException( InvalidArgumentException
::class );
38 new DatabaseDomain( $db, $schema, $prefix );
42 $domain = new DatabaseDomain( $db, $schema, $prefix );
43 $this->assertInstanceOf( DatabaseDomain
::class, $domain );
44 $this->assertEquals( $db, $domain->getDatabase() );
45 $this->assertEquals( $schema, $domain->getSchema() );
46 $this->assertEquals( $prefix, $domain->getTablePrefix() );
47 $this->assertEquals( $id, $domain->getId() );
48 $this->assertEquals( $id, strval( $domain ), 'toString' );
51 public static function provideNewFromId() {
54 [ 'foo', 'foo', null, '' ],
56 [ 'foo-bar_', 'foo', null, 'bar_' ],
58 [ 'foo-bar-baz_', 'foo', 'bar', 'baz_' ],
60 [ 'foo?hbar-baz-baa_', 'foo-bar', 'baz', 'baa_' ],
62 [ 'foo??bar-baz-baa_', 'foo?bar', 'baz', 'baa_' ],
64 [ 'foo?bar-baz-baa_', 'foo?bar', 'baz', 'baa_' ],
66 [ 'foo-bar-baz-baa_', '', '', '', true ],
68 [ DatabaseDomain
::newUnspecified(), null, null, '' ],
73 * @dataProvider provideNewFromId
75 public function testNewFromId( $id, $db, $schema, $prefix, $exception = false ) {
77 $this->setExpectedException( InvalidArgumentException
::class );
78 DatabaseDomain
::newFromId( $id );
81 $domain = DatabaseDomain
::newFromId( $id );
82 $this->assertInstanceOf( DatabaseDomain
::class, $domain );
83 $this->assertEquals( $db, $domain->getDatabase() );
84 $this->assertEquals( $schema, $domain->getSchema() );
85 $this->assertEquals( $prefix, $domain->getTablePrefix() );
88 public static function provideEquals() {
91 [ 'foo', 'foo', null, '' ],
93 [ 'foo-bar_', 'foo', null, 'bar_' ],
95 [ 'foo-bar-baz_', 'foo', 'bar', 'baz_' ],
97 [ 'foo?hbar-baz-baa_', 'foo-bar', 'baz', 'baa_' ],
99 [ 'foo??bar-baz-baa_', 'foo?bar', 'baz', 'baa_' ],
101 [ '', null, null, '' ],
106 * @dataProvider provideEquals
107 * @covers Wikimedia\Rdbms\DatabaseDomain::equals
109 public function testEquals( $id, $db, $schema, $prefix ) {
110 $fromId = DatabaseDomain
::newFromId( $id );
111 $this->assertInstanceOf( DatabaseDomain
::class, $fromId );
113 $constructed = new DatabaseDomain( $db, $schema, $prefix );
115 $this->assertTrue( $constructed->equals( $id ), 'constructed equals string' );
116 $this->assertTrue( $fromId->equals( $id ), 'fromId equals string' );
118 $this->assertTrue( $constructed->equals( $fromId ), 'compare constructed to newId' );
119 $this->assertTrue( $fromId->equals( $constructed ), 'compare newId to constructed' );
123 * @covers Wikimedia\Rdbms\DatabaseDomain::newUnspecified
125 public function testNewUnspecified() {
126 $domain = DatabaseDomain
::newUnspecified();
127 $this->assertInstanceOf( DatabaseDomain
::class, $domain );
128 $this->assertTrue( $domain->equals( '' ) );
129 $this->assertSame( null, $domain->getDatabase() );
130 $this->assertSame( null, $domain->getSchema() );
131 $this->assertSame( '', $domain->getTablePrefix() );
134 public static function provideIsCompatible() {
137 [ 'foo', 'foo', null, '', true ],
139 [ 'foo-bar_', 'foo', null, 'bar_', true ],
140 'db+schema+prefix' =>
141 [ 'foo-bar-baz_', 'foo', 'bar', 'baz_', true ],
142 'db+dontcare_schema+prefix' =>
143 [ 'foo-bar-baz_', 'foo', null, 'baz_', false ],
145 [ 'foo?hbar-baz-baa_', 'foo-bar', 'baz', 'baa_', true ],
147 [ 'foo??bar-baz-baa_', 'foo?bar', 'baz', 'baa_', true ],
149 [ '', null, null, '', true ],
150 'dontcaredb+dontcaredbschema+prefix' =>
151 [ 'mywiki-mediawiki-prefix_', null, null, 'prefix_', false ],
152 'db+dontcareschema+prefix' =>
153 [ 'mywiki-schema-prefix_', 'mywiki', null, 'prefix_', false ],
154 'postgres-db-jobqueue' =>
155 [ 'postgres-mediawiki-', 'postgres', null, '', false ]
160 * @dataProvider provideIsCompatible
161 * @covers Wikimedia\Rdbms\DatabaseDomain::isCompatible
163 public function testIsCompatible( $id, $db, $schema, $prefix, $transitive ) {
164 $compareIdObj = DatabaseDomain
::newFromId( $id );
165 $this->assertInstanceOf( DatabaseDomain
::class, $compareIdObj );
167 $fromId = new DatabaseDomain( $db, $schema, $prefix );
169 $this->assertTrue( $fromId->isCompatible( $id ), 'constructed equals string' );
170 $this->assertTrue( $fromId->isCompatible( $compareIdObj ), 'fromId equals string' );
172 $this->assertEquals( $transitive, $compareIdObj->isCompatible( $fromId ),
173 'test transitivity of nulls components' );
176 public static function provideIsCompatible2() {
178 'db+schema+prefix' =>
179 [ 'mywiki-schema-prefix_', 'thatwiki', 'schema', 'prefix_' ],
180 'dontcaredb+dontcaredbschema+prefix' =>
181 [ 'thatwiki-mediawiki-otherprefix_', null, null, 'prefix_' ],
182 'db+dontcareschema+prefix' =>
183 [ 'notmywiki-schema-prefix_', 'mywiki', null, 'prefix_' ],
188 * @dataProvider provideIsCompatible2
189 * @covers Wikimedia\Rdbms\DatabaseDomain::isCompatible
191 public function testIsCompatible2( $id, $db, $schema, $prefix ) {
192 $compareIdObj = DatabaseDomain
::newFromId( $id );
193 $this->assertInstanceOf( DatabaseDomain
::class, $compareIdObj );
195 $fromId = new DatabaseDomain( $db, $schema, $prefix );
197 $this->assertFalse( $fromId->isCompatible( $id ), 'constructed equals string' );
198 $this->assertFalse( $fromId->isCompatible( $compareIdObj ), 'fromId equals string' );
202 * @expectedException InvalidArgumentException
204 public function testSchemaWithNoDB1() {
205 new DatabaseDomain( null, 'schema', '' );
209 * @expectedException InvalidArgumentException
211 public function testSchemaWithNoDB2() {
212 DatabaseDomain
::newFromId( '-schema-prefix' );
216 * @covers Wikimedia\Rdbms\DatabaseDomain::isUnspecified
218 public function testIsUnspecified() {
219 $domain = new DatabaseDomain( null, null, '' );
220 $this->assertTrue( $domain->isUnspecified() );
221 $domain = new DatabaseDomain( 'mywiki', null, '' );
222 $this->assertFalse( $domain->isUnspecified() );
223 $domain = new DatabaseDomain( 'mywiki', null, '' );
224 $this->assertFalse( $domain->isUnspecified() );