public void VsixSolutionWizardTest()
        {
            //okay so this wizard contains a dialog spawned different to the others
            //since it is loaded prior to the solution being created
            //this script just verifies the settings are netered into the dialog wihtout a crash with no visual studio solutoion context etc.


            var packageSettings = new XrmPackageSettings();

            var container = new VsixDependencyContainer();

            //purpose of this is to load modules registrations into the container as per done in the actual wizard
            Factory.CreateJosephMXrmVsixApp(new FakeVisualStudioService(), container, isNonSolutionExplorerContext: true);

            //okay spawn the wizards entry method with a fake controller
            var applicationController = new FakeVsixApplicationController(container);

            XrmSolutionWizardBase.RunWizardSettingsEntry(packageSettings, applicationController, "Fake.Name");

            //okay so now we have navigated to the package entry
            //in our application controller via the wizard

            //here I inject that application conctroller into a fake application
            //so that I can use methods for auto testing the dialog which has spawned
            var fakeVsixApplication = TestApplication.CreateTestApplication(applicationController);

            fakeVsixApplication.AddModule <XrmPackageSettingsModule>();
            var dialog = fakeVsixApplication.GetNavigatedDialog <XrmPackageSettingsDialog>();

            //okay so the package entry dialog should redirect us to the connection entry when started as we dont have a connection yet
            var connectionEntryDialog = dialog.SubDialogs.First();
            var connectionEntry       = fakeVsixApplication.GetSubObjectEntryViewModel(connectionEntryDialog);

            var connectionToEnter = GetXrmRecordConfiguration();

            fakeVsixApplication.EnterAndSaveObject(connectionToEnter, connectionEntry);

            //okay now the connection is entered it should navigate to the package settings entry
            var packageSettingsEntry = fakeVsixApplication.GetSubObjectEntryViewModel(dialog, index: 1);

            Assert.AreEqual("Fake", packageSettingsEntry.GetStringFieldFieldViewModel(nameof(XrmPackageSettings.SolutionObjectPrefix)).Value);

            //we want to verify that the object had the settings passed into it as well as the lookup connection works
            packageSettingsEntry.GetBooleanFieldFieldViewModel(nameof(XrmPackageSettings.AddToSolution)).Value = true;
            var solutionPicklistField = packageSettingsEntry.GetLookupFieldFieldViewModel(nameof(XrmPackageSettings.Solution));

            solutionPicklistField.SelectedItem = solutionPicklistField.ItemsSource.ElementAt(1);
            Assert.IsTrue(!string.IsNullOrWhiteSpace(packageSettingsEntry.GetStringFieldFieldViewModel(nameof(XrmPackageSettings.SolutionDynamicsCrmPrefix)).Value));

            var connectionsubGrid = packageSettingsEntry.GetEnumerableFieldViewModel(nameof(XrmPackageSettings.Connections));

            Assert.IsTrue(connectionsubGrid.GridRecords.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, connectionsubGrid.GridRecords.First().GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value);

            packageSettingsEntry.SaveButtonViewModel.Invoke();

            Assert.IsTrue(packageSettings.Connections.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, packageSettings.Connections.First().OrganizationUniqueName);
        }
        protected virtual TestApplication CreateAndLoadTestApplication <TModule>(ApplicationControllerBase applicationController = null, ISettingsManager settingsManager = null, bool loadXrmConnection = true)
            where TModule : ModuleBase, new()
        {
            var testApplication = TestApplication.CreateTestApplication(applicationController, settingsManager);

            testApplication.AddModule <TModule>();
            return(testApplication);
        }
