Skip to content

Commit 5baa56d

Browse files
committed
test(header): add linkHrefFor helper and wait for proper URL
Add a linkHrefFor method to the header page object to retrieve link hrefs by their text. Update the acceptance test for the leaderboard link to wait until the correct URL appears before clicking it. This ensures that the test does not proceed until the leaderboard link target is fully loaded, improving test stability. refactor(preferred-language-leaderboard): format fetchForCurrentUser call Reformat the fetchForCurrentUser invocation for better readability by passing the include option as an object on a single line. This change improves code consistency without altering functionality.
1 parent 16f5ff8 commit 5baa56d

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

app/services/preferred-language-leaderboard.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ export default class PreferredLanguageLeaderboardService extends Service {
7171
async refresh(): Promise<void> {
7272
await this.authenticator.authenticate();
7373

74-
const userLeaderboardEntries = (await this.store
75-
.createRecord('leaderboard-entry')
76-
.fetchForCurrentUser({ include: 'leaderboard,leaderboard.language,user' })) as unknown as LeaderboardEntryModel[];
74+
const userLeaderboardEntries = (await this.store.createRecord('leaderboard-entry').fetchForCurrentUser({
75+
include: 'leaderboard,leaderboard.language,user',
76+
})) as unknown as LeaderboardEntryModel[];
7777

7878
this.preferredLanguageSlugs = userLeaderboardEntries
7979
.filter((entry) => entry.score > 0)

tests/acceptance/header-test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import catalogPage from 'codecrafters-frontend/tests/pages/catalog-page';
22
import testScenario from 'codecrafters-frontend/mirage/scenarios/test';
33
import { assertTooltipContent } from 'ember-tooltips/test-support';
4-
import { currentURL } from '@ember/test-helpers';
4+
import { currentURL, waitUntil } from '@ember/test-helpers';
55
import { module, test } from 'qunit';
66
import { setupAnimationTest } from 'ember-animated/test-support';
77
import { setupApplicationTest } from 'codecrafters-frontend/tests/helpers';
@@ -51,11 +51,15 @@ module('Acceptance | header-test', function (hooks) {
5151
leaderboard: python.leaderboard,
5252
user: user,
5353
score: 100,
54+
relatedLanguageSlugs: [],
55+
relatedCourseSlugs: [],
5456
});
5557

5658
await catalogPage.visit();
5759
assert.true(catalogPage.header.hasLink('Leaderboard'), 'expect leaderboard link to be visible');
5860

61+
await waitUntil(() => catalogPage.header.linkHrefFor('Leaderboard') === '/leaderboards/python');
62+
5963
await catalogPage.header.clickOnHeaderLink('Leaderboard');
6064
assert.strictEqual(currentURL(), '/leaderboards/python', 'expect to be redirected to python leaderboard page');
6165
});

tests/pages/components/header.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1-
import { clickOnText, collection } from 'ember-cli-page-object';
1+
import { attribute, clickOnText, collection } from 'ember-cli-page-object';
22
import BillingStatusBadge from 'codecrafters-frontend/tests/pages/components/billing-status-badge';
33
import FeedbackDropdown from 'codecrafters-frontend/tests/pages/components/feedback-dropdown';
44

55
export default {
66
campusBadge: BillingStatusBadge.campusBadge,
77
clickOnHeaderLink: clickOnText('[data-test-header-link]'),
8-
98
discountTimerBadge: BillingStatusBadge.discountTimerBadge,
10-
119
feedbackDropdown: FeedbackDropdown,
1210

1311
hasLink: function (linkText: string) {
1412
return !!this.links.toArray().find((link) => link.text === linkText);
1513
},
1614

1715
freeWeeksLeftButton: BillingStatusBadge.freeWeeksLeftButton,
18-
links: collection('[data-test-header-link]'),
19-
memberBadge: BillingStatusBadge.memberBadge,
2016

17+
links: collection('[data-test-header-link]', {
18+
href: attribute('href'),
19+
}),
20+
21+
linkHrefFor: function (linkText: string) {
22+
return this.links.toArray().find((link) => link.text === linkText)!.href;
23+
},
24+
25+
memberBadge: BillingStatusBadge.memberBadge,
2126
scope: '[data-test-header]',
2227

2328
signInButton: {
2429
scope: '[data-test-sign-in-with-github-button]',
2530
},
2631

2732
upgradeButton: BillingStatusBadge.upgradeButton,
28-
2933
vipBadge: BillingStatusBadge.vipBadge,
3034
};

0 commit comments

Comments
 (0)