mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add Import smoke test (#15111)
* Add smoke test * Add wait for service * Also revert liveshare * fixes * Use custom extensions dir * fix * compile extensions * Use build extensions dir * test break * revert * revert yarn.lock * Add comment * Add comments
This commit is contained in:
@@ -122,11 +122,16 @@ steps:
|
|||||||
displayName: Run integration tests (Electron)
|
displayName: Run integration tests (Electron)
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn gulp compile-extensions
|
||||||
|
displayName: Compile Extensions
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
|
APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
yarn smoketest --build "$APP_ROOT/$APP_NAME" --screenshots "$(build.artifactstagingdirectory)/smokeshots" --log "$(build.artifactstagingdirectory)/logs/darwin/smoke.log"
|
yarn smoketest --build "$APP_ROOT/$APP_NAME" --screenshots "$(build.artifactstagingdirectory)/smokeshots" --log "$(build.artifactstagingdirectory)/logs/darwin/smoke.log" --extensionsDir "$(build.sourcesdirectory)/extensions"
|
||||||
displayName: Run smoke tests (Electron)
|
displayName: Run smoke tests (Electron)
|
||||||
continueOnError: true
|
continueOnError: true
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
|
|||||||
@@ -282,14 +282,15 @@ export class Code {
|
|||||||
await this.driver.exitApplication();
|
await this.driver.exitApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
async waitForTextContent(selector: string, textContent?: string, accept?: (result: string) => boolean): Promise<string> {
|
async waitForTextContent(selector: string, textContent?: string, accept?: (result: string) => boolean, retryCount?: number): Promise<string> { // {{SQL CARBON EDIT}} Add retryCount
|
||||||
const windowId = await this.getActiveWindowId();
|
const windowId = await this.getActiveWindowId();
|
||||||
accept = accept || (result => textContent !== undefined ? textContent === result : !!result);
|
accept = accept || (result => textContent !== undefined ? textContent === result : !!result);
|
||||||
|
|
||||||
return await poll(
|
return await poll(
|
||||||
() => this.driver.getElements(windowId, selector).then(els => els.length > 0 ? Promise.resolve(els[0].textContent) : Promise.reject(new Error('Element not found for textContent'))),
|
() => this.driver.getElements(windowId, selector).then(els => els.length > 0 ? Promise.resolve(els[0].textContent) : Promise.reject(new Error('Element not found for textContent'))),
|
||||||
s => accept!(typeof s === 'string' ? s : ''),
|
s => accept!(typeof s === 'string' ? s : ''),
|
||||||
`get text content '${selector}'`
|
`get text content '${selector}'`,
|
||||||
|
retryCount // {{SQL CARBON EDIT}} Add retryCount
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,9 @@ export class StatusBar {
|
|||||||
return this.code.waitForTextContent(this.getSelector(StatusBarElement.EOL_STATUS), eol);
|
return this.code.waitForTextContent(this.getSelector(StatusBarElement.EOL_STATUS), eol);
|
||||||
}
|
}
|
||||||
|
|
||||||
async waitForStatusbarText(title: string, text: string): Promise<void> {
|
// {{SQL CARBON EDIT}} Add retryCount
|
||||||
await this.code.waitForTextContent(`${this.mainSelector} .statusbar-item[title="${title}"]`, text);
|
async waitForStatusbarText(title: string, text: string, retryCount?: number): Promise<void> {
|
||||||
|
await this.code.waitForTextContent(`${this.mainSelector} .statusbar-item[title="${title}"]`, text, undefined, retryCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private getSelector(element: StatusBarElement): string {
|
private getSelector(element: StatusBarElement): string {
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ const opts = minimist(args, {
|
|||||||
'wait-time',
|
'wait-time',
|
||||||
'test-repo',
|
'test-repo',
|
||||||
'screenshots',
|
'screenshots',
|
||||||
'log'
|
'log',
|
||||||
|
'extensionsDir' // {{SQL CARBON EDIT}} Let callers control extensions dir for non-packaged extensions
|
||||||
],
|
],
|
||||||
boolean: [
|
boolean: [
|
||||||
'verbose',
|
'verbose',
|
||||||
@@ -67,8 +68,14 @@ const opts = minimist(args, {
|
|||||||
|
|
||||||
const testRepoUrl = 'https://github.com/Microsoft/azuredatastudio-smoke-test-repo.git';
|
const testRepoUrl = 'https://github.com/Microsoft/azuredatastudio-smoke-test-repo.git';
|
||||||
const workspacePath = path.join(testDataPath, 'azuredatastudio-smoke-test-repo');
|
const workspacePath = path.join(testDataPath, 'azuredatastudio-smoke-test-repo');
|
||||||
const extensionsPath = path.join(testDataPath, 'extensions-dir');
|
// {{SQL CARBON EDIT}} Let callers control extensions dir for non-packaged extensions
|
||||||
mkdirp.sync(extensionsPath);
|
let extensionsPath = opts.extensionsDir;
|
||||||
|
if (!extensionsPath) {
|
||||||
|
extensionsPath = path.join(testDataPath, 'extensions-dir');
|
||||||
|
mkdirp.sync(extensionsPath);
|
||||||
|
}
|
||||||
|
console.log(`Using extensions dir : ${extensionsPath}`);
|
||||||
|
|
||||||
|
|
||||||
const screenshotsPath = opts.screenshots ? path.resolve(opts.screenshots) : null;
|
const screenshotsPath = opts.screenshots ? path.resolve(opts.screenshots) : null;
|
||||||
if (screenshotsPath) {
|
if (screenshotsPath) {
|
||||||
|
|||||||
19
test/smoke/src/sql/areas/import/import.test.ts
Normal file
19
test/smoke/src/sql/areas/import/import.test.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { Application } from '../../../../../automation';
|
||||||
|
|
||||||
|
export function setup() {
|
||||||
|
describe('Import', () => {
|
||||||
|
|
||||||
|
it('Opening import wizard without connection opens connection dialog', async function () {
|
||||||
|
const app = this.app as Application;
|
||||||
|
await app.workbench.quickaccess.runCommand('Flat File Import: Import Wizard');
|
||||||
|
// Wait for the service to be downloaded and installed. This can take a while so set timeout to 5min (retryInterval default is 100ms)
|
||||||
|
await app.workbench.statusbar.waitForStatusbarText('', 'Flat File Import Service Started', 5 * 60 * 10);
|
||||||
|
await app.workbench.connectionDialog.waitForConnectionDialog();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
import { setup as setupQueryEditorTests, setupWeb as setupQueryEditorWebTests } from './areas/queryEditor/queryEditor.test';
|
import { setup as setupQueryEditorTests, setupWeb as setupQueryEditorWebTests } from './areas/queryEditor/queryEditor.test';
|
||||||
import { setup as setupNotebookTests } from './areas/notebook/notebook.test';
|
import { setup as setupNotebookTests } from './areas/notebook/notebook.test';
|
||||||
import { setup as setupNotebookViewTests } from './areas/notebook/notebookView.test';
|
import { setup as setupNotebookViewTests } from './areas/notebook/notebookView.test';
|
||||||
|
import { setup as setupImportTests } from './areas/import/import.test';
|
||||||
import { ApplicationOptions } from '../../../automation';
|
import { ApplicationOptions } from '../../../automation';
|
||||||
import * as yazl from 'yauzl';
|
import * as yazl from 'yauzl';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
@@ -21,6 +22,7 @@ export function main(isWeb: boolean = false): void {
|
|||||||
}
|
}
|
||||||
setupNotebookTests();
|
setupNotebookTests();
|
||||||
setupNotebookViewTests();
|
setupNotebookViewTests();
|
||||||
|
setupImportTests();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* eslint-disable no-sync */
|
/* eslint-disable no-sync */
|
||||||
|
|||||||
Reference in New Issue
Block a user