$this->tablesUsed[] = 'change_tag';
$this->tablesUsed[] = 'change_tag_def';
- $this->tablesUsed[] = 'tag_summary';
- $this->tablesUsed[] = 'valid_tag';
// Truncate these to avoid the supposed-to-be-unused IDs in tests here turning
// out to be used, leading ChangeTags::updateTags() to pick up bogus rc_id,
$this->assertEquals( $expected, $actual );
}
- public function testUpdateTagsMigrationOld() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
+ public function testUpdateTags() {
+ // FIXME: fails under postgres
+ $this->markTestSkippedIfDbType( 'postgres' );
+
$dbw = wfGetDB( DB_MASTER );
$dbw->delete( 'change_tag', '*' );
$dbw->delete( 'change_tag_def', '*' );
$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( [], iterator_to_array( $res, false ) );
+ $this->assertEquals( $expected, iterator_to_array( $res, false ) );
$expected2 = [
(object)[
- 'ct_tag' => 'tag1',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 1,
'ct_rc_id' => 123
],
(object)[
- 'ct_tag' => 'tag2',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 2,
'ct_rc_id' => 123
],
];
- $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
$this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
$rcId = 124;
- ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId );
+ ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
+
+ ChangeTags::updateTags( [ '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( [], iterator_to_array( $res, false ) );
+ $this->assertEquals( $expected, iterator_to_array( $res, false ) );
$expected2 = [
(object)[
- 'ct_tag' => 'tag1',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 1,
'ct_rc_id' => 123
],
(object)[
- 'ct_tag' => 'tag2',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 2,
'ct_rc_id' => 123
],
(object)[
- 'ct_tag' => 'tag1',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 1,
'ct_rc_id' => 124
],
(object)[
- 'ct_tag' => 'tag3',
- 'ct_tag_id' => null,
+ 'ct_tag_id' => 3,
'ct_rc_id' => 124
],
];
- $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
$this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
}
- public function testUpdateTagsMigrationWriteBoth() {
+ public function testUpdateTagsSkipDuplicates() {
// FIXME: fails under postgres
$this->markTestSkippedIfDbType( 'postgres' );
- $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', 'tag3' ], [], $rcId );
$dbr = wfGetDB( DB_REPLICA );
'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_id' => 3,
+ 'ct_rc_id' => 123
+ ],
];
- $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
$this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+ }
- $rcId = 124;
- ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
+ public function testUpdateTagsDoNothingOnRepeatedCall() {
+ // FIXME: fails under postgres
+ $this->markTestSkippedIfDbType( 'postgres' );
- ChangeTags::updateTags( [ 'tag3' ], [], $rcId );
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'change_tag', '*' );
+ $dbw->delete( 'change_tag_def', '*' );
+
+ $rcId = 123;
+ ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+ $res = ChangeTags::updateTags( [ 'tag2', 'tag1' ], [], $rcId );
+ $this->assertEquals( [ [], [], [ 'tag1', 'tag2' ] ], $res );
$dbr = wfGetDB( DB_REPLICA );
(object)[
'ctd_name' => 'tag1',
'ctd_id' => 1,
- 'ctd_count' => 2
+ 'ctd_count' => 1
],
(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' ], '' );
+ $res2 = $dbr->select( 'change_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 );
+ public function testDeleteTags() {
$dbw = wfGetDB( DB_MASTER );
$dbw->delete( 'change_tag', '*' );
$dbw->delete( 'change_tag_def', '*' );
$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' ], '' );
+ $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
$this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
}
- public function testTagUsageStatisticsOldBackend() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
- $this->setMwGlobals( 'wgTagStatisticsNewTable', false );
-
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'change_tag', '*' );
- $dbw->delete( 'change_tag_def', '*' );
-
- $rcId = 123;
- ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
- $rcId = 124;
- ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
-
- $this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
- }
-
- public function testTagUsageStatisticsNewMigrationOldBackedn() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
- $this->setMwGlobals( 'wgTagStatisticsNewTable', false );
-
+ public function testTagUsageStatistics() {
$dbw = wfGetDB( DB_MASTER );
$dbw->delete( 'change_tag', '*' );
$dbw->delete( 'change_tag_def', '*' );
$this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
}
- public function testTagUsageStatisticsNewBackend() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
- $this->setMwGlobals( 'wgTagStatisticsNewTable', true );
-
+ public function testListExplicitlyDefinedTags() {
$dbw = wfGetDB( DB_MASTER );
$dbw->delete( 'change_tag', '*' );
$dbw->delete( 'change_tag_def', '*' );
- MediaWikiServices::getInstance()->resetServiceForTesting( 'NameTableStoreFactory' );
-
- $rcId = 123;
- ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
- $rcId = 124;
- ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
-
- $this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
- }
-
- public function testListExplicitlyDefinedTagsOld() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'change_tag', '*' );
- $dbw->delete( 'change_tag_def', '*' );
- $dbw->delete( 'valid_tag', '*' );
-
- $rcId = 123;
- ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
- ChangeTags::defineTag( 'tag2' );
-
- $this->assertEquals( [ 'tag2' ], ChangeTags::listExplicitlyDefinedTags() );
- $dbr = wfGetDB( DB_REPLICA );
- $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
- $this->assertEquals( [], iterator_to_array( $res, false ) );
-
- $this->assertEquals( [ 'tag2' ], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
- }
-
- public function testListExplicitlyDefinedTagsWriteBoth() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'change_tag', '*' );
- $dbw->delete( 'change_tag_def', '*' );
- $dbw->delete( 'valid_tag', '*' );
-
- $rcId = 123;
- ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
- ChangeTags::defineTag( 'tag2' );
-
- $this->assertEquals( [ 'tag2' ], ChangeTags::listExplicitlyDefinedTags() );
- $dbr = wfGetDB( DB_REPLICA );
-
- $expected = [
- (object)[
- 'ctd_name' => 'tag1',
- 'ctd_user_defined' => 0
- ],
- (object)[
- 'ctd_name' => 'tag2',
- 'ctd_user_defined' => 1
- ],
- ];
- $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
- $this->assertEquals( $expected, iterator_to_array( $res, false ) );
-
- $this->assertEquals( [ 'tag2' ], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
- }
-
- public function testListExplicitlyDefinedTagsNew() {
- $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'change_tag', '*' );
- $dbw->delete( 'change_tag_def', '*' );
- $dbw->delete( 'valid_tag', '*' );
$rcId = 123;
ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
];
$res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
$this->assertEquals( $expected, iterator_to_array( $res, false ) );
-
- $this->assertEquals( [], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
}
}