in packages/core/src/amazonqTest/chat/controller/controller.ts [1093:1243]
private async startLocalBuildExecution(data: any) {
const session: Session = this.sessionStorage.getSession()
// const installationDependencies = session.shortAnswer?.installationDependencies ?? []
// MOCK: ignoring the installation case until backend send response
const installationDependencies: string[] = []
const buildCommands = session.updatedBuildCommands
if (!buildCommands) {
throw new Error('Build command not found')
return
}
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.START_STEP),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
this.messenger.sendUpdatePromptProgress(data.tabID, buildProgressField)
if (installationDependencies.length > 0 && session.listOfTestGenerationJobId.length < 2) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.INSTALL_DEPENDENCIES, 'current'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
const status = await runBuildCommand(installationDependencies)
// TODO: Add separate status for installation dependencies
session.buildStatus = status
if (status === BuildStatus.FAILURE) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.INSTALL_DEPENDENCIES, 'error'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
}
if (status === BuildStatus.CANCELLED) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.INSTALL_DEPENDENCIES, 'error'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
this.messenger.sendMessage('Installation dependencies Cancelled', data.tabID, 'prompt')
this.messenger.sendMessage(
'Unit test generation workflow is complete. You have 25 out of 30 Amazon Q Developer Agent invocations left this month.',
data.tabID,
'answer'
)
return
}
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.INSTALL_DEPENDENCIES, 'done'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
}
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_BUILD, 'current'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
const buildStatus = await runBuildCommand(buildCommands)
session.buildStatus = buildStatus
if (buildStatus === BuildStatus.FAILURE) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_BUILD, 'error'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
} else if (buildStatus === BuildStatus.CANCELLED) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_BUILD, 'error'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
this.messenger.sendMessage('Build Cancelled', data.tabID, 'prompt')
this.messenger.sendMessage('Unit test generation workflow is complete.', data.tabID, 'answer')
return
} else {
// Build successful
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_BUILD, 'done'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
}
// Running execution tests
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_EXECUTION_TESTS, 'current'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
// After running tests
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.RUN_EXECUTION_TESTS, 'done'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
if (session.buildStatus !== BuildStatus.SUCCESS) {
this.messenger.sendBuildProgressMessage({
tabID: data.tabID,
messageType: 'answer-part',
codeGenerationId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
message: testGenBuildProgressMessage(TestGenerationBuildStep.FIXING_TEST_CASES, 'current'),
canBeVoted: false,
messageId: TestNamedMessages.TEST_GENERATION_BUILD_STATUS_MESSAGE,
})
await startTestGenerationProcess(session.sourceFilePath, '', data.tabID, false)
}
// TODO: Skip this if startTestGenerationProcess timeouts
if (session.generatedFilePath) {
await this.showTestCaseSummary(data)
}
}