// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using Microsoft.SqlTools.ServiceLayer.Workspace.Contracts; using Xunit; using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; using Microsoft.SqlTools.ServiceLayer.Metadata.Contracts; using Microsoft.SqlTools.ServiceLayer.Scripting; using Moq; using Microsoft.SqlTools.Hosting.Protocol; using Microsoft.SqlTools.ServiceLayer.Scripting.Contracts; using System.Threading.Tasks; namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Scripting { /// /// Tests for the scripting service component /// public class ScriptingServiceTests { private const string SchemaName = "sys"; private const string TableName = "all_objects"; private LiveConnectionHelper.TestConnectionResult GetLiveAutoCompleteTestObjects() { var textDocument = new TextDocumentPosition { TextDocument = new TextDocumentIdentifier { Uri = Test.Common.Constants.OwnerUri }, Position = new Position { Line = 0, Character = 0 } }; var result = LiveConnectionHelper.InitLiveConnectionInfo(); result.TextDocumentPosition = textDocument; return result; } private async Task>> SendAndValidateScriptRequest(ScriptOperation operation) { var result = GetLiveAutoCompleteTestObjects(); var requestContext = new Mock>(); requestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object())); var scriptingParams = new ScriptingScriptAsParams { OwnerUri = Test.Common.Constants.OwnerUri, Operation = operation, Metadata = new ObjectMetadata() { MetadataType = MetadataType.Table, MetadataTypeName = "View", Schema = SchemaName, Name = TableName } }; await ScriptingService.HandleScriptingScriptAsRequest(scriptingParams, requestContext.Object); requestContext.Verify(x => x.SendResult(It.Is( i => i.Script.Contains(operation.ToString().ToUpper()) && i.Script.Contains(TableName) && i.Script.Contains(SchemaName)))); return requestContext; } /// /// Verify the script as select request /// [Fact] public async void ScriptingScriptAsSelect() { await SendAndValidateScriptRequest(ScriptOperation.Select); } /// /// Verify the script as create request /// [Fact] public async void ScriptingScriptAsCreate() { await SendAndValidateScriptRequest(ScriptOperation.Create); } /// /// Verify the script as insert request /// [Fact] public async void ScriptingScriptAsInsert() { await SendAndValidateScriptRequest(ScriptOperation.Insert); } /// /// Verify the script as update request /// [Fact] public async void ScriptingScriptAsUpdate() { await SendAndValidateScriptRequest(ScriptOperation.Update); } /// /// Verify the script as delete request /// [Fact] public async void ScriptingScriptAsDelete() { await SendAndValidateScriptRequest(ScriptOperation.Delete); } } }