Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test runs only with pattern: os != 'android'
- Manifest: browser/components/aiwindow/ui/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
const { OnboardingMessageProvider } = ChromeUtils.importESModule(
"resource:///modules/asrouter/OnboardingMessageProvider.sys.mjs"
);
async function getFeedbackMessage(type) {
const messages = await OnboardingMessageProvider.getUntranslatedMessages();
const id =
type === "thumbs-up"
? "SMARTWINDOW_FEEDBACK_MODAL_POSITIVE"
: "SMARTWINDOW_FEEDBACK_MODAL_NEGATIVE";
return messages.find(m => m.id === id);
}
add_task(async function test_thumbs_up_has_no_multiselect() {
const message = await getFeedbackMessage("thumbs-up");
const tiles = message.content.screens[0].content.tiles;
const hasMultiselect = tiles.some(t => t.type === "multiselect");
Assert.ok(!hasMultiselect, "thumbs-up modal should not include multiselect");
});
add_task(async function test_thumbs_down_has_multiselect() {
const message = await getFeedbackMessage("thumbs-down");
const tiles = message.content.screens[0].content.tiles;
const multiselect = tiles.find(t => t.type === "multiselect");
Assert.ok(multiselect, "thumbs-down modal should include multiselect");
});
add_task(async function test_thumbs_down_reasons_use_string_ids() {
const message = await getFeedbackMessage("thumbs-down");
const tiles = message.content.screens[0].content.tiles;
const multiselect = tiles.find(t => t.type === "multiselect");
Assert.ok(
multiselect.data.every(r => r.label?.string_id),
"all reason labels should use string_id for localization"
);
});
add_task(async function test_both_variants_have_textarea() {
for (const type of ["thumbs-up", "thumbs-down"]) {
const message = await getFeedbackMessage(type);
const tiles = message.content.screens[0].content.tiles;
Assert.ok(
tiles.some(t => t.type === "textarea"),
`${type} modal should include a textarea`
);
}
});
add_task(async function test_learn_more_action_defined() {
for (const type of ["thumbs-up", "thumbs-down"]) {
const message = await getFeedbackMessage(type);
Assert.ok(
message.content.screens[0].content["learn-more"]?.action,
`${type} modal should define a learn_more action`
);
}
});
add_task(async function test_write_in_microsurvey_enabled() {
for (const type of ["thumbs-up", "thumbs-down"]) {
const message = await getFeedbackMessage(type);
Assert.ok(
message.content.write_in_microsurvey,
`${type} modal should have write_in_microsurvey set`
);
}
});
add_task(async function test_positive_negative_have_distinct_message_ids() {
const positiveMessage = await getFeedbackMessage("thumbs-up");
const negativeMessage = await getFeedbackMessage("thumbs-down");
Assert.equal(
positiveMessage.id,
"SMARTWINDOW_FEEDBACK_MODAL_POSITIVE",
"thumbs-up should use SMARTWINDOW_FEEDBACK_MODAL_POSITIVE"
);
Assert.equal(
negativeMessage.id,
"SMARTWINDOW_FEEDBACK_MODAL_NEGATIVE",
"thumbs-down should use SMARTWINDOW_FEEDBACK_MODAL_NEGATIVE"
);
});
add_task(async function test_both_variants_collect_text_input() {
for (const type of ["thumbs-up", "thumbs-down"]) {
const message = await getFeedbackMessage(type);
const action = message.content.screens[0].content.primary_button.action;
Assert.ok(
action.collectTextInput,
`${type} primary button action should have collectTextInput`
);
}
});
add_task(async function test_thumbs_up_submit_disabled_when_no_text() {
const message = await getFeedbackMessage("thumbs-up");
Assert.equal(
message.content.screens[0].content.primary_button.disabled,
"hasTextInput",
"thumbs-up submit button should be disabled when no text input"
);
});
add_task(async function test_thumbs_down_submit_not_disabled() {
const message = await getFeedbackMessage("thumbs-down");
Assert.ok(
!message.content.screens[0].content.primary_button.disabled,
"thumbs-down submit button should not have disabled set (textarea is optional)"
);
});
add_task(async function test_both_variants_use_feedbackThumbClick_trigger() {
for (const type of ["thumbs-up", "thumbs-down"]) {
const message = await getFeedbackMessage(type);
Assert.equal(
message.trigger.id,
"feedbackThumbClick",
`${type} message should use feedbackThumbClick trigger`
);
}
});
add_task(async function test_trigger_params_match_type() {
const positiveMessage = await getFeedbackMessage("thumbs-up");
Assert.ok(
positiveMessage.trigger.params.includes("thumbs-up"),
"thumbs-up message trigger params should include thumbs-up"
);
const negativeMessage = await getFeedbackMessage("thumbs-down");
Assert.ok(
negativeMessage.trigger.params.includes("thumbs-down"),
"thumbs-down message trigger params should include thumbs-down"
);
});