From 8acaa39cc0010f8856fe5aa08ac83167888c9fd9 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Fri, 26 Jul 2024 12:29:51 +0900 Subject: [PATCH 1/2] Serialize lint_profile for code replies --- .../app/submissions/domain/model/Reply.kt | 8 +-- .../org/hyperskill/ReplySerializationTest.kt | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/submissions/domain/model/Reply.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/submissions/domain/model/Reply.kt index 9e6bdc7628..b461ba2b23 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/submissions/domain/model/Reply.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/submissions/domain/model/Reply.kt @@ -40,14 +40,16 @@ data class Reply( @SerialName("lines") val lines: List? = null, @SerialName("prompt") - val prompt: String? = null + val prompt: String? = null, + @SerialName("lint_profile") + val lintProfile: String? = "" ) { companion object { internal const val PROMPT_MANUALLY_CONFIRMED_SCORE: Float = 1F - fun code(code: String?, language: String?): Reply = - Reply(code = code, language = language) + fun code(code: String?, language: String?, lintProfile: String? = null): Reply = + Reply(code = code, language = language, lintProfile = lintProfile) fun sql(sqlCode: String?): Reply = Reply(solveSql = sqlCode) diff --git a/shared/src/commonTest/kotlin/org/hyperskill/ReplySerializationTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/ReplySerializationTest.kt index 8d55cf2307..f0ad9d9a8a 100644 --- a/shared/src/commonTest/kotlin/org/hyperskill/ReplySerializationTest.kt +++ b/shared/src/commonTest/kotlin/org/hyperskill/ReplySerializationTest.kt @@ -3,6 +3,7 @@ package org.hyperskill import kotlin.test.Test import kotlin.test.assertEquals import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.buildJsonObject @@ -298,4 +299,56 @@ class ReplySerializationTest { ) assertEquals(expectedReply, decodedReply) } + + @Test + fun `Code Reply serialization with nullable lint_profile`() { + val json = NetworkModule.provideJson() + val encodedValue = json.encodeToJsonElement( + Reply.code( + code = "code", + language = "language" + ) + ) + val expected = buildJsonObject { + put("code", JsonPrimitive("code")) + put("language", JsonPrimitive("language")) + put("lint_profile", JsonNull) + } + assertEquals(expected, encodedValue) + } + + @Test + fun `Code Reply serialization with provided lint_profile`() { + val json = NetworkModule.provideJson() + val encodedValue = json.encodeToJsonElement( + Reply.code( + code = "code", + language = "language", + lintProfile = "lint_profile" + ) + ) + val expected = buildJsonObject { + put("code", JsonPrimitive("code")) + put("language", JsonPrimitive("language")) + put("lint_profile", JsonPrimitive("lint_profile")) + } + assertEquals(expected, encodedValue) + } + + @Test + fun `Code Reply serialization with default lint_profile`() { + val json = NetworkModule.provideJson() + val encodedValue = json.encodeToJsonElement( + Reply.code( + code = "code", + language = "language", + lintProfile = "" + ) + ) + val expected = buildJsonObject { + put("code", JsonPrimitive("code")) + put("language", JsonPrimitive("language")) + } + assertEquals(expected, encodedValue) + } } \ No newline at end of file From ada4c7dc14f6021b1cedc7c187c00ed0c2e5fe84 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Fri, 26 Jul 2024 12:37:23 +0900 Subject: [PATCH 2/2] iOS: Update create code reply --- .../Extensions/Shared/Model/ReplyExtensions.swift | 3 ++- .../StepQuizCode/StepQuizCodeViewModel.swift | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/Shared/Model/ReplyExtensions.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/Shared/Model/ReplyExtensions.swift index 824bd046ca..ce7e69bb26 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/Shared/Model/ReplyExtensions.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/Shared/Model/ReplyExtensions.swift @@ -44,7 +44,8 @@ extension Reply { solution: solution, checkProfile: checkProfile, lines: lines, - prompt: nil + prompt: nil, + lintProfile: nil ) } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCode/StepQuizCodeViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCode/StepQuizCodeViewModel.swift index 8caee6e54e..7185b48ae2 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCode/StepQuizCodeViewModel.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StepQuizSubmodules/StepQuizCode/StepQuizCodeViewModel.swift @@ -82,7 +82,11 @@ class StepQuizCodeViewModel: ObservableObject { extension StepQuizCodeViewModel: StepQuizChildQuizInputProtocol { @objc func createReply() -> Reply { - Reply(language: viewData.languageStringValue, code: viewData.code) + Reply.Companion.shared.code( + code: viewData.code, + language: viewData.languageStringValue, + lintProfile: nil + ) } func update(step: Step, dataset: Dataset, reply: Reply?) { @@ -148,7 +152,11 @@ extension StepQuizCodeViewModel: StepQuizCodeFullScreenOutputProtocol { @objc func syncReply(code: String?) { - let reply = Reply.Companion.shared.code(code: code, language: viewData.languageStringValue) + let reply = Reply.Companion.shared.code( + code: code, + language: viewData.languageStringValue, + lintProfile: nil + ) moduleOutput?.handleChildQuizSync(reply: reply) } }