/**
* @covers ChangeTags
+ * @group Database
*/
class ChangeTagsTest extends MediaWikiTestCase {
+ public function setUp() {
+ parent::setUp();
+
+ $this->tablesUsed[] = 'change_tag';
+ $this->tablesUsed[] = 'change_tag_def';
+ $this->tablesUsed[] = 'tag_summary';
+ }
+
// TODO only modifyDisplayQuery and getSoftwareTags are tested, nothing else is
/** @dataProvider provideModifyDisplayQuery */
sort( $actual );
$this->assertEquals( $expected, $actual );
}
+
+ public function testUpdateTagsMigrationOld() {
+ $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'change_tag', '*' );
+ $dbw->delete( 'change_tag_def', '*' );
+
+ $rcId = 123;
+ ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( [], iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag2',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 123
+ ],
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+
+ $rcId = 124;
+ ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( [], iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag2',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 124
+ ],
+ (object)[
+ 'ct_tag' => 'tag3',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 124
+ ],
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+ }
+
+ public function testUpdateTagsMigrationWriteBoth() {
+ $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'change_tag', '*' );
+ $dbw->delete( 'change_tag_def', '*' );
+
+ $rcId = 123;
+ ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $expected = [
+ (object)[
+ 'ctd_name' => 'tag1',
+ 'ctd_id' => 1,
+ 'ctd_count' => 1
+ ],
+ (object)[
+ 'ctd_name' => 'tag2',
+ 'ctd_id' => 2,
+ 'ctd_count' => 1
+ ],
+ ];
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( $expected, iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => 1,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag2',
+ 'ct_tag_id' => 2,
+ 'ct_rc_id' => 123
+ ],
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+
+ $rcId = 124;
+ ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $expected = [
+ (object)[
+ 'ctd_name' => 'tag1',
+ 'ctd_id' => 1,
+ 'ctd_count' => 2
+ ],
+ (object)[
+ 'ctd_name' => 'tag2',
+ 'ctd_id' => 2,
+ 'ctd_count' => 1
+ ],
+ (object)[
+ 'ctd_name' => 'tag3',
+ 'ctd_id' => 3,
+ 'ctd_count' => 1
+ ],
+ ];
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( $expected, iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => 1,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag2',
+ 'ct_tag_id' => 2,
+ 'ct_rc_id' => 123
+ ],
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => 1,
+ 'ct_rc_id' => 124
+ ],
+ (object)[
+ 'ct_tag' => 'tag3',
+ 'ct_tag_id' => 3,
+ 'ct_rc_id' => 124
+ ],
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+ }
+
+ public function testDeleteTagsMigrationOld() {
+ $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'change_tag', '*' );
+ $dbw->delete( 'change_tag_def', '*' );
+
+ $rcId = 123;
+ ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+
+ ChangeTags::updateTags( [], [ 'tag2' ], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( [], iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => null,
+ 'ct_rc_id' => 123
+ ]
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+ }
+
+ public function testDeleteTagsMigrationWriteBoth() {
+ $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'change_tag', '*' );
+ $dbw->delete( 'change_tag_def', '*' );
+
+ $rcId = 123;
+ ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+
+ ChangeTags::updateTags( [], [ 'tag2' ], $rcId );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $expected = [
+ (object)[
+ 'ctd_name' => 'tag1',
+ 'ctd_id' => 1,
+ 'ctd_count' => 1
+ ],
+ ];
+ $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+ $this->assertEquals( $expected, iterator_to_array( $res, false ) );
+
+ $expected2 = [
+ (object)[
+ 'ct_tag' => 'tag1',
+ 'ct_tag_id' => 1,
+ 'ct_rc_id' => 123
+ ]
+ ];
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+ }
+
}