diff --git a/packages/core/src/feedback/vue/submitFeedback.ts b/packages/core/src/feedback/vue/submitFeedback.ts
index a19f81c4079..928c0eb3249 100644
--- a/packages/core/src/feedback/vue/submitFeedback.ts
+++ b/packages/core/src/feedback/vue/submitFeedback.ts
@@ -41,6 +41,10 @@ export class FeedbackWebview extends VueWebview {
return 'Choose a reaction (smile/frown)'
}
+ if (message.comment.length < 188) {
+ return 'Please add atleast 100 characters in the template describing your issue.'
+ }
+
if (this.commentData) {
message.comment = `${message.comment}\n\n${this.commentData}`
}
diff --git a/packages/core/src/feedback/vue/submitFeedback.vue b/packages/core/src/feedback/vue/submitFeedback.vue
index 814223dc3cc..b97233ba494 100644
--- a/packages/core/src/feedback/vue/submitFeedback.vue
+++ b/packages/core/src/feedback/vue/submitFeedback.vue
@@ -34,6 +34,26 @@
>.
+
+
For helpful feedback, please include:
+
+ -
+ Issue: A brief summary of the issue or suggestion
+
+ -
+ Reproduction Steps: Clear steps to reproduce the issue (if
+ applicable)
+
+ -
+ Expected vs. Actual: What you expected and what actually
+ happened
+
+
+
@@ -66,7 +86,16 @@ const client = WebviewClientFactory.create()
export default defineComponent({
data() {
return {
- comment: '',
+ comment: `Issue:
+
+Reproduction Steps:
+1.
+2.
+3.
+
+Expected Behavior:
+
+Actual Behavior: `,
sentiment: '',
isSubmitting: false,
error: '',
diff --git a/packages/core/src/test/feedback/commands/submitFeedbackListener.test.ts b/packages/core/src/test/feedback/commands/submitFeedbackListener.test.ts
index 176e12974ea..3fbf666a6ea 100644
--- a/packages/core/src/test/feedback/commands/submitFeedbackListener.test.ts
+++ b/packages/core/src/test/feedback/commands/submitFeedbackListener.test.ts
@@ -10,9 +10,14 @@ import { FeedbackWebview } from '../../../feedback/vue/submitFeedback'
import sinon from 'sinon'
import { waitUntil } from '../../../shared'
-const comment = 'comment'
+const comment =
+ 'This is a detailed feedback comment that meets the minimum length requirement. ' +
+ 'It includes specific information about the issue, steps to reproduce, expected behavior, and actual behavior. ' +
+ 'This comment is long enough to pass the 188 character validation rule.'
const sentiment = 'Positive'
const message = { command: 'submitFeedback', comment: comment, sentiment: sentiment }
+const shortComment = 'This is a short comment'
+const shortMessage = { command: 'submitFeedback', comment: shortComment, sentiment: sentiment }
describe('submitFeedbackListener', function () {
let mockTelemetry: TelemetryService
@@ -47,5 +52,14 @@ describe('submitFeedbackListener', function () {
const result = await webview.submit(message)
assert.strictEqual(result, expectedError)
})
+
+ it(`validates ${productName} feedback comment length is at least 188 characters`, async function () {
+ const postStub = sinon.stub()
+ mockTelemetry.postFeedback = postStub
+ const webview = new FeedbackWebview(mockTelemetry, productName)
+ const result = await webview.submit(shortMessage)
+ assert.strictEqual(result, 'Please add atleast 100 characters in the template describing your issue.')
+ assert.strictEqual(postStub.called, false, 'postFeedback should not be called for short comments')
+ })
}
})