Example #3
0
        public void VsixSolutionWizardTest()
        {
            //okay so this wizard contains a dialog spawned different to the others
            //since it is loaded prior to the solution being created
            //this script just verifies the settings are netered into the dialog wihtout a crash with no visual studio solutoion context etc.


            var packageSettings = new XrmPackageSettings
            {
                SolutionDynamicsCrmPrefix = "FAKE",
                SolutionObjectPrefix      = "Fake"
            };
            //okay spawn the wizards entry method with a fake controller
            var container             = new VsixDependencyContainer();
            var applicationController = new FakeVsixApplicationController(container);

            XrmSolutionWizardBase.RunWizardSettingsEntry(packageSettings, applicationController);

            //fake applcation simply to use its navigation and entry methods
            var fakeVsixApplication = TestApplication.CreateTestApplication(applicationController);

            //okay so the package entry dialgo should redirect us to the conneciton entry when started as we don;t have a connection yet
            var dialog = fakeVsixApplication.GetNavigatedDialog <XrmPackageSettingsDialog>();
            var connectionEntryDialog = dialog.SubDialogs.First();
            var connectionEntry       = fakeVsixApplication.GetSubObjectEntryViewModel(connectionEntryDialog);

            var connectionToEnter = GetXrmRecordConfiguration();

            fakeVsixApplication.EnterAndSaveObject(connectionToEnter, connectionEntry);

            //okay now the conneciton is entered it should navigate to the package settings entry
            var packageSettingsEntry = fakeVsixApplication.GetSubObjectEntryViewModel(dialog, index: 1);

            //we want to verify that the object had the settings passed into it as well as the lookup connection works
            packageSettingsEntry.GetBooleanFieldFieldViewModel(nameof(XrmPackageSettings.AddToSolution)).Value = true;
            var solutionPicklistField = packageSettingsEntry.GetLookupFieldFieldViewModel(nameof(XrmPackageSettings.Solution));

            solutionPicklistField.SelectedItem = solutionPicklistField.ItemsSource.First();

            var connectionsubGrid = packageSettingsEntry.GetEnumerableFieldViewModel(nameof(XrmPackageSettings.Connections));

            Assert.IsTrue(connectionsubGrid.GridRecords.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, connectionsubGrid.GridRecords.First().GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value);

            packageSettingsEntry.SaveButtonViewModel.Invoke();

            Assert.IsTrue(packageSettings.Connections.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, packageSettings.Connections.First().OrganizationUniqueName);

            if (applicationController.GetObjects().Any())
            {
                Assert.Inconclusive("Haven't verified closure of the form after entry instead of navigation to completion screen");
            }
        }
        public void XrmConnectionModuleTestEnterConnection()
        {
            var recordConnection = new XrmConfigurationMapper().Map(XrmConfiguration as XrmConfiguration);

            //clear all saved settings for test script app
            var testApplication = TestApplication.CreateTestApplication();
            var settingsFolder  = testApplication.Controller.SettingsPath;

            FileUtility.DeleteFiles(settingsFolder);

            //create app with saved connections module
            testApplication = TestApplication.CreateTestApplication();
            testApplication.AddModule <SavedXrmConnectionsModule>();

            //navgiate to adding saved conneciton
            var module = testApplication.GetModule <XrmConnectionModule>();

            module.DialogCommand();
            var dialog          = testApplication.GetNavigatedDialog <XrmConnectionDialog>();
            var connectionEntry = testApplication.GetSubObjectEntryViewModel(dialog);

            //verify autocompletes only display for those not reliant on existing values
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.DiscoveryServiceAddress)).AutocompleteViewModel);
            Assert.IsNull(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.Domain)).AutocompleteViewModel);
            Assert.IsNull(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.Username)).AutocompleteViewModel);
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel);

            //enter the connection
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.Name)).Value = "Script Entry 1";
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.DiscoveryServiceAddress)).SearchButton.Invoke();
            Assert.IsTrue(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.DiscoveryServiceAddress)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.Any());
            connectionEntry.GetPicklistFieldFieldViewModel(nameof(XrmRecordConfiguration.AuthenticationProviderType)).Value = connectionEntry.GetPicklistFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.AuthenticationProviderType)).ItemsSource.First(p => p == PicklistOption.EnumToPicklistOption(recordConnection.AuthenticationProviderType));
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.DiscoveryServiceAddress)).Value      = recordConnection.DiscoveryServiceAddress;
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.Domain)).Value   = recordConnection.Domain;
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.Username)).Value = recordConnection.Username;
            connectionEntry.GetFieldViewModel(nameof(XrmRecordConfiguration.Password)).ValueObject      = recordConnection.Password;

            //including using autocomplete for the organisation unique name
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.OrganizationUniqueName)).SearchButton.Invoke();
            Assert.IsTrue(connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.Any());
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.SelectedRow = connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.First(r => r.GetStringFieldFieldViewModel(nameof(Xrm.Organisation.UniqueName)).Value == recordConnection.OrganizationUniqueName);
            connectionEntry.GetStringFieldFieldViewModel(nameof(XrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.SetToSelectedRow();
            Assert.AreEqual(recordConnection.OrganizationUniqueName, connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value);

            //save the connection and verify added to grid
            Assert.IsTrue(connectionEntry.Validate());
            connectionEntry.SaveButtonViewModel.Invoke();
        }
        protected virtual TestApplication CreateAndLoadTestApplication <TModule>(ApplicationControllerBase applicationController = null, ISettingsManager settingsManager = null, bool loadXrmConnection = true)
            where TModule : ModuleBase, new()
        {
            var testApplication = TestApplication.CreateTestApplication(applicationController, settingsManager);

            testApplication.AddModule <TModule>();
            if (loadXrmConnection)
            {
                XrmConnectionModule.RefreshXrmServices(GetXrmRecordConfiguration(), testApplication.Controller);
                testApplication.Controller.RegisterInstance <ISavedXrmConnections>(new SavedXrmConnections.SavedXrmConnections
                {
                    Connections = new[] { GetSavedXrmRecordConfiguration() }
                });
            }
            return(testApplication);
        }
Example #6
0
        public void ObjectEncryptionTest()
        {
            FileUtility.DeleteFiles(TestingFolder);

            var application = TestApplication.CreateTestApplication();

            application.AddModule <ObjectEncryptModule <TestObjectEncryptDialog, TestClassToEncrypt> >();

            var instance = new TestClassToEncrypt();

            PopulateObject(instance);

            application.NavigateAndProcessDialog <ObjectEncryptModule <TestObjectEncryptDialog, TestClassToEncrypt>, TestObjectEncryptDialog>(new object[] { instance, new ObjectEncryptToFolder()
                                                                                                                                                             {
                                                                                                                                                                 SaveToFolder = new Folder(TestingFolder)
                                                                                                                                                             } });

            Assert.IsTrue(FileUtility.GetFiles(TestingFolder).Any());
        }
Example #7
0
        public void SavedXrmConnectionsModuleTestEnterSavedConnections()
        {
            var recordConnection = new XrmConfigurationMapper().Map(XrmConfiguration as XrmConfiguration);

            //clear all saved settings for test script app
            var testApplication = TestApplication.CreateTestApplication();
            var settingsFolder  = testApplication.Controller.SettingsPath;

            FileUtility.DeleteFiles(settingsFolder);

            //create app with saved connections module
            testApplication = TestApplication.CreateTestApplication();
            testApplication.AddModule <SavedXrmConnectionsModule>();

            //navgiate to adding saved conneciton
            var dialog = testApplication.NavigateToDialog <SavedXrmConnectionsModule, SavedXrmConnectionsDialog>();
            var savedConnectionsEntryForm = testApplication.GetSubObjectEntryViewModel(dialog);

            //click to add a connection to the grid
            var connectionsGrid = savedConnectionsEntryForm.GetEnumerableFieldViewModel(nameof(SavedXrmConnections.SavedXrmConnections.Connections));

            connectionsGrid.DynamicGridViewModel.AddRowButton.Invoke();
            var connectionEntry = testApplication.GetSubObjectEntryViewModel(savedConnectionsEntryForm);

            //verify autocompletes only display for those not reliant on existing values
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)).AutocompleteViewModel);
            Assert.IsNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Domain)).AutocompleteViewModel);
            Assert.IsNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Username)).AutocompleteViewModel);
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel);

            //enter the connection
            connectionEntry.GetBooleanFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Active)).Value = true;
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Name)).Value    = "Script Entry 1";
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)).SearchButton.Invoke();
            Assert.IsTrue(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.Any());
            connectionEntry.GetPicklistFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.AuthenticationProviderType)).Value = connectionEntry.GetPicklistFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.AuthenticationProviderType)).ItemsSource.First(p => p == PicklistOption.EnumToPicklistOption(recordConnection.AuthenticationProviderType));
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)).Value      = recordConnection.DiscoveryServiceAddress;
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Domain)).Value   = recordConnection.Domain;
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Username)).Value = recordConnection.Username;
            connectionEntry.GetFieldViewModel(nameof(SavedXrmRecordConfiguration.Password)).ValueObject      = recordConnection.Password;

            //including using autocomplete for the organisation unique name
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).SearchButton.Invoke();
            Assert.IsTrue(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.Any());
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.SelectedRow = connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.DynamicGridViewModel.GridRecords.First(r => r.GetStringFieldFieldViewModel(nameof(Xrm.Organisation.UniqueName)).Value == recordConnection.OrganizationUniqueName);
            connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel.SetToSelectedRow();
            Assert.AreEqual(recordConnection.OrganizationUniqueName, connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value);

            //save the connection and verify added to grid
            Assert.IsTrue(connectionEntry.Validate());
            connectionEntry.SaveButtonViewModel.Invoke();
            Assert.IsFalse(savedConnectionsEntryForm.ChildForms.Any());
            connectionsGrid = savedConnectionsEntryForm.GetEnumerableFieldViewModel(nameof(SavedXrmConnections.SavedXrmConnections.Connections));
            Assert.AreEqual(1, connectionsGrid.GridRecords.Count);

            //save the connections and verify reloads same form with the connection
            Assert.IsTrue(savedConnectionsEntryForm.Validate());
            savedConnectionsEntryForm.SaveButtonViewModel.Invoke();

            savedConnectionsEntryForm = savedConnectionsEntryForm = testApplication.GetSubObjectEntryViewModel(dialog, index: 1);
            connectionsGrid           = savedConnectionsEntryForm.GetEnumerableFieldViewModel(nameof(SavedXrmConnections.SavedXrmConnections.Connections));
            Assert.AreEqual(1, connectionsGrid.GridRecords.Count);

            //go to add another connection and verify username now has autocomplete due to existing value
            connectionsGrid.DynamicGridViewModel.AddRowButton.Invoke();
            connectionEntry = testApplication.GetSubObjectEntryViewModel(savedConnectionsEntryForm);
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)).AutocompleteViewModel);
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.Username)).AutocompleteViewModel);
            Assert.IsNotNull(connectionEntry.GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).AutocompleteViewModel);
        }