From a84aff783e17cbde951a6069ba9a737fbc5920f9 Mon Sep 17 00:00:00 2001 From: Igor Kirillov Date: Mon, 8 Jun 2026 14:27:56 +0200 Subject: [PATCH 1/2] In case for whatever reason a test file becomes visible during it's life, make it not visible before sending to backend. ^ALT-11013 --- .../academy/learning/submissions/utils.kt | 4 +++- .../hyperskill/HyperskillUploadingTest.kt | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt b/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt index 913a4ea38..d2e2f7d37 100644 --- a/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt +++ b/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt @@ -16,6 +16,7 @@ import org.hyperskill.academy.learning.courseFormat.EduFormatNames.CORRECT import org.hyperskill.academy.learning.courseFormat.TaskFile import org.hyperskill.academy.learning.courseFormat.ext.findTaskFileInDir import org.hyperskill.academy.learning.courseFormat.ext.getDir +import org.hyperskill.academy.learning.courseFormat.ext.isTestFile import org.hyperskill.academy.learning.courseFormat.tasks.Task import org.hyperskill.academy.learning.taskToolWindow.ui.styleManagers.StyleResourcesManager import org.hyperskill.academy.learning.taskToolWindow.ui.styleManagers.TaskToolWindowBundle @@ -40,7 +41,8 @@ fun getSolutionFiles(project: Project, task: Task): List { val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return@runReadAction val text = document.text val builder = StringBuilder(text) - files.add(SolutionFile(taskFile.name, builder.toString(), taskFile.isVisible)) + val isVisible = if (!taskFile.isLearnerCreated && taskFile.isTestFile) false else taskFile.isVisible + files.add(SolutionFile(taskFile.name, builder.toString(), isVisible)) } } diff --git a/intellij-plugin/hs-core/testSrc/org/hyperskill/academy/learning/stepik/hyperskill/HyperskillUploadingTest.kt b/intellij-plugin/hs-core/testSrc/org/hyperskill/academy/learning/stepik/hyperskill/HyperskillUploadingTest.kt index 1645fe483..8de2e98ac 100644 --- a/intellij-plugin/hs-core/testSrc/org/hyperskill/academy/learning/stepik/hyperskill/HyperskillUploadingTest.kt +++ b/intellij-plugin/hs-core/testSrc/org/hyperskill/academy/learning/stepik/hyperskill/HyperskillUploadingTest.kt @@ -21,6 +21,29 @@ class HyperskillUploadingTest : EduTestCase() { } } + @Test + fun `test collect solution files - test file with wrong visible=true is sent as is_visible=false`() { + val course = courseWithFiles( + language = FakeGradleBasedLanguage, + courseProducer = ::HyperskillCourse + ) { + frameworkLesson("lesson1") { + eduTask("task1", stepId = 1) { + taskFile("src/Task.kt", "fun foo() {}", visible = true) + taskFile("test/Tests1.kt", "fun tests1() {}", visible = true) // wrong: visible=true for test file + } + } + } as HyperskillCourse + course.hyperskillProject = HyperskillProject() + course.stages = listOf(HyperskillStage(1, "", 1)) + + val task = course.findTask("lesson1", "task1") + val files = getSolutionFiles(project, task) + assertEquals(2, files.size) + assertEquals(true, files.find { it.name == "src/Task.kt" }?.isVisible) + assertEquals(false, files.find { it.name == "test/Tests1.kt" }?.isVisible) + } + private fun createHyperskillCourse(): HyperskillCourse { val course = courseWithFiles( language = FakeGradleBasedLanguage, From 75fe37e1704092da39166dbd836f639bad8dc148 Mon Sep 17 00:00:00 2001 From: Igor Kirillov Date: Tue, 9 Jun 2026 12:33:19 +0200 Subject: [PATCH 2/2] fixes after review --- .../src/org/hyperskill/academy/learning/submissions/utils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt b/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt index d2e2f7d37..42d59b1d2 100644 --- a/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt +++ b/intellij-plugin/hs-core/src/org/hyperskill/academy/learning/submissions/utils.kt @@ -41,7 +41,7 @@ fun getSolutionFiles(project: Project, task: Task): List { val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return@runReadAction val text = document.text val builder = StringBuilder(text) - val isVisible = if (!taskFile.isLearnerCreated && taskFile.isTestFile) false else taskFile.isVisible + val isVisible = !taskFile.isTestFile && taskFile.isVisible files.add(SolutionFile(taskFile.name, builder.toString(), isVisible)) } }