From a6aff6504fe2f115548d1a9a3a491f4c85b18cd9 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Thu, 19 Sep 2024 12:06:50 +0900 Subject: [PATCH] Update ids & animation --- .../StepQuizCodeBlanksActionButton.swift | 15 ++++-- .../StepQuizCodeBlanksActionButtonsView.swift | 10 +++- .../StepQuizCodeBlanksCodeBlocksView.swift | 3 +- .../presentation/StepQuizCodeBlanksFeature.kt | 17 ++++--- .../StepQuizCodeBlanksOnboardingReducer.kt | 50 ++++++++++++++---- .../presentation/StepQuizCodeBlanksReducer.kt | 51 ++++++++++++------- .../StepQuizCodeBlanksViewStateMapper.kt | 2 +- .../view/model/StepQuizCodeBlanksViewState.kt | 8 ++- ...StepQuizCodeBlanksReducerOnboardingTest.kt | 33 +++++++++--- ...CodeBlanksReducerSpaceButtonClickedTest.kt | 2 +- ...zCodeBlanksReducerSuggestionClickedTest.kt | 10 ++-- .../view/StepQuizCodeBlanksViewStateTest.kt | 19 +++++-- 12 files changed, 157 insertions(+), 63 deletions(-) diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButton.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButton.swift index 54ae95110..97288d952 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButton.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButton.swift @@ -58,8 +58,15 @@ extension StepQuizCodeBlanksActionButton { ) } - static func enter(action: @escaping () -> Void) -> StepQuizCodeBlanksActionButton { - StepQuizCodeBlanksActionButton(imageSystemName: "return", action: action) + static func enter( + isAnimationEffectActive: Bool, + action: @escaping () -> Void + ) -> StepQuizCodeBlanksActionButton { + StepQuizCodeBlanksActionButton( + imageSystemName: "return", + isAnimationEffectActive: isAnimationEffectActive, + action: action + ) } static func space( @@ -98,14 +105,14 @@ extension StepQuizCodeBlanksActionButton { VStack { HStack { StepQuizCodeBlanksActionButton.delete(isAnimationEffectActive: false, action: {}) - StepQuizCodeBlanksActionButton.enter(action: {}) + StepQuizCodeBlanksActionButton.enter(isAnimationEffectActive: false, action: {}) StepQuizCodeBlanksActionButton.space(isAnimationEffectActive: false, action: {}) StepQuizCodeBlanksActionButton.decreaseIndentLevel(action: {}) } HStack { StepQuizCodeBlanksActionButton.delete(isAnimationEffectActive: false, action: {}) - StepQuizCodeBlanksActionButton.enter(action: {}) + StepQuizCodeBlanksActionButton.enter(isAnimationEffectActive: false, action: {}) StepQuizCodeBlanksActionButton.space(isAnimationEffectActive: false, action: {}) StepQuizCodeBlanksActionButton.decreaseIndentLevel(action: {}) } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButtonsView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButtonsView.swift index f06b0d607..c3d3eee88 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButtonsView.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/ActionButtons/StepQuizCodeBlanksActionButtonsView.swift @@ -6,6 +6,7 @@ struct StepQuizCodeBlanksActionButtonsView: View { let isDecreaseIndentLevelButtonHidden: Bool let isDeleteButtonHighlightEffectActive: Bool + let isEnterButtonHighlightEffectActive: Bool let isSpaceButtonHighlightEffectActive: Bool let onSpaceTap: () -> Void @@ -38,7 +39,10 @@ struct StepQuizCodeBlanksActionButtonsView: View { .disabled(!isDeleteButtonEnabled) StepQuizCodeBlanksActionButton - .enter(action: onEnterTap) + .enter( + isAnimationEffectActive: isEnterButtonHighlightEffectActive, + action: onEnterTap + ) } .padding(.horizontal) } @@ -51,7 +55,8 @@ struct StepQuizCodeBlanksActionButtonsView: View { isDeleteButtonEnabled: false, isSpaceButtonHidden: false, isDecreaseIndentLevelButtonHidden: false, - isDeleteButtonHighlightEffectActive: false, + isDeleteButtonHighlightEffectActive: false, + isEnterButtonHighlightEffectActive: false, isSpaceButtonHighlightEffectActive: true, onSpaceTap: {}, onDeleteTap: {}, @@ -64,6 +69,7 @@ struct StepQuizCodeBlanksActionButtonsView: View { isSpaceButtonHidden: true, isDecreaseIndentLevelButtonHidden: true, isDeleteButtonHighlightEffectActive: true, + isEnterButtonHighlightEffectActive: true, isSpaceButtonHighlightEffectActive: false, onSpaceTap: {}, onDeleteTap: {}, diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/StepQuizCodeBlanksCodeBlocksView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/StepQuizCodeBlanksCodeBlocksView.swift index acb66cf80..976268f31 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/StepQuizCodeBlanksCodeBlocksView.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCodeBlanks/Views/CodeBlocks/StepQuizCodeBlanksCodeBlocksView.swift @@ -39,7 +39,8 @@ struct StepQuizCodeBlanksCodeBlocksView: View { isDeleteButtonEnabled: state.isDeleteButtonEnabled, isSpaceButtonHidden: state.isSpaceButtonHidden, isDecreaseIndentLevelButtonHidden: state.isDecreaseIndentLevelButtonHidden, - isDeleteButtonHighlightEffectActive: state.isDeleteButtonHighlightEffectActive, + isDeleteButtonHighlightEffectActive: state.isDeleteButtonHighlightEffectActive, + isEnterButtonHighlightEffectActive: state.isEnterButtonHighlightEffectActive, isSpaceButtonHighlightEffectActive: state.isSpaceButtonHighlightEffectActive, onSpaceTap: onSpaceTap, onDeleteTap: onDeleteTap, diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksFeature.kt index 667193697..421cdaa10 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksFeature.kt @@ -23,16 +23,16 @@ object StepQuizCodeBlanksFeature { ) : State { companion object; - internal val codeBlanksStringsSuggestions: List = + internal val stringsSuggestions: List = step.codeBlanksStringsSuggestions() - internal val codeBlanksVariablesSuggestions: List = + internal val variablesSuggestions: List = step.codeBlanksVariablesSuggestions() - internal val codeBlanksVariablesAndStringsSuggestions: List = - codeBlanksVariablesSuggestions + codeBlanksStringsSuggestions + internal val variablesAndStringsSuggestions: List = + variablesSuggestions + stringsSuggestions - internal val codeBlanksOperationsSuggestions: List = + internal val operationsSuggestions: List = step.codeBlanksOperationsSuggestions() } } @@ -41,11 +41,12 @@ object StepQuizCodeBlanksFeature { data object Unavailable : OnboardingState data object HighlightDeleteButton : OnboardingState + data object HighlightEnterButton : OnboardingState data object HighlightSpaceButton : OnboardingState - sealed interface PrintSuggestionAndCallToAction : OnboardingState { - data object HighlightSuggestions : PrintSuggestionAndCallToAction - data object HighlightCallToActionButton : PrintSuggestionAndCallToAction + sealed interface FirstProgram : OnboardingState { + data object HighlightSuggestions : FirstProgram + data object HighlightCallToActionButton : FirstProgram } } diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksOnboardingReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksOnboardingReducer.kt index 46e84e782..4789e79e8 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksOnboardingReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksOnboardingReducer.kt @@ -7,20 +7,23 @@ import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksF import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksFeature.OnboardingState import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksFeature.State +private typealias StepQuizCodeBlanksOnboardingReducerResult = Pair> + class StepQuizCodeBlanksOnboardingReducer { companion object { - private const val DELETE_BUTTON_STEP_ID = 50969L - private const val SPACE_BUTTON_STEP_ID = 50970L - private val PRINT_SUGGESTION_AND_CALL_TO_ACTION_STEP_IDS = setOf(47329L, 50968L) + internal val FIRST_PROGRAM_STEP_IDS = setOf(47329L, 50984L) + internal const val DELETE_BUTTON_STEP_ID = 50986L + internal const val ENTER_BUTTON_STEP_ID = 50985L + internal const val SPACE_BUTTON_STEP_ID = 50997L } internal fun reduceInitializeMessage( message: InternalMessage.Initialize ): OnboardingState = when (message.step.id) { - in PRINT_SUGGESTION_AND_CALL_TO_ACTION_STEP_IDS -> - OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions + in FIRST_PROGRAM_STEP_IDS -> OnboardingState.FirstProgram.HighlightSuggestions DELETE_BUTTON_STEP_ID -> OnboardingState.HighlightDeleteButton + ENTER_BUTTON_STEP_ID -> OnboardingState.HighlightEnterButton SPACE_BUTTON_STEP_ID -> OnboardingState.HighlightSpaceButton else -> OnboardingState.Unavailable } @@ -29,13 +32,13 @@ class StepQuizCodeBlanksOnboardingReducer { state: State.Content, activeCodeBlock: CodeBlock?, newCodeBlock: CodeBlock - ): Pair> { - val isFulfilledOnboardingPrintCodeBlock = - state.onboardingState is OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions && + ): StepQuizCodeBlanksOnboardingReducerResult { + val isFulfilledFirstProgramOnboarding = + state.onboardingState is OnboardingState.FirstProgram.HighlightSuggestions && activeCodeBlock is CodeBlock.Print && activeCodeBlock.hasAnyUnselectedChild() && newCodeBlock is CodeBlock.Print && newCodeBlock.areAllChildrenSelected() - return if (isFulfilledOnboardingPrintCodeBlock) { - OnboardingState.PrintSuggestionAndCallToAction.HighlightCallToActionButton to + return if (isFulfilledFirstProgramOnboarding) { + OnboardingState.FirstProgram.HighlightCallToActionButton to setOf( InternalAction.ParentFeatureActionRequested( StepQuizCodeBlanksFeature.ParentFeatureAction.HighlightCallToActionButton @@ -45,4 +48,31 @@ class StepQuizCodeBlanksOnboardingReducer { state.onboardingState to emptySet() } } + + internal fun reduceDeleteButtonClickedMessage( + state: State.Content + ): StepQuizCodeBlanksOnboardingReducerResult = + if (state.onboardingState is OnboardingState.HighlightDeleteButton) { + OnboardingState.Unavailable to emptySet() + } else { + state.onboardingState to emptySet() + } + + internal fun reduceEnterButtonClickedMessage( + state: State.Content + ): StepQuizCodeBlanksOnboardingReducerResult = + if (state.onboardingState is OnboardingState.HighlightEnterButton) { + OnboardingState.Unavailable to emptySet() + } else { + state.onboardingState to emptySet() + } + + internal fun reduceSpaceButtonClickedMessage( + state: State.Content + ): StepQuizCodeBlanksOnboardingReducerResult = + if (state.onboardingState is OnboardingState.HighlightSpaceButton) { + OnboardingState.Unavailable to emptySet() + } else { + state.onboardingState to emptySet() + } } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducer.kt index 455559ee4..ce3e9db99 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducer.kt @@ -87,7 +87,7 @@ class StepQuizCodeBlanksReducer( children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = state.codeBlanksVariablesAndStringsSuggestions, + suggestions = state.variablesAndStringsSuggestions, selectedSuggestion = null ) ) @@ -98,12 +98,12 @@ class StepQuizCodeBlanksReducer( children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = state.codeBlanksVariablesSuggestions, + suggestions = state.variablesSuggestions, selectedSuggestion = null ), CodeBlockChild.SelectSuggestion( isActive = false, - suggestions = state.codeBlanksStringsSuggestions, + suggestions = state.stringsSuggestions, selectedSuggestion = null ) ) @@ -114,7 +114,7 @@ class StepQuizCodeBlanksReducer( children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = state.codeBlanksVariablesAndStringsSuggestions, + suggestions = state.variablesAndStringsSuggestions, selectedSuggestion = null ) ) @@ -125,7 +125,7 @@ class StepQuizCodeBlanksReducer( children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = state.codeBlanksVariablesAndStringsSuggestions, + suggestions = state.variablesAndStringsSuggestions, selectedSuggestion = null ) ) @@ -511,7 +511,13 @@ class StepQuizCodeBlanksReducer( } } - return state.copy(codeBlocks = newCodeBlocks) to actions + val (onboardingState, onboardingActions) = + stepQuizCodeBlanksOnboardingReducer.reduceDeleteButtonClickedMessage(state) + + return state.copy( + codeBlocks = newCodeBlocks, + onboardingState = onboardingState + ) to actions + onboardingActions } private fun handleEnterButtonClicked( @@ -564,7 +570,13 @@ class StepQuizCodeBlanksReducer( ) } - state.copy(codeBlocks = newCodeBlocks) to actions + val (onboardingState, onboardingActions) = + stepQuizCodeBlanksOnboardingReducer.reduceEnterButtonClickedMessage(state) + + state.copy( + codeBlocks = newCodeBlocks, + onboardingState = onboardingState + ) to actions + onboardingActions } else { state to actions } @@ -603,20 +615,19 @@ class StepQuizCodeBlanksReducer( val newChildSuggestions = when { activeChild.selectedSuggestion?.isOpeningParentheses == true -> - state.codeBlanksVariablesSuggestions + state.codeBlanksStringsSuggestions + state.variablesSuggestions + state.stringsSuggestions activeChild.selectedSuggestion?.isClosingParentheses == true -> - state.codeBlanksOperationsSuggestions + state.operationsSuggestions - activeChild.selectedSuggestion in state.codeBlanksStringsSuggestions || - activeChild.selectedSuggestion in state.codeBlanksVariablesSuggestions -> - state.codeBlanksOperationsSuggestions + activeChild.selectedSuggestion in state.stringsSuggestions || + activeChild.selectedSuggestion in state.variablesSuggestions -> + state.operationsSuggestions - activeChild.selectedSuggestion in state.codeBlanksOperationsSuggestions -> - state.codeBlanksVariablesSuggestions + state.codeBlanksStringsSuggestions + activeChild.selectedSuggestion in state.operationsSuggestions -> + state.variablesSuggestions + state.stringsSuggestions - else -> - state.codeBlanksOperationsSuggestions + state.codeBlanksVariablesAndStringsSuggestions + else -> state.operationsSuggestions + state.variablesAndStringsSuggestions } val newChild = CodeBlockChild.SelectSuggestion( @@ -644,7 +655,13 @@ class StepQuizCodeBlanksReducer( } } - return state.copy(codeBlocks = newCodeBlocks) to actions + val (onboardingState, onboardingActions) = + stepQuizCodeBlanksOnboardingReducer.reduceSpaceButtonClickedMessage(state) + + return state.copy( + codeBlocks = newCodeBlocks, + onboardingState = onboardingState + ) to actions + onboardingActions } private fun handleDecreaseIndentLevelButtonClicked( diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/mapper/StepQuizCodeBlanksViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/mapper/StepQuizCodeBlanksViewStateMapper.kt index 60fab28ce..8379c57b8 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/mapper/StepQuizCodeBlanksViewStateMapper.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/mapper/StepQuizCodeBlanksViewStateMapper.kt @@ -84,7 +84,7 @@ object StepQuizCodeBlanksViewStateMapper { null -> false } - val isSpaceButtonHidden = if (state.codeBlanksOperationsSuggestions.isNotEmpty()) { + val isSpaceButtonHidden = if (state.operationsSuggestions.isNotEmpty()) { when (activeCodeBlock) { is CodeBlock.Print, is CodeBlock.IfStatement, diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/model/StepQuizCodeBlanksViewState.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/model/StepQuizCodeBlanksViewState.kt index 23f426c7c..23c0a6af4 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/model/StepQuizCodeBlanksViewState.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz_code_blanks/view/model/StepQuizCodeBlanksViewState.kt @@ -16,8 +16,9 @@ sealed interface StepQuizCodeBlanksViewState { ) : StepQuizCodeBlanksViewState { val isActionButtonsHidden: Boolean get() = when (onboardingState) { - is OnboardingState.PrintSuggestionAndCallToAction -> true + is OnboardingState.FirstProgram -> true OnboardingState.HighlightDeleteButton, + OnboardingState.HighlightEnterButton, OnboardingState.HighlightSpaceButton, OnboardingState.Unavailable -> false } @@ -25,11 +26,14 @@ sealed interface StepQuizCodeBlanksViewState { val isDeleteButtonHighlightEffectActive: Boolean get() = isDeleteButtonEnabled && onboardingState == OnboardingState.HighlightDeleteButton + val isEnterButtonHighlightEffectActive: Boolean + get() = onboardingState == OnboardingState.HighlightEnterButton + val isSpaceButtonHighlightEffectActive: Boolean get() = !isSpaceButtonHidden && onboardingState == OnboardingState.HighlightSpaceButton val isSuggestionsHighlightEffectActive: Boolean - get() = onboardingState == OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions + get() = onboardingState == OnboardingState.FirstProgram.HighlightSuggestions } sealed interface CodeBlockItem { diff --git a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerOnboardingTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerOnboardingTest.kt index ccc3b5011..ec2d1e7bf 100644 --- a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerOnboardingTest.kt +++ b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerOnboardingTest.kt @@ -9,6 +9,7 @@ import org.hyperskill.app.step_quiz_code_blanks.domain.model.CodeBlockChild import org.hyperskill.app.step_quiz_code_blanks.domain.model.Suggestion import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksFeature import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksFeature.OnboardingState +import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksOnboardingReducer import org.hyperskill.app.step_quiz_code_blanks.presentation.StepQuizCodeBlanksReducer import org.hyperskill.step.domain.model.stub @@ -28,8 +29,8 @@ class StepQuizCodeBlanksReducerOnboardingTest { } @Test - fun `Onboarding should be available for print suggestion`() { - setOf(47329L, 50968L).forEach { stepId -> + fun `Onboarding should be available for first program`() { + StepQuizCodeBlanksOnboardingReducer.Companion.FIRST_PROGRAM_STEP_IDS.forEach { stepId -> val initialState = StepQuizCodeBlanksFeature.State.Idle val (state, _) = reducer.reduce( initialState, @@ -37,7 +38,7 @@ class StepQuizCodeBlanksReducerOnboardingTest { ) assertTrue(state is StepQuizCodeBlanksFeature.State.Content) - assertTrue(state.onboardingState is OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions) + assertTrue(state.onboardingState is OnboardingState.FirstProgram.HighlightSuggestions) } } @@ -46,19 +47,37 @@ class StepQuizCodeBlanksReducerOnboardingTest { val initialState = StepQuizCodeBlanksFeature.State.Idle val (state, _) = reducer.reduce( initialState, - StepQuizCodeBlanksFeature.InternalMessage.Initialize(Step.stub(id = 50969L)) + StepQuizCodeBlanksFeature.InternalMessage.Initialize( + Step.stub(id = StepQuizCodeBlanksOnboardingReducer.Companion.DELETE_BUTTON_STEP_ID) + ) ) assertTrue(state is StepQuizCodeBlanksFeature.State.Content) assertTrue(state.onboardingState is OnboardingState.HighlightDeleteButton) } + @Test + fun `Onboarding should be available for enter button`() { + val initialState = StepQuizCodeBlanksFeature.State.Idle + val (state, _) = reducer.reduce( + initialState, + StepQuizCodeBlanksFeature.InternalMessage.Initialize( + Step.stub(id = StepQuizCodeBlanksOnboardingReducer.Companion.ENTER_BUTTON_STEP_ID) + ) + ) + + assertTrue(state is StepQuizCodeBlanksFeature.State.Content) + assertTrue(state.onboardingState is OnboardingState.HighlightEnterButton) + } + @Test fun `Onboarding should be available for space button`() { val initialState = StepQuizCodeBlanksFeature.State.Idle val (state, _) = reducer.reduce( initialState, - StepQuizCodeBlanksFeature.InternalMessage.Initialize(Step.stub(id = 50970L)) + StepQuizCodeBlanksFeature.InternalMessage.Initialize( + Step.stub(id = StepQuizCodeBlanksOnboardingReducer.Companion.SPACE_BUTTON_STEP_ID) + ) ) assertTrue(state is StepQuizCodeBlanksFeature.State.Content) @@ -80,13 +99,13 @@ class StepQuizCodeBlanksReducerOnboardingTest { ) ) ), - onboardingState = OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions + onboardingState = OnboardingState.FirstProgram.HighlightSuggestions ) val message = StepQuizCodeBlanksFeature.Message.SuggestionClicked(suggestion) val (state, _) = reducer.reduce(initialState, message) assertTrue(state is StepQuizCodeBlanksFeature.State.Content) - assertEquals(OnboardingState.PrintSuggestionAndCallToAction.HighlightCallToActionButton, state.onboardingState) + assertEquals(OnboardingState.FirstProgram.HighlightCallToActionButton, state.onboardingState) } } \ No newline at end of file diff --git a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSpaceButtonClickedTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSpaceButtonClickedTest.kt index 232d64527..a5dd26733 100644 --- a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSpaceButtonClickedTest.kt +++ b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSpaceButtonClickedTest.kt @@ -203,7 +203,7 @@ class StepQuizCodeBlanksReducerSpaceButtonClickedTest { ), CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = initialState.codeBlanksOperationsSuggestions, + suggestions = initialState.operationsSuggestions, selectedSuggestion = null ) ) diff --git a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSuggestionClickedTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSuggestionClickedTest.kt index a71716ffd..3cf85df5e 100644 --- a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSuggestionClickedTest.kt +++ b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/presentation/StepQuizCodeBlanksReducerSuggestionClickedTest.kt @@ -79,7 +79,7 @@ class StepQuizCodeBlanksReducerSuggestionClickedTest { children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = initialState.codeBlanksStringsSuggestions, + suggestions = initialState.stringsSuggestions, selectedSuggestion = null ) ) @@ -111,12 +111,12 @@ class StepQuizCodeBlanksReducerSuggestionClickedTest { children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = initialState.codeBlanksVariablesSuggestions, + suggestions = initialState.variablesSuggestions, selectedSuggestion = null ), CodeBlockChild.SelectSuggestion( isActive = false, - suggestions = initialState.codeBlanksStringsSuggestions, + suggestions = initialState.stringsSuggestions, selectedSuggestion = null ) ) @@ -148,7 +148,7 @@ class StepQuizCodeBlanksReducerSuggestionClickedTest { children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = initialState.codeBlanksVariablesAndStringsSuggestions, + suggestions = initialState.variablesAndStringsSuggestions, selectedSuggestion = null ) ) @@ -180,7 +180,7 @@ class StepQuizCodeBlanksReducerSuggestionClickedTest { children = listOf( CodeBlockChild.SelectSuggestion( isActive = true, - suggestions = initialState.codeBlanksVariablesAndStringsSuggestions, + suggestions = initialState.variablesAndStringsSuggestions, selectedSuggestion = null ) ) diff --git a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/view/StepQuizCodeBlanksViewStateTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/view/StepQuizCodeBlanksViewStateTest.kt index 2a9f541c8..48e5bfa0e 100644 --- a/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/view/StepQuizCodeBlanksViewStateTest.kt +++ b/shared/src/commonTest/kotlin/org/hyperskill/step_quiz_code_blanks/view/StepQuizCodeBlanksViewStateTest.kt @@ -8,10 +8,10 @@ import org.hyperskill.app.step_quiz_code_blanks.view.model.StepQuizCodeBlanksVie class StepQuizCodeBlanksViewStateTest { @Test - fun `isActionButtonsHidden should be true when onboarding PrintSuggestionAndCallToAction`() { + fun `isActionButtonsHidden should be true when onboarding FirstProgram`() { listOf( - OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions, - OnboardingState.PrintSuggestionAndCallToAction.HighlightCallToActionButton + OnboardingState.FirstProgram.HighlightSuggestions, + OnboardingState.FirstProgram.HighlightCallToActionButton ).forEach { onboardingState -> val viewState = stubContentViewState(onboardingState = onboardingState) assertTrue(viewState.isActionButtonsHidden) @@ -50,6 +50,14 @@ class StepQuizCodeBlanksViewStateTest { assertFalse(viewState.isDeleteButtonHighlightEffectActive) } + @Test + fun `isEnterButtonHighlightEffectActive should be true when onboardingState is HighlightEnterButton`() { + val viewState = stubContentViewState( + onboardingState = OnboardingState.HighlightEnterButton + ) + assertTrue(viewState.isEnterButtonHighlightEffectActive) + } + /* ktlint-disable */ @Test fun `isSpaceButtonHighlightEffectActive should be true when onboardingState is HighlightSpaceButton and isSpaceButtonHidden is false`() { @@ -69,10 +77,11 @@ class StepQuizCodeBlanksViewStateTest { assertFalse(viewState.isSpaceButtonHighlightEffectActive) } + /* ktlint-disable */ @Test - fun `isSuggestionsHighlightEffectActive should be true when onboardingState is HighlightSuggestions`() { + fun `isSuggestionsHighlightEffectActive should be true when onboardingState is FirstProgram_HighlightSuggestions`() { val viewState = stubContentViewState( - onboardingState = OnboardingState.PrintSuggestionAndCallToAction.HighlightSuggestions + onboardingState = OnboardingState.FirstProgram.HighlightSuggestions ) assertTrue(viewState.isSuggestionsHighlightEffectActive) }