blob: 698c1e60d35ba8c88dabf8dacbccc08f1510c8dd [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as Host from '../core/host/host.js';
import * as Console from '../panels/console/console.js';
import * as Explain from '../panels/explain/explain.js';
import * as Lit from '../ui/lit/lit.js';
import {createViewFunctionStub} from './ViewFunctionHelpers.js';
function getTestAidaClient() {
return {
async *
doConversation() {
yield {explanation: 'test', metadata: {rpcGlobalId: 0}, completed: true};
},
registerClientEvent: sinon.spy(),
};
}
function getTestPromptBuilder() {
return {
async buildPrompt() {
return {
prompt: '',
sources: [
{
type: Console.PromptBuilder.SourceType.MESSAGE,
value: 'error message',
},
],
isPageReloadRecommended: true,
};
},
getSearchQuery() {
return '';
},
};
}
/**
* Creates and shows an ConsoleInsight instance returning the view
* stubs and the initial view input caused by Widget.show().
*/
export async function createConsoleInsightWidget(options?: Partial<Explain.ViewOutput>&{
aidaAvailability?: Host.AidaClient.AidaAccessPreconditions,
promptBuilder?: Explain.PublicPromptBuilder,
aidaClient?: Explain.PublicAidaClient,
}) {
const output = {
headerRef: options?.headerRef ?? Lit.Directives.createRef<HTMLHeadingElement>(),
citationLinks: options?.citationLinks ?? [],
};
const view = createViewFunctionStub(Explain.ConsoleInsight, output);
let aidaAvailabilityForStub = options?.aidaAvailability ?? Host.AidaClient.AidaAccessPreconditions.AVAILABLE;
const checkAccessPreconditionsStub = sinon.stub(Host.AidaClient.AidaClient, 'checkAccessPreconditions')
.callsFake(() => Promise.resolve(aidaAvailabilityForStub));
const stubAidaCheckAccessPreconditions = (aidaAvailability: Host.AidaClient.AidaAccessPreconditions) => {
aidaAvailabilityForStub = aidaAvailability;
return checkAccessPreconditionsStub;
};
const testPromptBuilder = getTestPromptBuilder();
const testAidaClient = getTestAidaClient();
const component = new Explain.ConsoleInsight(
options?.promptBuilder ?? testPromptBuilder,
options?.aidaClient ?? testAidaClient,
options?.aidaAvailability ?? Host.AidaClient.AidaAccessPreconditions.AVAILABLE,
undefined,
view,
);
await view.nextInput;
return {
component,
view,
output,
stubAidaCheckAccessPreconditions,
testPromptBuilder,
testAidaClient,
};
}