13
13
* @group Database
14
14
*
15
15
* @covers \MediaWiki\Extension\AchievementBadges\Achievement
16
- * @covers \MediaWiki\Extension\AchievementBadges\Achievement
17
16
*/
18
17
class AchieveTest extends MediaWikiIntegrationTestCase {
19
18
@@ -23,22 +22,25 @@ protected function setUp(): void {
23
22
}
24
23
25
24
/**
26
- * @param int $num
25
+ * @param bool $earned
27
26
* @param User $user
28
- * @param string $type
27
+ * @param string $key
29
28
* @param string $msg
30
- * @return int
29
+ * @return void
31
30
*/
32
- private function assertNotificationNumber ( $ num , $ user , $ type , $ msg ) {
31
+ private function assertNotificationForAchievement ( $ earned , $ user , $ key , $ msg ) {
33
32
$ notifMapper = new EchoNotificationMapper ();
34
33
$ limit = 50 ;
35
- $ notifs = $ notifMapper ->fetchUnreadByUser ( $ user , $ limit , '' , [ $ type ] );
36
- $ texts = [];
37
- foreach ( $ notifs as $ noti ) {
38
- $ event = $ noti ->getEvent ();
39
- $ texts [] = $ event . '( ' . implode ( ', ' , array_values ( $ event ->getExtra () ) ) . ') ' ;
34
+ $ notifs = $ notifMapper ->fetchUnreadByUser ( $ user , $ limit , null , [ Constants::EVENT_KEY_EARN ] );
35
+ $ eventKeys = array_map ( static function ( $ notif ) {
36
+ return $ notif ->getEvent ()->getExtra ()['key ' ];
37
+ }, $ notifs );
38
+ if ( $ earned ) {
39
+ $ this ->assertContains ( $ key , $ eventKeys ,
40
+ "$ msg: $ key not found in " . implode ( ', ' , $ eventKeys ) );
41
+ } else {
42
+ $ this ->assertNotContains ( $ key , $ eventKeys , $ msg );
40
43
}
41
- $ this ->assertCount ( $ num , $ notifs , "$ msg ( " . implode ( ', ' , $ texts ) . ') ' );
42
44
}
43
45
44
46
private function assertEarnedAchievement ( $ num , $ user , $ key ) {
@@ -77,15 +79,15 @@ public function testAchieveEditPages() {
77
79
// Edit a page
78
80
$ this ->editPage ( 'Edit Test ' , str_repeat ( 'lorem ' , $ ct ++ ), '' , NS_MAIN , $ user );
79
81
$ this ->assertSame ( 1 , $ user ->getEditCount () );
80
- $ this ->assertNotificationNumber ( 1 , $ user , Constants::EVENT_KEY_EARN ,
82
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_PAGE . ' -0 ' ,
81
83
"edit-page-0 should be achieved (edit count: {$ user ->getEditCount ()}) " );
82
84
$ this ->assertEarnedAchievement ( 1 , $ user , Constants::ACHV_KEY_EDIT_PAGE );
83
85
84
86
// Edit another page
85
87
$ this ->editPage ( 'Edit Test ' , str_repeat ( 'lorem ' , $ ct ++ ), '' , NS_MAIN , $ user );
86
88
$ this ->assertSame ( 2 , $ user ->getEditCount () );
87
- $ this ->assertNotificationNumber ( 2 , $ user , Constants::EVENT_KEY_EARN ,
88
- "Only edit-page-0 should be achieved (edit count: {$ user ->getEditCount ()}) " );
89
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_PAGE . ' -1 ' ,
90
+ "edit-page-0 should be achieved (edit count: {$ user ->getEditCount ()}) " );
89
91
$ this ->assertEarnedAchievement ( 2 , $ user , Constants::ACHV_KEY_EDIT_PAGE );
90
92
}
91
93
@@ -108,14 +110,14 @@ public function testAchieveCreatePages() {
108
110
$ ct = 1 ;
109
111
// Create a page
110
112
$ this ->editPage ( 'Creation test ' . $ ct ++, 'ipsum ' , '' , NS_MAIN , $ user );
111
- $ this ->assertNotificationNumber ( 1 , $ user , Constants::EVENT_KEY_EARN ,
113
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_CREATE_PAGE . ' -0 ' ,
112
114
"create-page-0 should be achieved " );
113
115
$ this ->assertEarnedAchievement ( 1 , $ user , Constants::ACHV_KEY_CREATE_PAGE );
114
116
115
117
// Create another page
116
118
$ this ->editPage ( 'Creation test ' . $ ct ++, 'ipsum ' , '' , NS_MAIN , $ user );
117
- $ this ->assertNotificationNumber ( 2 , $ user , Constants::EVENT_KEY_EARN ,
118
- "Only create-page-0 should be achieved " );
119
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_CREATE_PAGE . ' -1 ' ,
120
+ "create-page-0 should be achieved " );
119
121
$ this ->assertEarnedAchievement ( 2 , $ user , Constants::ACHV_KEY_CREATE_PAGE );
120
122
}
121
123
@@ -132,13 +134,13 @@ public function testAchieveEditSize() {
132
134
] );
133
135
134
136
$ this ->editPage ( 'Size test ' , str_repeat ( 'ipsum ' , 10 ), '' , NS_MAIN , $ user );
135
- $ this ->assertNotificationNumber ( 1 , $ user , Constants::EVENT_KEY_EARN ,
137
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_SIZE . ' -0 ' ,
136
138
"edit-size-0 should be achieved " );
137
139
$ this ->assertEarnedAchievement ( 1 , $ user , Constants::ACHV_KEY_EDIT_SIZE );
138
140
139
141
$ this ->editPage ( 'Size test ' , str_repeat ( 'ipsum ' , 30 ), '' , NS_MAIN , $ user );
140
- $ this ->assertNotificationNumber ( 2 , $ user , Constants::EVENT_KEY_EARN ,
141
- "Only edit-size-0 should be achieved " );
142
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_SIZE . ' -1 ' ,
143
+ "edit-size-0 should be achieved " );
142
144
$ this ->assertEarnedAchievement ( 2 , $ user , Constants::ACHV_KEY_EDIT_SIZE );
143
145
}
144
146
@@ -160,7 +162,7 @@ public function testAchieveEditSizeExist() {
160
162
$ user ->addToDatabase ();
161
163
162
164
$ this ->editPage ( $ titleText , $ content . 'dolor ' , '' , NS_MAIN , $ user );
163
- $ this ->assertNotificationNumber ( 0 , $ user , Constants::EVENT_KEY_EARN ,
165
+ $ this ->assertNotificationForAchievement ( false , $ user , Constants::ACHV_KEY_EDIT_SIZE . ' -0 ' ,
164
166
"edit-size-0 should not be achieved " );
165
167
$ this ->assertEarnedAchievement ( 0 , $ user , Constants::ACHV_KEY_EDIT_SIZE );
166
168
}
@@ -182,8 +184,11 @@ public function testAchieveManyEditSize() {
182
184
] );
183
185
184
186
$ this ->editPage ( __METHOD__ , str_repeat ( 'ipsum ' , 30 ), '' , NS_MAIN , $ user );
185
- $ this ->assertNotificationNumber ( 5 , $ user , Constants::EVENT_KEY_EARN ,
186
- "All edit-size should be achieved " );
187
+
188
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_SIZE . '-0 ' ,
189
+ "All edit-size-0 should be achieved " );
190
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_EDIT_SIZE . '-4 ' ,
191
+ "All edit-size-4 should be achieved " );
187
192
$ this ->assertEarnedAchievement ( 5 , $ user , Constants::ACHV_KEY_EDIT_SIZE );
188
193
}
189
194
@@ -198,7 +203,7 @@ public function testLongUserPage() {
198
203
$ longText = str_repeat ( 'lorem ipsum dolor amat ' , 40 );
199
204
200
205
$ this ->editPage ( $ user ->getName (), $ longText , '' , NS_USER , $ user );
201
- $ this ->assertNotificationNumber ( 1 , $ user , Constants::EVENT_KEY_EARN ,
206
+ $ this ->assertNotificationForAchievement ( true , $ user , Constants::ACHV_KEY_LONG_USER_PAGE ,
202
207
'Should be achieved long-user-page ' );
203
208
$ this ->assertEarnedAchievement ( 1 , $ user , Constants::ACHV_KEY_LONG_USER_PAGE );
204
209
}
0 commit comments