public void VsixDeployWebResourcesTest() { //first delete all the test deployed javascriot files var javaScriptFiles = GetJavaScriptFiles(); DeleteJavaScriptFileRecords(); Assert.IsFalse(GetJavaScriptFileRecords().Any()); //create an app, deploy and verify created VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); var app = CreateAndLoadTestApplication <DeployWebResourceModule>(); //run the deploy including a redirect to enter package settings first var originalConnection = HijackForPackageEntryRedirect(app); //lets delete the settings files, then verify they are recreated during the redirect entry var solutionItemsFolder = Path.Combine(VisualStudioService.SolutionDirectory, VisualStudioService.ItemFolderName); FileUtility.DeleteFiles(solutionItemsFolder); var solutionSettingFiles = FileUtility.GetFiles(solutionItemsFolder); Assert.AreEqual(0, solutionSettingFiles.Count()); //run the dialog var dialog = app.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); VerifyPackageEntryRedirect(originalConnection, dialog); //verify the 2 settings files recreated solutionSettingFiles = FileUtility.GetFiles(solutionItemsFolder); Assert.AreEqual(2, solutionSettingFiles.Count()); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); var records = GetJavaScriptFileRecords(); var currentComponentIds = XrmRecordService.GetSolutionComponents(dialog.Service.PackageSettings.Solution.Id, OptionSets.SolutionComponent.ObjectTypeCode.WebResource).ToList(); Assert.IsTrue(records.All(r => currentComponentIds.Contains(r.Id))); //okay the code also allows match by display name //so I will add this to verify that too //basically change ones display name and file name then verify it still matches var files = GetJavaScriptFiles(); var firstFileInfo = new FileInfo(files.First()); var record = records.First(e => e.GetStringField(Fields.webresource_.name) == firstFileInfo.Name); XrmRecordService.Delete(record); var newRecord = XrmRecordService.NewRecord(Entities.webresource); newRecord.SetField(Fields.webresource_.name, "jrm_fakescriptname", XrmRecordService); newRecord.SetField(Fields.webresource_.displayname, firstFileInfo.Name, XrmRecordService); newRecord.SetField(Fields.webresource_.webresourcetype, OptionSets.WebResource.Type.ScriptJScript, XrmRecordService); XrmRecordService.Create(newRecord); //create an app, deploy again and verify not duplicated VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); app = CreateAndLoadTestApplication <DeployWebResourceModule>(); dialog = app.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); }
public void VsixDeployWebResourcesTest() { //first delete all the test deployed javascriot files var javaScriptFiles = GetJavaScriptFiles(); DeleteJavaScriptFileRecords(); Assert.IsFalse(GetJavaScriptFileRecords().Any()); //create an app, deploy and verify created VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); var testApplication = CreateAndLoadTestApplication <DeployWebResourceModule>(); var dialog = testApplication.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); //create an app, deploy againb and verify not duplicated VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); testApplication = CreateAndLoadTestApplication <DeployWebResourceModule>(); dialog = testApplication.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); }
public void VsixDeployWebResourcesTest() { //first delete all the test deployed javascriot files var javaScriptFiles = GetJavaScriptFiles(); DeleteJavaScriptFileRecords(); Assert.IsFalse(GetJavaScriptFileRecords().Any()); //create an app, deploy and verify created VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); var testApplication = CreateAndLoadTestApplication <DeployWebResourceModule>(); var dialog = testApplication.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); //okay the code also allows match by display name //so I will add this to verify that too //basically change ones display name and file name then verify it still matches var files = GetJavaScriptFiles(); var records = GetJavaScriptFileRecords(); var firstFileInfo = new FileInfo(files.First()); var record = records.First(e => e.GetStringField(Fields.webresource_.name) == firstFileInfo.Name); XrmRecordService.Delete(record); var newRecord = XrmRecordService.NewRecord(Entities.webresource); newRecord.SetField(Fields.webresource_.name, "jrm_fakescriptname", XrmRecordService); newRecord.SetField(Fields.webresource_.displayname, firstFileInfo.Name, XrmRecordService); newRecord.SetField(Fields.webresource_.webresourcetype, OptionSets.WebResource.Type.ScriptJScript, XrmRecordService); XrmRecordService.Create(newRecord); //create an app, deploy again and verify not duplicated VisualStudioService.SetSelectedItems(GetJavaScriptFiles().Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); testApplication = CreateAndLoadTestApplication <DeployWebResourceModule>(); dialog = testApplication.NavigateToDialog <DeployWebResourceModule, DeployWebResourceDialog>(); Assert.AreEqual(GetJavaScriptFiles().Count(), GetJavaScriptFileRecords().Count()); }
public void VsixCreateAndDeployPackageTest() { //clear some stuff DeleteAll(Entities.account); DeleteAll(Entities.contact); var tempFolder = Path.Combine(TestingFolder, "TEMP"); if (Directory.Exists(tempFolder)) { FileUtility.DeleteFiles(tempFolder); FileUtility.DeleteSubFolders(tempFolder); } //create and account for the deployment package var account = CreateAccount(); var packageSettings = GetTestPackageSettings(); //set solution v2 prior to package create XrmService.SetField(Entities.solution, new Guid(packageSettings.Solution.Id), Fields.solution_.version, "2.0.0.0"); var app = CreateAndLoadTestApplication <VsixCreatePackageModule>(); //run the dialog - including a redirect to enter the package settings first var originalConnection = HijackForPackageEntryRedirect(app); var dialog = app.NavigateToDialog <VsixCreatePackageModule, VsixCreatePackageDialog>(); VerifyPackageEntryRedirect(originalConnection, dialog); //okay no should be at the entry the create package details var packageEntry = dialog.Controller.UiItems.First() as ObjectEntryViewModel; //create package request var request = new CreatePackageRequest(); request.HideTypeAndFolder = true; request.DataToInclude = new[] { new ExportRecordType() { RecordType = new RecordType(Entities.account, Entities.account), Type = ExportType.AllRecords }, new ExportRecordType() { RecordType = new RecordType(Entities.contact, Entities.contact), Type = ExportType.AllRecords } }; app.EnterObject(request, packageEntry); //lets set explicit versions packageEntry.GetStringFieldFieldViewModel(nameof(CreatePackageRequest.ThisReleaseVersion)).Value = "3.0.0.0"; packageEntry.GetStringFieldFieldViewModel(nameof(CreatePackageRequest.SetVersionPostRelease)).Value = "4.0.0.0"; if (!packageEntry.Validate()) { throw new Exception(packageEntry.GetValidationSummary()); } packageEntry.SaveButtonViewModel.Invoke(); var createResponse = dialog.CompletionItem as ServiceResponseBase <DataImportResponseItem>; Assert.IsFalse(createResponse.HasError); //verify the files created in the solution package folder var folder = Directory.GetDirectories(Path.Combine(VisualStudioService.SolutionDirectory, "Releases")).First(); Assert.IsTrue(FileUtility.GetFiles(folder).First().EndsWith(".zip")); Assert.IsTrue(FileUtility.GetFolders(folder).First().EndsWith("Data")); Assert.IsTrue(FileUtility.GetFiles((FileUtility.GetFolders(folder).First())).Any()); //+ the solution version changed var solution = XrmRecordService.Get(packageSettings.Solution.RecordType, packageSettings.Solution.Id); Assert.AreEqual("4.0.0.0", solution.GetStringField(Fields.solution_.version)); //delete for account for recreation during import XrmService.Delete(account); //Okay now lets deploy it var deployRequest = new DeployPackageRequest(); deployRequest.Connection = packageSettings.Connections.First(); //set the package folder selected in vidsual studio VisualStudioService.SetSelectedItem(new FakeVisualStudioSolutionFolder(folder)); //run the deployment dialog var deployTestApplication = CreateAndLoadTestApplication <VsixDeployPackageModule>(); var deployResponse = deployTestApplication.NavigateAndProcessDialog <VsixDeployPackageModule, DeployPackageDialog, ServiceResponseBase <DataImportResponseItem> >(deployRequest); Assert.IsFalse(deployResponse.HasError); //verify the solution dpeloyed with updated version solution = XrmRecordService.Get(packageSettings.Solution.RecordType, packageSettings.Solution.Id); Assert.AreEqual("3.0.0.0", solution.GetStringField(Fields.solution_.version)); //account should be recreated account = Refresh(account); //Okay now lets just do the solution import it //set the solutoon version something XrmService.SetField(Entities.solution, new Guid(packageSettings.Solution.Id), Fields.solution_.version, "2.0.0.0"); //set the solution zip selected in visual studio VisualStudioService.SetSelectedItem(new FakeVisualStudioProjectItem(FileUtility.GetFiles(folder).First())); //run the dialog var importSolutionRequest = new ImportSolutionRequest(); importSolutionRequest.Connection = packageSettings.Connections.First(); var importSolutionApplication = CreateAndLoadTestApplication <ImportSolutionModule>(); var importSolutionResponse = importSolutionApplication.NavigateAndProcessDialog <ImportSolutionModule, ImportSolutionDialog, ImportSolutionResponse>(importSolutionRequest); Assert.IsFalse(importSolutionResponse.HasError); //verify the solution dpeloyed with updated version Assert.AreEqual("3.0.0.0", solution.GetStringField(Fields.solution_.version)); //Okay now lets just do the records import //delete for account for recreation during import XrmService.Delete(account); //set the xml files selected VisualStudioService.SetSelectedItems(FileUtility.GetFiles(FileUtility.GetFolders(folder).First()).Select(f => new FakeVisualStudioProjectItem(f))); //run the import records dialog var importRecordsRequest = new ImportRecordsRequest(); importRecordsRequest.Connection = packageSettings.Connections.First(); var importRecordsApplication = CreateAndLoadTestApplication <ImportRecordsModule>(); var importRecordsResponse = importRecordsApplication.NavigateAndProcessDialog <ImportRecordsModule, ImportRecordsDialog, ImportRecordsResponse>(importRecordsRequest); Assert.IsFalse(importRecordsResponse.HasError); //should be recreated account = Refresh(account); }
public void VsixCreateAndDeployPackageTest() { //clear some stuff DeleteAll(Entities.account); DeleteAll(Entities.contact); var tempFolder = Path.Combine(TestingFolder, "TEMP"); if (Directory.Exists(tempFolder)) { FileUtility.DeleteFiles(tempFolder); FileUtility.DeleteSubFolders(tempFolder); } //create and account for the deployment package var account = CreateAccount(); var packageSettings = GetTestPackageSettings(); //set solution v2 prior to package create XrmService.SetField(Entities.solution, new Guid(packageSettings.Solution.Id), Fields.solution_.version, "2.0.0.0"); //run create package dialog var request = CreatePackageRequest.CreateForCreatePackage(tempFolder, packageSettings.Solution); request.ThisReleaseVersion = "3.0.0.0"; request.SetVersionPostRelease = "4.0.0.0"; request.DataToInclude = new[] { new ExportRecordType() { RecordType = new RecordType(Entities.account, Entities.account), Type = ExportType.AllRecords }, new ExportRecordType() { RecordType = new RecordType(Entities.contact, Entities.contact), Type = ExportType.AllRecords } }; var createTestApplication = CreateAndLoadTestApplication <VsixCreatePackageModule>(); var createResponse = createTestApplication.NavigateAndProcessDialog <VsixCreatePackageModule, VsixCreatePackageDialog, ServiceResponseBase <DataImportResponseItem> >(request); Assert.IsFalse(createResponse.HasError); //verify the files created in the solution package folder var folder = Directory.GetDirectories(Path.Combine(VisualStudioService.SolutionDirectory, "Releases")).First(); Assert.IsTrue(FileUtility.GetFiles(folder).First().EndsWith(".zip")); Assert.IsTrue(FileUtility.GetFolders(folder).First().EndsWith("Data")); Assert.IsTrue(FileUtility.GetFiles((FileUtility.GetFolders(folder).First())).Any()); //+ the solution version changed var solution = XrmRecordService.Get(packageSettings.Solution.RecordType, packageSettings.Solution.Id); Assert.AreEqual("4.0.0.0", solution.GetStringField(Fields.solution_.version)); //delete for account for recreation during import XrmService.Delete(account); //Okay now lets deploy it var deployRequest = new DeployPackageRequest(); deployRequest.Connection = packageSettings.Connections.First(); //set the package folder selected in vidsual studio VisualStudioService.SetSelectedItem(new FakeVisualStudioSolutionFolder(folder)); //run the deployment dialog var deployTestApplication = CreateAndLoadTestApplication <VsixDeployPackageModule>(); var deployResponse = deployTestApplication.NavigateAndProcessDialog <VsixDeployPackageModule, DeployPackageDialog, ServiceResponseBase <DataImportResponseItem> >(deployRequest); Assert.IsFalse(deployResponse.HasError); //verify the solution dpeloyed with updated version solution = XrmRecordService.Get(packageSettings.Solution.RecordType, packageSettings.Solution.Id); Assert.AreEqual("3.0.0.0", solution.GetStringField(Fields.solution_.version)); //account should be recreated account = Refresh(account); //Okay now lets just do the solution import it //set the solutoon version something XrmService.SetField(Entities.solution, new Guid(packageSettings.Solution.Id), Fields.solution_.version, "2.0.0.0"); //set the solution zip selected in visual studio VisualStudioService.SetSelectedItem(new FakeVisualStudioProjectItem(FileUtility.GetFiles(folder).First())); //run the dialog var importSolutionRequest = new ImportSolutionRequest(); importSolutionRequest.Connection = packageSettings.Connections.First(); var importSolutionApplication = CreateAndLoadTestApplication <ImportSolutionModule>(); var importSolutionResponse = importSolutionApplication.NavigateAndProcessDialog <ImportSolutionModule, ImportSolutionDialog, ImportSolutionResponse>(importSolutionRequest); Assert.IsFalse(importSolutionResponse.HasError); //verify the solution dpeloyed with updated version Assert.AreEqual("3.0.0.0", solution.GetStringField(Fields.solution_.version)); //Okay now lets just do the records import //delete for account for recreation during import XrmService.Delete(account); //set the xml files selected VisualStudioService.SetSelectedItems(FileUtility.GetFiles(FileUtility.GetFolders(folder).First()).Select(f => new FakeVisualStudioProjectItem(f))); //run the import records dialog var importRecordsRequest = new ImportRecordsRequest(); importRecordsRequest.Connection = packageSettings.Connections.First(); var importRecordsApplication = CreateAndLoadTestApplication <ImportRecordsModule>(); var importRecordsResponse = importRecordsApplication.NavigateAndProcessDialog <ImportRecordsModule, ImportRecordsDialog, ImportRecordsResponse>(importRecordsRequest); Assert.IsFalse(importRecordsResponse.HasError); //should be recreated account = Refresh(account); }
public void VsixDeployIntoFieldTest() { var fieldFilesToImport = GetFilesForFieldImport(); var fileFilesToImport = GetFilesForFileImport(); //new target record to deploy into var targetRecordName = "TESTDEPLOYINTO"; var targetRecord = XrmService.GetFirst(Entities.jmcg_testentity, Fields.jmcg_testentity_.jmcg_name, targetRecordName); while (targetRecord != null) { XrmService.Delete(targetRecord); targetRecord = XrmService.GetFirst(Entities.jmcg_testentity, Fields.jmcg_testentity_.jmcg_name, targetRecordName); } targetRecord = CreateTestRecord(Entities.jmcg_testentity, new Dictionary <string, object> { { Fields.jmcg_testentity_.jmcg_name, targetRecordName } }); //new target record to deploy into attachment var targetFileRecordName = "TESTDEPLOYINTO.css"; var targetFileRecord = XrmService.GetFirst(Entities.adx_webfile, XrmService.GetPrimaryNameField(Entities.adx_webfile), targetFileRecordName); while (targetFileRecord != null) { XrmService.Delete(targetFileRecord); targetFileRecord = XrmService.GetFirst(Entities.adx_webfile, XrmService.GetPrimaryNameField(Entities.adx_webfile), targetFileRecordName); } targetFileRecord = CreateTestRecord(Entities.adx_webfile, new Dictionary <string, object> { { XrmService.GetPrimaryNameField(Entities.adx_webfile), targetFileRecordName } }); //create an app, deploy and verify VisualStudioService.SetSelectedItems(GetFilesForFieldImport().Union(GetFilesForFileImport()).Select(f => new FakeVisualStudioProjectItem(f)).ToArray()); var testApplication = CreateAndLoadTestApplication <DeployIntoFieldModule>(); var dialog = testApplication.NavigateToDialog <DeployIntoFieldModule, DeployIntoFieldDialog>(); //verify target record fields targetRecord = Refresh(targetRecord); var html = File.ReadAllText(fieldFilesToImport.First(f => f.EndsWith("html"))); var javascript = File.ReadAllText(fieldFilesToImport.First(f => f.EndsWith("js"))); var css = File.ReadAllText(fieldFilesToImport.First(f => f.EndsWith("css"))); Assert.AreEqual(html, targetRecord.GetStringField(Fields.jmcg_testentity_.jmcg_source)); Assert.AreEqual(javascript, targetRecord.GetStringField(Fields.jmcg_testentity_.jmcg_javascript)); Assert.AreEqual(css, targetRecord.GetStringField(Fields.jmcg_testentity_.jmcg_css)); //verify file attachment var css2base64 = Convert.ToBase64String(File.ReadAllBytes(fileFilesToImport.First(f => f.EndsWith("css")))); var note = GetRegardingNotes(targetFileRecord).First(); var noteString = note.GetStringField(Fields.annotation_.documentbody); Assert.AreEqual(css2base64, noteString); //okay lets also update the attachment as this one only created it //first set it as something else so when reimported it is changing var htmlBase64 = Convert.ToBase64String(File.ReadAllBytes(fieldFilesToImport.First(f => f.EndsWith("html")))); note.SetField(Fields.annotation_.documentbody, htmlBase64); note = UpdateFieldsAndRetreive(note, new[] { Fields.annotation_.documentbody }); //create an app, deploy and verify testApplication = CreateAndLoadTestApplication <DeployIntoFieldModule>(); dialog = testApplication.NavigateToDialog <DeployIntoFieldModule, DeployIntoFieldDialog>(); //verify still 1 note var notes = GetRegardingNotes(targetFileRecord); Assert.AreEqual(1, notes.Count()); //and it was correctly updated noteString = notes.First().GetStringField(Fields.annotation_.documentbody); Assert.AreEqual(css2base64, noteString); }