@@ -7,7 +7,7 @@ import testScenario from 'codecrafters-frontend/mirage/scenarios/test';
77import { assertTooltipContent , assertTooltipNotRendered } from 'ember-tooltips/test-support' ;
88import { currentURL , settled } from '@ember/test-helpers' ;
99import { module , test } from 'qunit' ;
10- import { setupAnimationTest } from 'ember-animated/test-support' ;
10+ import { setupAnimationTest , animationsSettled } from 'ember-animated/test-support' ;
1111import { setupApplicationTest } from 'codecrafters-frontend/tests/helpers' ;
1212import { signIn , signInAsSubscriber , signInAsTeamMember } from 'codecrafters-frontend/tests/support/authentication-helpers' ;
1313
@@ -286,6 +286,68 @@ module('Acceptance | course-page | view-leaderboard', function (hooks) {
286286 await percySnapshot ( 'Leaderboard for teams - Viewing World' ) ;
287287 } ) ;
288288
289+ test ( 'team dropdown selection persists across page refresh' , async function ( assert ) {
290+ testScenario ( this . server ) ;
291+ signInAsTeamMember ( this . owner , this . server ) ;
292+
293+ let python = this . server . schema . languages . findBy ( { name : 'Python' } ) ;
294+ let redis = this . server . schema . courses . findBy ( { slug : 'redis' } ) ;
295+
296+ let otherUser = this . server . create ( 'user' , {
297+ id : 'other-user' ,
298+ avatarUrl : 'https://github.com/Gufran.png' ,
299+ createdAt : new Date ( ) ,
300+ githubUsername : 'Gufran' ,
301+ username : 'Gufran' ,
302+ } ) ;
303+
304+ this . server . create ( 'course-leaderboard-entry' , {
305+ status : 'idle' ,
306+ currentCourseStage : redis . stages . models . find ( ( x ) => x . position === 2 ) ,
307+ language : python ,
308+ user : otherUser ,
309+ lastAttemptAt : new Date ( ) ,
310+ } ) ;
311+
312+ await catalogPage . visit ( ) ;
313+ await catalogPage . clickOnCourse ( 'Build your own Redis' ) ;
314+ await courseOverviewPage . clickOnStartCourse ( ) ;
315+
316+ assert . strictEqual ( coursePage . leaderboard . entries . length , 0 , 'no leaderboard entries should be present by default' ) ;
317+
318+ // Open dropdown and switch to "Everyone" view
319+ await coursePage . leaderboard . teamDropdown . toggle ( ) ;
320+ await coursePage . leaderboard . teamDropdown . clickOnLink ( 'Everyone' ) ;
321+
322+ // Verify we're now seeing world leaderboard
323+ assert . strictEqual ( coursePage . leaderboard . entries . length , 1 , 'leaderboard entries should be visible if filtering by world' ) ;
324+
325+ // Refresh the page
326+ await catalogPage . visit ( ) ;
327+ await catalogPage . clickOnCourse ( 'Build your own Redis' ) ;
328+ await courseOverviewPage . clickOnStartCourse ( ) ;
329+
330+ // Verify the selection persisted
331+ assert . strictEqual ( coursePage . leaderboard . entries . length , 1 , 'leaderboard entries should still be visible after refresh' ) ;
332+ await coursePage . leaderboard . teamDropdown . toggle ( ) ;
333+ assert . ok ( coursePage . leaderboard . teamDropdown . hasLink ( 'Everyone' ) , 'should still be on Everyone view' ) ;
334+
335+ // Switch to "Dummy Team" view
336+ await coursePage . leaderboard . teamDropdown . clickOnLink ( 'Dummy Team' ) ;
337+ await animationsSettled ( ) ;
338+ assert . strictEqual ( coursePage . leaderboard . entries . length , 0 , 'leaderboard entries should be empty if filtering by team' ) ;
339+
340+ // Refresh the page
341+ await catalogPage . visit ( ) ;
342+ await catalogPage . clickOnCourse ( 'Build your own Redis' ) ;
343+ await courseOverviewPage . clickOnStartCourse ( ) ;
344+
345+ // Verify the selection persisted
346+ assert . strictEqual ( coursePage . leaderboard . entries . length , 0 , 'leaderboard entries should still be empty after refresh' ) ;
347+ await coursePage . leaderboard . teamDropdown . toggle ( ) ;
348+ assert . ok ( coursePage . leaderboard . teamDropdown . hasLink ( 'Dummy Team' ) , 'should still be on Dummy Team view' ) ;
349+ } ) ;
350+
289351 test ( 'private leaderboard feature suggestion is shown to non-team members with a prompt' , async function ( assert ) {
290352 testScenario ( this . server ) ;
291353
0 commit comments