diff --git a/app/components/course-page/course-stage-step/second-stage-tutorial-card.hbs b/app/components/course-page/course-stage-step/second-stage-tutorial-card.hbs index 9d0ce49905..bc6ac4e0c1 100644 --- a/app/components/course-page/course-stage-step/second-stage-tutorial-card.hbs +++ b/app/components/course-page/course-stage-step/second-stage-tutorial-card.hbs @@ -1,10 +1,11 @@ <:content>
-

- In this stage, you'll implement your own solution. Unlike stage 1, your repository doesn't contain commented code to pass this stage. -

- + {{#unless (eq @repository.course.slug "shell")}} +

+ In this stage, you'll implement your own solution. Unlike stage 1, your repository doesn't contain commented code to pass this stage. +

+ {{/unless}}

{{! TODO: Aggregate stat across all stages, try to fetch challenge-specific values from the backend. }} 98% @@ -13,19 +14,12 @@

- {{#if (eq stepList.expandedStep.id "read-instructions")}} - - {{else if (eq stepList.expandedStep.id "implement-solution")}} + {{#if (eq stepList.expandedStep.id "implement-solution")}} {{else if (eq stepList.expandedStep.id "run-tests")}} diff --git a/app/components/course-page/course-stage-step/second-stage-tutorial-card.ts b/app/components/course-page/course-stage-step/second-stage-tutorial-card.ts index bbde379834..98e4abecea 100644 --- a/app/components/course-page/course-stage-step/second-stage-tutorial-card.ts +++ b/app/components/course-page/course-stage-step/second-stage-tutorial-card.ts @@ -4,6 +4,7 @@ import { inject as service } from '@ember/service'; import CoursePageStateService from 'codecrafters-frontend/services/course-page-state'; import Store from '@ember-data/store'; import type RepositoryModel from 'codecrafters-frontend/models/repository'; +import type CourseStageLanguageGuideModel from 'codecrafters-frontend/models/course-stage-language-guide'; import type CourseStageModel from 'codecrafters-frontend/models/course-stage'; import { action } from '@ember/object'; import type { Step } from 'codecrafters-frontend/components/expandable-step-list'; @@ -14,7 +15,7 @@ interface Signature { Args: { repository: RepositoryModel; courseStage: CourseStageModel; - shouldRecommendLanguageGuide: boolean; + languageGuide?: CourseStageLanguageGuideModel; shouldShowSolution: boolean; }; } @@ -29,15 +30,6 @@ class BaseStep { } } -class ReadInstructionsStep extends BaseStep implements Step { - id = 'read-instructions'; - canBeCompletedManually = true; - - get titleMarkdown() { - return 'Read instructions'; - } -} - class ImplementSolutionStep extends BaseStep implements Step { id = 'implement-solution'; canBeCompletedManually = true; @@ -92,7 +84,6 @@ export default class SecondStageTutorialCardComponent extends Component - Head over to your editor / IDE and implement your solution. -

+
+ {{#if (eq @repository.course.slug "shell")}} + {{markdown-to-html @courseStage.shortInstructionsMarkdown}} + {{/if}} + +

+ Head over to your editor / IDE and implement your solution. +

+
{{#if (and @shouldShowSolution this.solution)}} <:content> -
+
{{#each this.solution.changedFiles as |changedFile|}} {{! Extra if condition convinces typescript that solution isn't null }} {{#if this.solution}} @@ -23,6 +28,27 @@ {{/if}} {{/each}}
+ + {{#unless this.solutionIsBlurred}} + + {{svg-jar "eye-off" class="size-4"}} + Hide Solution + + + {{#if @languageGuide}} +
+ {{markdown-to-html @languageGuide.markdownForBeginner}} +
+ {{/if}} + {{/unless}} <:overlay> @@ -35,18 +61,8 @@ Click to reveal solution
+
-{{/if}} - -

- {{#if @shouldRecommendLanguageGuide}} - For a more detailed explanation on how this solution works, view the - {{@repository.language.name}} Guide - card. - {{else}} - If you want a quick look at what functions to use or how to structure your code, we recommend looking at - Code Examples - tab. - {{/if}} -

\ No newline at end of file +{{/if}} \ No newline at end of file diff --git a/app/components/course-page/course-stage-step/second-stage-tutorial-card/implement-solution-step.ts b/app/components/course-page/course-stage-step/second-stage-tutorial-card/implement-solution-step.ts index a7720e5c81..321246f542 100644 --- a/app/components/course-page/course-stage-step/second-stage-tutorial-card/implement-solution-step.ts +++ b/app/components/course-page/course-stage-step/second-stage-tutorial-card/implement-solution-step.ts @@ -1,6 +1,7 @@ import Component from '@glimmer/component'; import type RepositoryModel from 'codecrafters-frontend/models/repository'; import type CourseStageModel from 'codecrafters-frontend/models/course-stage'; +import type CourseStageLanguageGuideModel from 'codecrafters-frontend/models/course-stage-language-guide'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; @@ -11,7 +12,7 @@ interface Signature { repository: RepositoryModel; courseStage: CourseStageModel; isComplete: boolean; - shouldRecommendLanguageGuide: boolean; + languageGuide?: CourseStageLanguageGuideModel; shouldShowSolution: boolean; }; } @@ -23,6 +24,11 @@ export default class ImplementSolutionStepComponent extends Component return this.args.repository.secondStageSolution; } + @action + handleHideSolutionButtonClick() { + this.solutionIsBlurred = true; + } + @action handleRevealSolutionButtonClick() { this.solution?.createView(); diff --git a/app/components/expandable-step-list.ts b/app/components/expandable-step-list.ts index ec83fac4f0..cdea930037 100644 --- a/app/components/expandable-step-list.ts +++ b/app/components/expandable-step-list.ts @@ -36,9 +36,8 @@ export default class ExpandableStepListComponent extends Component { super(owner, args); const firstIncompleteStep = this.firstIncompleteStep; - const firstStep = this.args.steps[0]; - if (firstIncompleteStep && firstStep && firstIncompleteStep.id !== firstStep.id) { + if (firstIncompleteStep) { this.expandedStepId = firstIncompleteStep.id; } } diff --git a/app/components/expandable-step-list/step.hbs b/app/components/expandable-step-list/step.hbs index 638088bc26..fc862c0b2b 100644 --- a/app/components/expandable-step-list/step.hbs +++ b/app/components/expandable-step-list/step.hbs @@ -15,35 +15,10 @@ {{svg-jar "check-circle" class="w-6 h-6 text-teal-500"}} {{/if}} - -
- {{#if (and @isExpanded @step.isComplete @nextIncompleteStep)}} - -
- {{svg-jar "arrow-down" class="w-3 h-3"}} - Next Step -
-
- {{else if (and (not @isExpanded) @isFirstIncompleteStep)}} - -
- {{svg-jar "arrow-down" class="w-3 fill-current"}} - Expand -
-
- {{/if}} -
- {{#if (and @isExpanded (not @step.isComplete) @step.canBeCompletedManually)}} - -
- {{svg-jar "check-circle" class="w-4 h-4"}} - Mark as complete -
-
- {{else if (and @isExpanded @step.isComplete (not @nextIncompleteStep))}} + {{#if (and @isExpanded @step.isComplete (not @nextIncompleteStep))}}
{{svg-jar "arrow-up" class="w-3 h-3"}} diff --git a/app/controllers/course/stage/instructions.ts b/app/controllers/course/stage/instructions.ts index 98de308c4c..8d35d151de 100644 --- a/app/controllers/course/stage/instructions.ts +++ b/app/controllers/course/stage/instructions.ts @@ -53,10 +53,6 @@ export default class CourseStageInstructionsController extends Controller { return !this.currentStep.courseStage.isFirst && this.currentStep.status === 'complete'; } - get shouldShowLanguageGuide() { - return !this.model.courseStage.isFirst && !!this.languageGuide; - } - get shouldShowPrerequisites() { return !!this.prerequisiteInstructionsMarkdown; } diff --git a/app/models/course-stage.ts b/app/models/course-stage.ts index f4fce3f086..3b54b45a88 100644 --- a/app/models/course-stage.ts +++ b/app/models/course-stage.ts @@ -142,6 +142,19 @@ Our interactive concepts can help with this: return this.course.extensions.filter((extension) => this.secondaryExtensionSlugs.includes(extension.slug)); } + get shortInstructionsMarkdown() { + return ` +In this stage, you'll implement support for handling invalid commands in your shell. + +Example: + +\`\`\` +$ invalid_command +invalid_command: not found +\`\`\` +`; + } + get solutionIsAccessibleToMembersOnly() { return this.position > 3; } diff --git a/app/templates/course/stage/instructions.hbs b/app/templates/course/stage/instructions.hbs index 2687029a8d..f5d848befe 100644 --- a/app/templates/course/stage/instructions.hbs +++ b/app/templates/course/stage/instructions.hbs @@ -40,7 +40,7 @@ @@ -86,13 +86,6 @@ - {{#if this.shouldShowLanguageGuide}} - {{! Extra if condition convinces typescript that languageGuide isn't null }} - {{#if this.languageGuide}} - - {{/if}} - {{/if}} -

Hints

diff --git a/tests/acceptance/course-page/complete-first-stage-test.js b/tests/acceptance/course-page/complete-first-stage-test.js index 1eed05c6a1..80460ed8af 100644 --- a/tests/acceptance/course-page/complete-first-stage-test.js +++ b/tests/acceptance/course-page/complete-first-stage-test.js @@ -40,11 +40,9 @@ module('Acceptance | course-page | complete-first-stage', function (hooks) { await coursePage.firstStageTutorialCard.scrollIntoView(); assert.notOk(coursePage.firstStageTutorialCard.steps[0].isComplete, 'First step is not complete'); - assert.notOk(coursePage.firstStageTutorialCard.steps[0].isExpanded, 'First step is not expanded'); + assert.ok(coursePage.firstStageTutorialCard.steps[0].isExpanded, 'First step is expanded'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isExpanded, 'Second step is not expanded'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isComplete, 'Third step is not complete'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isExpanded, 'Third step is not expanded'); await coursePage.firstStageTutorialCard.steps[0].click(); @@ -52,8 +50,6 @@ module('Acceptance | course-page | complete-first-stage', function (hooks) { assert.ok(coursePage.firstStageTutorialCard.steps[0].isExpanded, 'First step is expanded'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isExpanded, 'Second step is not expanded'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isComplete, 'Third step is not complete'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isExpanded, 'Third step is not expanded'); await coursePage.firstStageTutorialCard.clickOnCompleteStepButton(); @@ -61,8 +57,6 @@ module('Acceptance | course-page | complete-first-stage', function (hooks) { assert.notOk(coursePage.firstStageTutorialCard.steps[0].isExpanded, 'First step is collapsed'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); assert.ok(coursePage.firstStageTutorialCard.steps[1].isExpanded, 'Second step is expanded'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isComplete, 'Third step is not complete'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isExpanded, 'Third step is not expanded'); await coursePage.firstStageTutorialCard.clickOnCompleteStepButton(); @@ -78,8 +72,6 @@ module('Acceptance | course-page | complete-first-stage', function (hooks) { assert.notOk(coursePage.firstStageTutorialCard.steps[0].isExpanded, 'First step is collapsed'); assert.ok(coursePage.firstStageTutorialCard.steps[1].isComplete, 'Second step is complete'); assert.notOk(coursePage.firstStageTutorialCard.steps[1].isExpanded, 'Second step is collapsed'); - assert.notOk(coursePage.firstStageTutorialCard.steps[2].isExpanded, 'Third step is collapsed'); - assert.ok(coursePage.firstStageTutorialCard.steps[2].isComplete, 'Third step is complete'); await coursePage.testRunnerCard.clickOnMarkStageAsCompleteButton(); diff --git a/tests/acceptance/course-page/complete-second-stage-test.js b/tests/acceptance/course-page/complete-second-stage-test.js index e2c7aae32b..bfecc21fe2 100644 --- a/tests/acceptance/course-page/complete-second-stage-test.js +++ b/tests/acceptance/course-page/complete-second-stage-test.js @@ -38,11 +38,9 @@ module('Acceptance | course-page | complete-second-stage', function (hooks) { await catalogPage.clickOnCourse('Build your own Dummy'); assert.notOk(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is not complete'); - assert.notOk(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is not expanded'); + assert.ok(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is expanded'); assert.notOk(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); assert.notOk(coursePage.secondStageTutorialCard.steps[1].isExpanded, 'Second step is not expanded'); - assert.notOk(coursePage.secondStageTutorialCard.steps[2].isComplete, 'Third step is not complete'); - assert.notOk(coursePage.secondStageTutorialCard.steps[2].isExpanded, 'Third step is not expanded'); await coursePage.secondStageTutorialCard.steps[0].click(); @@ -54,7 +52,7 @@ module('Acceptance | course-page | complete-second-stage', function (hooks) { // TODO: See if we can retain expanded/collapsed state after switching tabs? assert.notOk(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is not complete'); - assert.notOk(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is collapsed'); + assert.ok(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is expanded'); await coursePage.secondStageTutorialCard.steps[0].click(); await coursePage.secondStageTutorialCard.clickOnCompleteStepButton(); @@ -71,18 +69,18 @@ module('Acceptance | course-page | complete-second-stage', function (hooks) { assert.notOk(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); assert.ok(coursePage.secondStageTutorialCard.steps[1].isExpanded, 'Second step is expanded'); - await coursePage.secondStageTutorialCard.clickOnCompleteStepButton(); + await coursePage.secondStageTutorialCard.steps[0].click(); assert.ok(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is complete'); - assert.ok(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is complete'); - assert.notOk(coursePage.secondStageTutorialCard.steps[2].isComplete, 'Third step is not complete'); + assert.notOk(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is not complete'); - assert.notOk(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is collapsed'); + assert.ok(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is expanded'); assert.notOk(coursePage.secondStageTutorialCard.steps[1].isExpanded, 'Second step is collapsed'); - assert.ok(coursePage.secondStageTutorialCard.steps[2].isExpanded, 'Third step is expanded'); + + await coursePage.secondStageTutorialCard.steps[1].click(); // Asserts that we don't show the "To run tests again..." message for a system submission - assert.contains(coursePage.secondStageTutorialCard.steps[2].instructions, 'To run tests, make changes to your code'); + assert.contains(coursePage.secondStageTutorialCard.steps[1].instructions, 'To run tests, make changes to your code'); this.server.create('submission', 'withSuccessStatus', { repository: repository, @@ -94,10 +92,8 @@ module('Acceptance | course-page | complete-second-stage', function (hooks) { assert.ok(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is complete'); assert.ok(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is complete'); - assert.ok(coursePage.secondStageTutorialCard.steps[2].isComplete, 'Third step is complete'); assert.notOk(coursePage.secondStageTutorialCard.steps[0].isExpanded, 'First step is collapsed'); assert.notOk(coursePage.secondStageTutorialCard.steps[1].isExpanded, 'Second step is collapsed'); - assert.notOk(coursePage.secondStageTutorialCard.steps[2].isExpanded, 'Third step is collapsed'); assert.ok(coursePage.testRunnerCard.isExpanded, 'Test runner card is expanded'); await coursePage.testRunnerCard.clickOnMarkStageAsCompleteButton(); @@ -136,7 +132,6 @@ module('Acceptance | course-page | complete-second-stage', function (hooks) { assert.ok(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is complete'); assert.ok(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is complete'); - assert.ok(coursePage.secondStageTutorialCard.steps[2].isComplete, 'Third step is complete'); assert.ok(coursePage.testRunnerCard.isExpanded, 'Test runner card is expanded'); assert.notOk(coursePage.testRunnerCard.markStageAsCompleteButton.isVisible, 'Mark stage as complete button is not visible'); diff --git a/tests/acceptance/course-page/complete-stage-without-changes-test.js b/tests/acceptance/course-page/complete-stage-without-changes-test.js index 38526ff36f..6d59e469d3 100644 --- a/tests/acceptance/course-page/complete-stage-without-changes-test.js +++ b/tests/acceptance/course-page/complete-stage-without-changes-test.js @@ -76,7 +76,6 @@ module('Acceptance | course-page | complete-stage-without-changes', function (ho assert.ok(coursePage.secondStageTutorialCard.steps[0].isComplete, 'First step is complete'); assert.ok(coursePage.secondStageTutorialCard.steps[1].isComplete, 'Second step is complete'); - assert.ok(coursePage.secondStageTutorialCard.steps[2].isComplete, 'Third step is complete'); assert.ok(coursePage.testRunnerCard.isExpanded, 'Test runner card is expanded'); assert.notOk(coursePage.testRunnerCard.markStageAsCompleteButton.isVisible, 'Mark stage as complete button is not visible'); diff --git a/tests/acceptance/course-page/course-stage-solutions-test.js b/tests/acceptance/course-page/course-stage-solutions-test.js index 72b0720db6..380fab99b9 100644 --- a/tests/acceptance/course-page/course-stage-solutions-test.js +++ b/tests/acceptance/course-page/course-stage-solutions-test.js @@ -38,18 +38,26 @@ module('Acceptance | course-page | course-stage-solutions', function (hooks) { await catalogPage.visit(); await catalogPage.clickOnCourse('Build your own Redis'); - - await coursePage.secondStageTutorialCard.clickOnExpandStepButton(); - await coursePage.secondStageTutorialCard.clickOnCompleteStepButton(); }); test('can view solution', async function (assert) { + assert.ok(coursePage.secondStageTutorialCard.hasFileDiffCard, 'Expect file diff card to be visible'); + + assert.ok(coursePage.secondStageTutorialCard.hasSolutionBlurredOverlay, 'Expect solution blurred overlay to be visible'); assert.ok(coursePage.secondStageTutorialCard.hasRevealSolutionButton, 'Expect reveal solution button to be visible'); + assert.notOk(coursePage.secondStageTutorialCard.hasHideSolutionButton, 'Expect hide solution button to be hidden'); await percySnapshot('Second Stage Solution - Before Reveal'); - await coursePage.secondStageTutorialCard.clickOnRevealSolutionButton(); - assert.false(coursePage.secondStageTutorialCard.hasRevealSolutionButton, 'Expect reveal solution button to be hidden'); - assert.ok(coursePage.secondStageTutorialCard.hasFileDiffCard, 'Expect file diff card to be visible'); + await coursePage.secondStageTutorialCard.clickOnSolutionBlurredOverlay(); + assert.notOk(coursePage.secondStageTutorialCard.hasSolutionBlurredOverlay, 'Expect solution blurred overlay to be hidden'); + assert.notOk(coursePage.secondStageTutorialCard.hasRevealSolutionButton, 'Expect reveal solution button to be hidden'); + assert.ok(coursePage.secondStageTutorialCard.hasHideSolutionButton, 'Expect hide solution button to be visible'); await percySnapshot('Second Stage Solution - After Reveal'); + + await coursePage.secondStageTutorialCard.clickOnHideSolutionButton(); + assert.ok(coursePage.secondStageTutorialCard.hasSolutionBlurredOverlay, 'Expect solution blurred overlay to be visible'); + assert.ok(coursePage.secondStageTutorialCard.hasRevealSolutionButton, 'Expect reveal solution button to be visible'); + assert.notOk(coursePage.secondStageTutorialCard.hasHideSolutionButton, 'Expect hide solution button to be hidden'); + await percySnapshot('Second Stage Solution - After Hide'); }); }); diff --git a/tests/acceptance/course-page/language-guides-test.js b/tests/acceptance/course-page/language-guides-test.js index c2483e69bb..5dd679747d 100644 --- a/tests/acceptance/course-page/language-guides-test.js +++ b/tests/acceptance/course-page/language-guides-test.js @@ -24,67 +24,28 @@ module('Acceptance | course-page | language-guides', function (hooks) { language: python, }); - this.server.create('repository', 'withFirstStageCompleted', { - course: redis, - language: python, - user: currentUser, - }); - - await catalogPage.visit(); - await catalogPage.clickOnCourse('Build your own Redis'); - - document.getElementById('language-guide-card')?.scrollIntoView(); - - await coursePage.languageGuideCard.clickOnExpandButton(); - await coursePage.languageGuideCard.clickOnCollapseButton(); - await coursePage.languageGuideCard.clickOnExpandButton(); - - assert.strictEqual( - coursePage.languageGuideCard.text, - 'Python Guide BETA Share Feedback In this stage, blah blah… Collapse', - 'Language guide card displays the correct content', - ); - }); - - test('can submit feedback for language guides', async function (assert) { - testScenario(this.server); - signInAsStaff(this.owner, this.server); - - let currentUser = this.server.schema.users.first(); - let go = this.server.schema.languages.findBy({ name: 'Go' }); - let redis = this.server.schema.courses.findBy({ slug: 'redis' }); - - this.server.create('course-stage-language-guide', { - markdownForBeginner: 'In this stage, blah blah...', + this.server.create('course-stage-solution', { + changedFiles: [ + { + diff: '@@ -1,10 +1,11 @@\n import socket # noqa: F401\n\n\n def main():\n server_socket = socket.create_server(("localhost", 6379), reuse_port=True)\n- server_socket.accept() # wait for client\n+ connection, _ = server_socket.accept()\n+ connection.sendall(b"+PONG\\r\\n")\n\n\n if __name__ == "__main__":\n main()\n', + filename: 'app/main.py', + }, + ], courseStage: redis.stages.models.sortBy('position')[1], - language: go, + language: python, }); this.server.create('repository', 'withFirstStageCompleted', { course: redis, - language: go, + language: python, user: currentUser, }); await catalogPage.visit(); await catalogPage.clickOnCourse('Build your own Redis'); - document.getElementById('language-guide-card')?.scrollIntoView(); - - await coursePage.languageGuideCard.clickOnExpandButton(); - assert.strictEqual( - coursePage.languageGuideCard.text, - 'Go Guide BETA Share Feedback In this stage, blah blah… Collapse', - 'Language guide card displays the correct content', - ); - - const feedbackDropdown = coursePage.languageGuideCard.feedbackDropdown; - await feedbackDropdown.toggle(); - await feedbackDropdown.fillInExplanation('This is test feedback for language guides'); - await feedbackDropdown.clickOnSendButton(); + await coursePage.secondStageTutorialCard.clickOnSolutionBlurredOverlay(); - const feedbackSubmission = this.server.schema.siteFeedbackSubmissions.first(); - assert.strictEqual(feedbackSubmission.source, 'course_stage_language_guide'); - assert.strictEqual(JSON.stringify(feedbackSubmission.sourceMetadata), JSON.stringify({ language_slug: 'go' })); + assert.strictEqual(coursePage.languageGuideCard.text, 'In this stage, blah blah…', 'Language guide card displays the correct content'); }); }); diff --git a/tests/pages/components/course-page/course-stage-step/second-stage-tutorial-card.ts b/tests/pages/components/course-page/course-stage-step/second-stage-tutorial-card.ts index 341e848327..63978f6479 100644 --- a/tests/pages/components/course-page/course-stage-step/second-stage-tutorial-card.ts +++ b/tests/pages/components/course-page/course-stage-step/second-stage-tutorial-card.ts @@ -2,10 +2,12 @@ import { clickable, collection, isVisible, text } from 'ember-cli-page-object'; export default { clickOnCompleteStepButton: clickable('[data-test-complete-step-button]'), - clickOnExpandStepButton: clickable('[data-test-expand-step-button]'), - clickOnRevealSolutionButton: clickable('[data-test-reveal-solution-button]'), + clickOnHideSolutionButton: clickable('[data-test-hide-solution-button]'), + clickOnSolutionBlurredOverlay: clickable('[data-test-solution-blurred-overlay]'), hasFileDiffCard: isVisible('[data-test-file-diff-card]'), + hasHideSolutionButton: isVisible('[data-test-hide-solution-button]'), hasRevealSolutionButton: isVisible('[data-test-reveal-solution-button]'), + hasSolutionBlurredOverlay: isVisible('[data-test-solution-blurred-overlay]'), hasScreencastsLink: isVisible('[data-test-screencasts-link]'), scope: '#second-stage-tutorial-card',