Skip to content

Commit

Permalink
Merge pull request #512 from Microsoft/task/queryExecutionUnitTests
Browse files Browse the repository at this point in the history
updated test to check bad query execution
  • Loading branch information
Aditya Bist authored Dec 14, 2016
2 parents 915e7b4 + c3105ca commit 67d72eb
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions test/queryRunner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,70 @@ suite('Query Runner tests', () => {
testVscodeWrapper.object
);

let mockEventEmitter = TypeMoq.Mock.ofType(EventEmitter, TypeMoq.MockBehavior.Strict);
mockEventEmitter.setup(x => x.emit('start'));
mockEventEmitter.setup(x => x.emit('complete'));
queryRunner.eventEmitter = mockEventEmitter.object;

return queryRunner.runQuery(testSelection).then(() => {
testQueryNotificationHandler.verify(x => x.registerRunner(TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.once());

// start and complete emitted regardless of successful or error
mockEventEmitter.verify(x => x.emit('start'), TypeMoq.Times.once());
mockEventEmitter.verify(x => x.emit('complete'), TypeMoq.Times.once());
});

});

test('Correctly handles error from bad query', () => {
let testuri = 'test';
let testSelection = {startLine: 0, endLine: 0, startColumn: 3, endColumn: 3};
let testresult = {
message: 'failed'
};
testSqlToolsServerClient.setup(x => x.sendRequest(TypeMoq.It.isAny(),
TypeMoq.It.isAny())).callback(() => {
// testing
}).returns(() => { return Promise.resolve(testresult); });

testQueryNotificationHandler.setup(x => x.registerRunner(TypeMoq.It.isAny(), TypeMoq.It.isAnyString()))
.callback((queryRunner, uri: string) => {
assert.equal(uri, testuri);
});
testStatusView.setup(x => x.executingQuery(TypeMoq.It.isAnyString()));
testStatusView.setup(x => x.executedQuery(TypeMoq.It.isAnyString()));
testVscodeWrapper.setup( x => x.logToOutputChannel(TypeMoq.It.isAnyString()));

testVscodeWrapper.setup(x => x.showErrorMessage(TypeMoq.It.isAnyString()));
let queryRunner = new QueryRunner(
testuri,
testuri,
testStatusView.object,
testSqlToolsServerClient.object,
testQueryNotificationHandler.object,
testVscodeWrapper.object
);

let testEventEmitter = TypeMoq.Mock.ofType(EventEmitter, TypeMoq.MockBehavior.Strict);
testEventEmitter.setup(x => x.emit('start'));
testEventEmitter.setup(x => x.emit('complete'));
queryRunner.eventEmitter = testEventEmitter.object;
queryRunner.uri = testuri;

return queryRunner.runQuery(testSelection).then(undefined, () => {
testStatusView.verify(x => x.executedQuery(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
assert.strictEqual(queryRunner.isExecutingQuery, false);
testEventEmitter.verify(x => x.emit('start'), TypeMoq.Times.once());
testEventEmitter.verify(x => x.emit('complete'), TypeMoq.Times.once());
testVscodeWrapper.verify(x => x.showErrorMessage(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
});
});

test('Handles Info Message Correctly', () => {
let testuri = 'uri';
let testSelection = {startLine: 0, endLine: 0, startColumn: 3, endColumn: 3};
let testtitle = 'title';
let testEventEmitter = TypeMoq.Mock.ofType(EventEmitter, TypeMoq.MockBehavior.Strict);
testSqlToolsServerClient.setup(x => x.sendRequest(TypeMoq.It.isAny(),
TypeMoq.It.isAny())).callback((type, details: QueryExecuteParams) => {
assert.equal(details.ownerUri, testuri);
Expand All @@ -96,6 +150,11 @@ suite('Query Runner tests', () => {
testVscodeWrapper.setup( x => x.logToOutputChannel(TypeMoq.It.isAnyString()));
testStatusView.setup(x => x.executingQuery(TypeMoq.It.isAnyString()));
testStatusView.setup(x => x.executedQuery(TypeMoq.It.isAnyString()));
testEventEmitter.setup(x => x.emit('start'));
testEventEmitter.setup(x => x.emit('complete'));
testEventEmitter.setup(x => x.emit('batchStart', TypeMoq.It.isAny()));
testEventEmitter.setup(x => x.emit('batchComplete', TypeMoq.It.isAny()));

let queryRunner = new QueryRunner(
testuri,
testtitle,
Expand All @@ -104,12 +163,22 @@ suite('Query Runner tests', () => {
testQueryNotificationHandler.object,
testVscodeWrapper.object
);
queryRunner.eventEmitter = testEventEmitter.object;
return queryRunner.runQuery(testSelection).then(() => {
// Expected emit for start and complete
testEventEmitter.verify(x => x.emit('start'), TypeMoq.Times.once());
testEventEmitter.verify(x => x.emit('complete'), TypeMoq.Times.once());

// Expected batch start and complete
testEventEmitter.verify(x => x.emit('batchStart', TypeMoq.It.isAny()), TypeMoq.Times.once());
testEventEmitter.verify(x => x.emit('batchComplete', TypeMoq.It.isAny()), TypeMoq.Times.once());

// I expect no error message to be displayed
testVscodeWrapper.verify(x => x.showErrorMessage(TypeMoq.It.isAnyString()), TypeMoq.Times.never());
assert.strictEqual(queryRunner.batchSets[0].hasError, false);

// I expect query execution to be done
testStatusView.verify(x => x.executedQuery(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
assert.strictEqual(queryRunner.isExecutingQuery, false);
});
});
Expand Down Expand Up @@ -313,6 +382,8 @@ suite('Query Runner tests', () => {
}]
};

let mockEventEmitter = TypeMoq.Mock.ofType(EventEmitter, TypeMoq.MockBehavior.Strict);
mockEventEmitter.setup(x => x.emit('complete'));
testVscodeWrapper.setup( x => x.logToOutputChannel(TypeMoq.It.isAnyString()));
testStatusView.setup(x => x.executingQuery(TypeMoq.It.isAny()));
testStatusView.setup(x => x.executedQuery(TypeMoq.It.isAny()));
Expand All @@ -324,12 +395,15 @@ suite('Query Runner tests', () => {
testQueryNotificationHandler.object,
testVscodeWrapper.object
);

queryRunner.eventEmitter = mockEventEmitter.object;
queryRunner.uri = '';
queryRunner.dataResolveReject = {resolve: () => {
resolveRan = true;
}};
queryRunner.handleResult(result);
testStatusView.verify(x => x.executedQuery(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
mockEventEmitter.verify(x => x.emit('complete'), TypeMoq.Times.once());
assert.equal(resolveRan, true);
});

Expand Down

0 comments on commit 67d72eb

Please sign in to comment.