From 8378e8963933e3ec09ad3df6e942274a20019591 Mon Sep 17 00:00:00 2001 From: Barbara Valdez <34872381+barbaravaldez@users.noreply.github.com> Date: Wed, 19 Jan 2022 09:44:34 -0800 Subject: [PATCH] Fix Notebook Tree View smoke tests (#18101) * pin SQL notebook --- test/automation/src/sql/notebook.ts | 50 ++++++++++--------- .../sql/areas/notebook/notebookView.test.ts | 27 +++++++--- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/test/automation/src/sql/notebook.ts b/test/automation/src/sql/notebook.ts index 7696b7c3fc..cea041e901 100644 --- a/test/automation/src/sql/notebook.ts +++ b/test/automation/src/sql/notebook.ts @@ -15,12 +15,12 @@ export class Notebook { public readonly notebookToolbar: NotebookToolbar; public readonly textCellToolbar: TextCellToolbar; - public readonly view: NotebookView; + public readonly view: NotebookTreeView; constructor(private code: Code, private quickAccess: QuickAccess, private quickInput: QuickInput, private editors: Editors) { this.notebookToolbar = new NotebookToolbar(code); this.textCellToolbar = new TextCellToolbar(code); - this.view = new NotebookView(code, quickAccess); + this.view = new NotebookTreeView(code, quickAccess); } async openFile(fileName: string): Promise { @@ -331,7 +331,7 @@ export class NotebookToolbar { } } -export class NotebookView { +export class NotebookTreeView { private static readonly inputBox = '.notebookExplorer-viewlet .search-widget .input-box'; private static searchResult = '.search-view .result-messages'; private static notebookTreeItem = '.split-view-view .tree-explorer-viewlet-tree-view .monaco-list-row'; @@ -355,7 +355,7 @@ export class NotebookView { async searchInNotebook(expr: string): Promise { await this.waitForSetSearchValue(expr); await this.code.dispatchKeybinding('enter'); - let selector = NotebookView.searchResult; + let selector = NotebookTreeView.searchResult; if (expr) { selector += ' .message'; } @@ -363,40 +363,44 @@ export class NotebookView { } async waitForSetSearchValue(text: string): Promise { - const textArea = `${NotebookView.inputBox} textarea`; + const textArea = `${NotebookTreeView.inputBox} textarea`; await this.code.waitForTypeInEditor(textArea, text); } /** - * Helper function - * @returns tree item ids from Notebooks View + * Gets tree items from Notebooks Tree View + * @returns tree item from Notebooks View */ - async getNotebookTreeItemIds(): Promise { - return (await this.code.waitForElements(NotebookView.notebookTreeItem, false)).map(item => item.attributes['id']); + async getNotebookTreeItems(): Promise { + return this.code.waitForElements(NotebookTreeView.notebookTreeItem, false); } /** - * Pin the first notebook in the Notebooks View + * Gets tree items from Pinned Notebooks View + * @returns tree item from Pinned Notebooks View */ - async pinNotebook(): Promise { - const notebookIds = await this.getNotebookTreeItemIds(); - await this.code.waitAndDoubleClick(`${NotebookView.notebookTreeItem}[id="${notebookIds[0]}"]`); - await this.code.waitAndClick(`${NotebookView.notebookTreeItem}${NotebookView.selectedItem} .codicon-pinned`); + async getPinnedNotebookTreeItems(): Promise { + return this.code.waitForElements(NotebookTreeView.pinnedNotebooksSelector, false); } - /** - * Unpin the only pinned notebook. - * Previously pinned by the pinNotebook method. - */ - async unpinNotebook(): Promise { - await this.code.waitAndClick(NotebookView.pinnedNotebooksSelector); - await this.code.waitAndClick(`${NotebookView.pinnedNotebooksSelector} .actions a[title="Unpin Notebook"]`); + async pinNotebook(notebookId: string): Promise { + await this.code.waitAndDoubleClick(`${NotebookTreeView.notebookTreeItem}[id="${notebookId}"]`); + await this.code.waitAndClick(`${NotebookTreeView.notebookTreeItem}${NotebookTreeView.selectedItem} .codicon-pinned`); + } + + async unpinNotebook(notebookId: string): Promise { + await this.code.waitAndClick(NotebookTreeView.pinnedNotebooksSelector); + await this.code.waitAndClick(`${NotebookTreeView.pinnedNotebooksSelector}[id="${notebookId}"] .actions a[title="Unpin Notebook"]`); } /** * When pinning a notebook, the pinned notebook view will show. */ - async waitForPinnedNotebookView(): Promise { - await this.code.waitForElement(NotebookView.pinnedNotebooksSelector); + async waitForPinnedNotebookTreeView(): Promise { + await this.code.waitForElement(NotebookTreeView.pinnedNotebooksSelector); + } + + async waitForPinnedNotebookTreeViewGone(): Promise { + await this.code.waitForElementGone(NotebookTreeView.pinnedNotebooksSelector); } } diff --git a/test/smoke/src/sql/areas/notebook/notebookView.test.ts b/test/smoke/src/sql/areas/notebook/notebookView.test.ts index ad5e42c238..6cf594c85a 100644 --- a/test/smoke/src/sql/areas/notebook/notebookView.test.ts +++ b/test/smoke/src/sql/areas/notebook/notebookView.test.ts @@ -9,21 +9,36 @@ import * as minimist from 'minimist'; import { afterSuite, beforeSuite } from '../../../utils'; export function setup(opts: minimist.ParsedArgs) { - describe('NotebookView', () => { + describe('NotebookTreeView', () => { beforeSuite(opts); afterSuite(opts); - - it('Pin a notebook', async function () { + // Name of the SQL notebook from azuredatastudio-smoke-test-repo + const SQL_NOTEBOOK = 'collapsed'; + it('Pin notebook', async function () { const app = this.app as Application; await app.workbench.sqlNotebook.view.focusNotebooksView(); - await app.workbench.sqlNotebook.view.pinNotebook(); - await app.workbench.sqlNotebook.view.waitForPinnedNotebookView(); + const sqlNotebook = (await app.workbench.sqlNotebook.view.getNotebookTreeItems()).filter(n => n.textContent === SQL_NOTEBOOK); + // Pinning SQL notebook to prevent the Configure Python Wizard from showing, since Python is no longer set up when the NotebookTreeView test suite starts + await app.workbench.sqlNotebook.view.pinNotebook(sqlNotebook[0].attributes.id); + await app.workbench.sqlNotebook.view.waitForPinnedNotebookTreeView(); }); it('Unpin Notebook', async function () { const app = this.app as Application; await app.workbench.sqlNotebook.view.focusPinnedNotebooksView(); - await app.workbench.sqlNotebook.view.unpinNotebook(); + let pinnedNotebooks = await app.workbench.sqlNotebook.view.getPinnedNotebookTreeItems(); + const sqlNotebook = (pinnedNotebooks).filter(n => n.textContent === SQL_NOTEBOOK)[0]; + await app.workbench.sqlNotebook.view.unpinNotebook(sqlNotebook.attributes.id); + // wait a second for unpinning to complete + await new Promise(c => setTimeout(c, 1000)); + if (pinnedNotebooks.length > 1) { + // if theres multiple pinned notebooks check that the SQL notebook is no longer in the Pinned Notebooks View + pinnedNotebooks = await app.workbench.sqlNotebook.view.getPinnedNotebookTreeItems(); + assert(pinnedNotebooks.find(n => n.textContent === SQL_NOTEBOOK) === undefined); + } else { + // check that the Pinned Notebook View is gone + await app.workbench.sqlNotebook.view.waitForPinnedNotebookTreeViewGone(); + } }); it('No search results if search query is empty', async function () {