-
Notifications
You must be signed in to change notification settings - Fork 113
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add test cases for assistant conversation history (#1010)
* feat: add test cases for assistant conversation history Signed-off-by: Lin Wang <[email protected]> * feat: move created history test below Signed-off-by: Lin Wang <[email protected]> * rename coversation_history_spec to conversation_history_spec Signed-off-by: Lin Wang <[email protected]> * Address pr comments Signed-off-by: Lin Wang <[email protected]> * refactor: move setStorageItem to helpers and change to getElementByTestId Signed-off-by: Lin Wang <[email protected]> --------- Signed-off-by: Lin Wang <[email protected]> (cherry picked from commit b65c5de)
- Loading branch information
1 parent
6ad8c9c
commit a4376f9
Showing
3 changed files
with
233 additions
and
2 deletions.
There are no files selected for viewing
212 changes: 212 additions & 0 deletions
212
cypress/integration/plugins/dashboards-assistant/conversation_history_spec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
import { BASE_PATH } from '../../../utils/constants'; | ||
import { setStorageItem } from '../../../utils/plugins/dashboards-assistant/helpers'; | ||
|
||
if (Cypress.env('DASHBOARDS_ASSISTANT_ENABLED')) { | ||
describe('Assistant conversation history spec', () => { | ||
let restoreShowHome; | ||
let restoreNewThemeModal; | ||
|
||
before(() => { | ||
// Set welcome screen tracking to false | ||
restoreShowHome = setStorageItem( | ||
localStorage, | ||
'home:welcome:show', | ||
'false' | ||
); | ||
// Hide new theme modal | ||
restoreNewThemeModal = setStorageItem( | ||
localStorage, | ||
'home:newThemeModal:show', | ||
'false' | ||
); | ||
// Visit OSD | ||
cy.visit(`${BASE_PATH}/app/home`); | ||
// Common text to wait for to confirm page loaded, give up to 60 seconds for initial load | ||
cy.get(`input[placeholder="Ask question"]`, { timeout: 60000 }).should( | ||
'be.length', | ||
1 | ||
); | ||
|
||
// Open assistant flyout | ||
// The flyout button will be detached and can't be clicked, add 10s delayed fix it. | ||
cy.wait(10000); | ||
cy.get('img[aria-label="toggle chat flyout icon"]').click(); | ||
}); | ||
after(() => { | ||
if (restoreShowHome) { | ||
restoreShowHome(); | ||
} | ||
if (restoreNewThemeModal) { | ||
restoreNewThemeModal(); | ||
} | ||
// Close assistant flyout | ||
cy.get('img[aria-label="toggle chat flyout icon"]').click(); | ||
}); | ||
|
||
beforeEach(() => { | ||
cy.get('.llm-chat-flyout', { timeout: 60000 }).should('be.visible'); | ||
}); | ||
|
||
describe('panel operations', () => { | ||
it('should toggle history list', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]') | ||
.should('be.visible') | ||
.click(); | ||
cy.get('.llm-chat-flyout-body') | ||
.contains('Conversations') | ||
.should('be.visible'); | ||
|
||
cy.get('.llm-chat-flyout button[aria-label="history"]') | ||
.should('be.visible') | ||
.click(); | ||
cy.get('textarea[placeholder="Ask me anything..."]').should('exist'); | ||
cy.get('.llm-chat-flyout-body') | ||
.contains('Conversations') | ||
.should('not.be.visible'); | ||
}); | ||
|
||
it('should back to chat panel', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
cy.get('.llm-chat-flyout') | ||
.contains('Conversations') | ||
.should('be.visible'); | ||
|
||
cy.get('.llm-chat-flyout-body').contains('Back').click(); | ||
cy.get('textarea[placeholder="Ask me anything..."]').should('exist'); | ||
}); | ||
|
||
it('should hide back button in fullscreen mode', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="fullScreen"]').click(); | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
|
||
cy.get('.llm-chat-flyout') | ||
.contains('Conversations') | ||
.should('be.visible'); | ||
cy.get('textarea[placeholder="Ask me anything..."]').should('exist'); | ||
cy.get('.llm-chat-flyout-body') | ||
.contains('Back', { timeout: 3000 }) | ||
.should('not.exist'); | ||
|
||
// Back to default mode | ||
cy.get('.llm-chat-flyout button[aria-label="fullScreen"]').click(); | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
}); | ||
}); | ||
describe('history item operations', () => { | ||
const conversations = []; | ||
|
||
before(() => { | ||
// Create conversations data | ||
cy.sendAssistantMessage({ | ||
input: { | ||
type: 'input', | ||
content: 'What are the indices in my cluster?', | ||
contentType: 'text', | ||
}, | ||
}).then((result) => { | ||
if (result.status !== 200) { | ||
throw result.body; | ||
} | ||
conversations.push(result.body); | ||
}); | ||
}); | ||
|
||
after(() => { | ||
// Clear created conversations in tests | ||
conversations.map(({ conversationId }) => | ||
cy.deleteConversation(conversationId) | ||
); | ||
}); | ||
|
||
it('should show created conversation in the history list', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
|
||
cy.get('.llm-chat-flyout').contains('Conversations'); | ||
conversations.forEach(({ conversationId }) => { | ||
cy.getElementByTestId(`chatHistoryItem-${conversationId}`).should( | ||
'exist' | ||
); | ||
}); | ||
cy.contains('What are the indices in my cluster?'); | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
}); | ||
|
||
it('should load conversation in chat panel', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
|
||
const conversationToLoad = conversations[0]; | ||
|
||
cy.getElementByTestId( | ||
`chatHistoryItem-${conversationToLoad.conversationId}` | ||
) | ||
.contains(conversationToLoad.title) | ||
.click(); | ||
cy.get('textarea[placeholder="Ask me anything..."]').should('exist'); | ||
cy.get('div.llm-chat-bubble-panel-input').contains( | ||
conversationToLoad.title | ||
); | ||
}); | ||
|
||
it('should able to update conversation title', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
|
||
const conversationToUpdate = conversations[0]; | ||
const newTitle = 'New title'; | ||
|
||
cy.getElementByTestId( | ||
`chatHistoryItem-${conversationToUpdate.conversationId}` | ||
) | ||
.find('button[aria-label="Edit conversation name"]') | ||
.click(); | ||
cy.contains('Edit conversation name'); | ||
|
||
cy.get('input[aria-label="Conversation name input"').type(newTitle); | ||
cy.getElementByTestId('confirmModalConfirmButton') | ||
.contains('Confirm name') | ||
.click(); | ||
|
||
conversationToUpdate.title = newTitle; | ||
cy.getElementByTestId( | ||
`chatHistoryItem-${conversationToUpdate.conversationId}` | ||
).contains(conversationToUpdate.title); | ||
cy.contains('Edit conversation name', { timeout: 3000 }).should( | ||
'not.exist' | ||
); | ||
|
||
// Reset to chat panel | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
}); | ||
|
||
it('should able to delete conversation', () => { | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
|
||
const conversationToDelete = conversations[0]; | ||
|
||
cy.getElementByTestId( | ||
`chatHistoryItem-${conversationToDelete.conversationId}` | ||
) | ||
.find('button[aria-label="Delete conversation"]') | ||
.click(); | ||
cy.getElementByTestId('confirmModalTitleText').contains( | ||
'Delete conversation' | ||
); | ||
|
||
cy.getElementByTestId('confirmModalConfirmButton') | ||
.contains('Delete conversation') | ||
.click(); | ||
|
||
cy.getElementByTestId( | ||
`chatHistoryItem-${conversationToDelete.conversationId}` | ||
).should('not.exist'); | ||
conversations.shift(); | ||
|
||
// Reset to chat panel | ||
cy.get('.llm-chat-flyout button[aria-label="history"]').click(); | ||
}); | ||
}); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters