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