|
1 | | -import { currentURL } from '@ember/test-helpers'; |
2 | | -import testScenario from 'codecrafters-frontend/mirage/scenarios/test'; |
3 | | -import { setupApplicationTest } from 'codecrafters-frontend/tests/helpers'; |
4 | 1 | import leaderboardPage from 'codecrafters-frontend/tests/pages/leaderboard-page'; |
5 | | -import { signInAsStaff } from 'codecrafters-frontend/tests/support/authentication-helpers'; |
| 2 | +import percySnapshot from '@percy/ember'; |
| 3 | +import testScenario from 'codecrafters-frontend/mirage/scenarios/test'; |
| 4 | +import { currentURL } from '@ember/test-helpers'; |
| 5 | +import { module, test } from 'qunit'; |
6 | 6 | import { setupAnimationTest } from 'ember-animated/test-support'; |
| 7 | +import { setupApplicationTest } from 'codecrafters-frontend/tests/helpers'; |
7 | 8 | import { setupWindowMock } from 'ember-window-mock/test-support'; |
8 | | -import { module, test } from 'qunit'; |
9 | | -import percySnapshot from '@percy/ember'; |
| 9 | +import { signInAsStaff } from 'codecrafters-frontend/tests/support/authentication-helpers'; |
10 | 10 |
|
11 | 11 | module('Acceptance | leaderboard-page | view', function (hooks) { |
12 | 12 | setupApplicationTest(hooks); |
@@ -74,7 +74,55 @@ module('Acceptance | leaderboard-page | view', function (hooks) { |
74 | 74 | await percySnapshot('Leaderboard Page'); |
75 | 75 | }); |
76 | 76 |
|
77 | | - // Test that one can switch languages |
| 77 | + test('can switch languages', async function (assert) { |
| 78 | + signInAsStaff(this.owner, this.server); |
| 79 | + |
| 80 | + // Create leaderboards for multiple languages |
| 81 | + const rustLanguage = this.server.schema.languages.all().models.find((language) => language.slug === 'rust'); |
| 82 | + const pythonLanguage = this.server.schema.languages.all().models.find((language) => language.slug === 'python'); |
| 83 | + |
| 84 | + // Create sample data for both languages |
| 85 | + const sampleUserData = [ |
| 86 | + { username: 'rust-user-1', score: 1000, leaderboard: rustLanguage.leaderboard }, |
| 87 | + { username: 'rust-user-2', score: 800, leaderboard: rustLanguage.leaderboard }, |
| 88 | + { username: 'python-user-1', score: 900, leaderboard: pythonLanguage.leaderboard }, |
| 89 | + { username: 'python-user-2', score: 700, leaderboard: pythonLanguage.leaderboard }, |
| 90 | + ]; |
| 91 | + |
| 92 | + for (const sampleUserDatum of sampleUserData) { |
| 93 | + let user = this.server.schema.users.all().models.find((user) => user.username === sampleUserDatum.username); |
| 94 | + |
| 95 | + user ||= this.server.create('user', { |
| 96 | + username: sampleUserDatum.username, |
| 97 | + avatarUrl: `https://github.com/${sampleUserDatum.username}.png`, |
| 98 | + }); |
| 99 | + |
| 100 | + // Create entries for both languages |
| 101 | + this.server.create('leaderboard-entry', { |
| 102 | + leaderboard: sampleUserDatum.leaderboard, |
| 103 | + user: user, |
| 104 | + score: sampleUserDatum.score, |
| 105 | + scoreUpdatesCount: Math.floor(sampleUserDatum.score / 10), |
| 106 | + relatedCourseSlugs: ['redis', 'shell'], |
| 107 | + }); |
| 108 | + } |
| 109 | + |
| 110 | + // Start on Rust leaderboard |
| 111 | + await leaderboardPage.visit({ language_slug: 'rust' }); |
| 112 | + assert.strictEqual(currentURL(), '/leaderboards/rust'); |
| 113 | + assert.strictEqual(leaderboardPage.entriesTable.entries.length, 2, '2 Rust entries should be shown'); |
| 114 | + assert.strictEqual(leaderboardPage.entriesTable.entries[0].username, 'rust-user-1', 'first entry should be rust-user-1'); |
| 115 | + assert.strictEqual(leaderboardPage.entriesTable.entries[1].username, 'rust-user-2', 'second entry should be rust-user-2'); |
| 116 | + |
| 117 | + // Switch to Python leaderboard |
| 118 | + await leaderboardPage.languageDropdown.toggle(); |
| 119 | + await leaderboardPage.languageDropdown.clickOnLink('Python'); |
| 120 | + assert.strictEqual(currentURL(), '/leaderboards/python', 'URL should change to Python leaderboard'); |
| 121 | + assert.strictEqual(leaderboardPage.entriesTable.entries.length, 2, '2 Python entries should be shown'); |
| 122 | + assert.strictEqual(leaderboardPage.entriesTable.entries[0].username, 'python-user-1', 'first entry should be python-user-1'); |
| 123 | + assert.strictEqual(leaderboardPage.entriesTable.entries[1].username, 'python-user-2', 'second entry should be python-user-2'); |
| 124 | + }); |
| 125 | + |
78 | 126 | // Test that surrounding entries are shown if user is not within top 10 |
79 | 127 | // Test that surrounding entries are not shown if user is within top 10 |
80 | 128 | }); |
0 commit comments