From 8e457e77899bc950fecf202134e4e33c11c07564 Mon Sep 17 00:00:00 2001 From: Huyen Nguyen <25715018+huyenltnguyen@users.noreply.github.com> Date: Tue, 19 Dec 2023 01:37:28 +0700 Subject: [PATCH] fix(ui): display checkmark on completed C# challenges (#52504) Co-authored-by: Tom <20648924+moT01@users.noreply.github.com> --- client/src/templates/Challenges/odin/show.tsx | 14 ++- e2e/show.spec.ts | 85 +++++++++++++------ 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/client/src/templates/Challenges/odin/show.tsx b/client/src/templates/Challenges/odin/show.tsx index 3b1de183eb4..7c0a018e89b 100644 --- a/client/src/templates/Challenges/odin/show.tsx +++ b/client/src/templates/Challenges/odin/show.tsx @@ -23,6 +23,7 @@ import CompletionModal from '../components/completion-modal'; import HelpModal from '../components/help-modal'; import Scene from '../components/scene/scene'; import PrismFormatted from '../components/prism-formatted'; +import ChallengeTitle from '../components/challenge-title'; import { challengeMounted, updateChallengeMeta, @@ -219,6 +220,7 @@ class ShowOdin extends Component { question: { text, answers, solution }, assignments, audioPath, + translationPending, scene } } @@ -228,7 +230,8 @@ class ShowOdin extends Component { pageContext: { challengeMeta: { nextChallengePath, prevChallengePath } }, - t + t, + isChallengeCompleted } = this.props; const blockNameTitle = `${t( @@ -277,7 +280,12 @@ class ShowOdin extends Component { )} -

{title}

+ + {title} + {audioPath && ( <> @@ -390,7 +398,6 @@ class ShowOdin extends Component { block={true} bsSize='large' bsStyle='primary' - data-playwright-test-label='check-answer-button' onClick={() => this.handleSubmit( solution, @@ -406,7 +413,6 @@ class ShowOdin extends Component { bsSize='large' bsStyle='primary' className='btn-invert' - data-playwright-test-label='ask-for-help-button' onClick={openHelpModal} > {t('buttons.ask-for-help')} diff --git a/e2e/show.spec.ts b/e2e/show.spec.ts index d1e75835ba9..ec2c0229d8e 100644 --- a/e2e/show.spec.ts +++ b/e2e/show.spec.ts @@ -1,33 +1,70 @@ import { test, expect } from '@playwright/test'; import translations from '../client/i18n/locales/english/translations.json'; -const checkAnswerButton = translations.buttons['check-answer']; -const askForHelpButton = translations.buttons['ask-for-help']; +// Tests for challenges rendered by `client/src/templates/Challenges/odin/show.tsx` +test.describe('Odin challenges', () => { + test.beforeEach(async ({ page }) => { + await page.goto( + '/learn/foundational-c-sharp-with-microsoft/write-your-first-code-using-c-sharp/write-your-first-c-sharp-code' + ); + }); -test.beforeEach(async ({ page }) => { - await page.goto( - '/learn/foundational-c-sharp-with-microsoft/write-your-first-code-using-c-sharp/write-your-first-c-sharp-code' - ); -}); + test.describe('When the user is signed out', () => { + test.use({ storageState: { cookies: [], origins: [] } }); -test.afterEach(async ({ page }) => { - await page.close(); -}); + test('should render the content correctly', async ({ page }) => { + await expect(page).toHaveTitle( + 'Write Your First Code Using C# - Write Your First C# Code | Learn | freeCodeCamp.org' + ); -test('the page should render with correct title', async ({ page }) => { - await expect(page).toHaveTitle( - 'Write Your First Code Using C# - Write Your First C# Code | Learn | freeCodeCamp.org' - ); -}); + await expect( + page.getByRole('heading', { + level: 1, + name: 'Write Your First C# Code' + }) + ).toBeVisible(); -test('correct check answer button', async ({ page }) => { - const checkAnswer = page.getByTestId('check-answer-button'); - await expect(checkAnswer).toBeVisible(); - await expect(checkAnswer).toContainText(checkAnswerButton); -}); + // Checkmark doesn't show up if the user has completed the challenge but is signed out + await expect( + page.getByRole('img', { name: translations.icons.passed }) + ).toBeHidden(); -test('correct ask for help button', async ({ page }) => { - const askHelp = page.getByTestId('ask-for-help-button'); - await expect(askHelp).toBeVisible(); - await expect(askHelp).toContainText(askForHelpButton); + await expect( + page.getByRole('button', { name: translations.buttons['check-answer'] }) + ).toBeVisible(); + + await expect( + page.getByRole('button', { name: translations.buttons['ask-for-help'] }) + ).toBeVisible(); + }); + }); + + test.describe('When the user is signed in', () => { + test.use({ storageState: 'playwright/.auth/certified-user.json' }); + + test('should render the content correctly', async ({ page }) => { + await expect(page).toHaveTitle( + 'Write Your First Code Using C# - Write Your First C# Code | Learn | freeCodeCamp.org' + ); + + await expect( + page.getByRole('heading', { + level: 1, + name: 'Write Your First C# Code' + }) + ).toBeVisible(); + + await expect( + page.getByRole('img', { name: translations.icons.passed }) + ).toBeVisible(); + + await expect( + page.getByRole('button', { name: translations.buttons['check-answer'] }) + ).toBeVisible(); + + await expect( + page.getByRole('button', { name: translations.buttons['ask-for-help'] }) + ).toBeVisible(); + }); + }); });