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());
        }
示例#2
0
        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);
        }
示例#6
0
        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);
        }