fix(#1375): treat required profile like any required param in the contract check (#1397)

This commit is contained in:
m57 authored and GitHub committed 2026-09-30 01:42:37 +03:00
1 parent 6baade0f7f
commit ee1d7a0b75
2 files changed
+7 -7

No files matched your search

@@ -103,10 +103,9 @@ object GatewayContract {
} }
} }
val missingRequired = // No exemptions: decorate() skips injection when no profile is active, so a required `profile`
required.filter { reqName -> // must be declared like any other required param.
reqName !in elementNames && reqName != "profile" val missingRequired = required.filter { it !in elementNames }
}
for (missing in missingRequired) { for (missing in missingRequired) {
problems += "$method: missing required param '$missing'" problems += "$method: missing required param '$missing'"
} }
@@ -94,13 +94,14 @@ class ParamsDescriptorCheckTest {
} }
@Test @Test
fun omittingProfilePassesEvenWhenRequiredBySchema() { fun omittingRequiredProfileIsRejectedLikeAnyRequiredParam() {
// bot_relay.deliver has required: ["profile", "message"] // bot_relay.deliver has required: ["profile", "message"]. Profile injection is skipped when no
// profile is active, so `profile` gets no special treatment: the params class must declare it.
val problems = val problems =
GatewayContract.paramsDescriptorProblems( GatewayContract.paramsDescriptorProblems(
"bot_relay.deliver", "bot_relay.deliver",
DeliverMissingProfileParams.serializer().descriptor, DeliverMissingProfileParams.serializer().descriptor,
) )
assertTrue(problems.joinToString("\n"), problems.isEmpty()) assertEquals(1, problems.count { "missing required param 'profile'" in it })
} }
} }