public void ConsoleApplicationModuleGenerateBatAndExecuteTest() { //this is done in the load.edit saved request form //a button is added the the saved request grid whiuch generates the .bat //so we need to save a request //then navigate to the save requests and trigger the generate bat button var testApplication = CreateThisApp(); //set to no previously saved ones var savedRequests = new SavedSettings(); var settingsManager = testApplication.Controller.ResolveType <ISettingsManager>(); settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest)); //navigate to the request and populate the string field var entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); var request = new TestSavedRequestDialogRequest() { SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString) }; testApplication.EnterObject(request, entryForm); //trigger save request var saveRequestButton = entryForm.GetButton("SAVEREQUEST"); saveRequestButton.Invoke(); //enter and save details including autoload var saveRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); var detailsEntered = new SaveAndLoadFields() { Name = "TestName" }; testApplication.EnterAndSaveObject(detailsEntered, saveRequestForm); Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); //reopen app/dialog testApplication = CreateThisApp(); entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); //invoke load request dialog var loadRequestButton = entryForm.GetButton("LOADREQUEST"); loadRequestButton.Invoke(); var loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); //verify there is a saved request and trigger the generate bat button var subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests)); Assert.IsTrue(subGrid.GridRecords.Count() == 1); subGrid.GridRecords.First().IsSelected = true; var generateBatButton = subGrid.DynamicGridViewModel.GetButton("GENERATEBAT"); generateBatButton.Invoke(); var testFiles = FileUtility.GetFiles(TestingFolder); Assert.AreEqual(1, testFiles.Count()); Assert.IsTrue(testFiles.First().EndsWith(".bat")); var batContent = File.ReadAllText(testFiles.First()); var args = CommandLineToArgs(batContent) .Skip(1) .ToArray(); var arguments = ConsoleApplication.ParseCommandLineArguments(args); var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context"; //okay need to create app var dependencyResolver = new PrismDependencyContainer(new UnityContainer()); var controller = new ConsoleApplicationController(applicationName, dependencyResolver); settingsManager = new PrismSettingsManager(controller); var applicationOptions = new ApplicationOptionsViewModel(controller); var app = new ConsoleApplication(controller, applicationOptions, settingsManager); //load modules in folder path app.LoadModulesInExcecutionFolder(); //run app app.Run(args); }
public void SavedRequestModuleTest() { var testApplication = CreateAndLoadTestApplication <SavedRequestModule>(); testApplication.AddModule <TestSavedRequestModule>(); //set to no previously saved ones var savedRequests = new SavedSettings(); var settingsManager = testApplication.Controller.ResolveType <ISettingsManager>(); settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest)); //navigate to the request and populate the string field var entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); var request = new TestSavedRequestDialogRequest() { SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString) }; testApplication.EnterObject(request, entryForm); var loadDropDownButtons = entryForm.CustomFunctions.Where(f => f.Id == "LOADREQUESTDROPDOWN"); Assert.AreEqual(0, loadDropDownButtons.Count()); //trigger save request var saveRequestButton = entryForm.GetButton("SAVEREQUEST"); saveRequestButton.Invoke(); //enter and save details including autoload var saveRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); var detailsEntered = new SaveAndLoadFields() { Name = "TestName", Autoload = true }; testApplication.EnterAndSaveObject(detailsEntered, saveRequestForm); Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); //okay lets verify that the dropdown of saved requests loaded loadDropDownButtons = entryForm.CustomFunctions.Where(f => f.Id == "LOADREQUESTDROPDOWN"); Assert.AreEqual(1, loadDropDownButtons.Count()); Assert.AreEqual(1, loadDropDownButtons.First().ChildButtons.Count()); Assert.AreEqual("TestName", loadDropDownButtons.First().ChildButtons.First().Label); //reopen app/dialog and verify autoloads testApplication = CreateAndLoadTestApplication <SavedRequestModule>(); testApplication.AddModule <TestSavedRequestModule>(); entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); Assert.AreEqual(nameof(TestSavedRequestDialogRequest.SomeArbitraryString), entryForm.GetStringFieldFieldViewModel(nameof(TestSavedRequestDialogRequest.SomeArbitraryString)).Value); //clear the loaded string value entryForm.GetStringFieldFieldViewModel(nameof(TestSavedRequestDialogRequest.SomeArbitraryString)).Value = "Something Else"; //invoke load request dialog in the dropdown loadDropDownButtons = entryForm.CustomFunctions.Where(f => f.Id == "LOADREQUESTDROPDOWN"); Assert.AreEqual(1, loadDropDownButtons.Count()); Assert.AreEqual(1, loadDropDownButtons.First().ChildButtons.Count()); Assert.AreEqual("TestName", loadDropDownButtons.First().ChildButtons.First().Label); loadDropDownButtons.First().ChildButtons.First().Invoke(); //verify loads Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); Assert.AreEqual(nameof(TestSavedRequestDialogRequest.SomeArbitraryString), entryForm.GetStringFieldFieldViewModel(nameof(TestSavedRequestDialogRequest.SomeArbitraryString)).Value); //clear the loaded string value entryForm.GetStringFieldFieldViewModel(nameof(TestSavedRequestDialogRequest.SomeArbitraryString)).Value = "Something Else"; //invoke load request dialog in the edit form var loadRequestButton = entryForm.GetButton("LOADREQUEST"); loadRequestButton.Invoke(); var loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); //select and load the saved request var subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests)); Assert.IsTrue(subGrid.GridRecords.Count() == 1); subGrid.GridRecords.First().IsSelected = true; var loadButton = subGrid.DynamicGridViewModel.GetButton("LOADREQUEST"); loadButton.Invoke(); //verify loads Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); Assert.AreEqual(nameof(TestSavedRequestDialogRequest.SomeArbitraryString), entryForm.GetStringFieldFieldViewModel(nameof(TestSavedRequestDialogRequest.SomeArbitraryString)).Value); //verify if delete on the load form //invoke load form loadRequestButton = entryForm.GetButton("LOADREQUEST"); loadRequestButton.Invoke(); loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); //delete the saved request in the grid subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests)); subGrid.DynamicGridViewModel.DeleteRow(subGrid.GridRecords.First()); loadRequestForm.SaveButtonViewModel.Invoke(); Assert.IsFalse(entryForm.ChildForms.Any()); Assert.IsFalse(entryForm.LoadingViewModel.IsLoading); //no saved dropdown loadDropDownButtons = entryForm.CustomFunctions.Where(f => f.Id == "LOADREQUESTDROPDOWN"); Assert.AreEqual(0, loadDropDownButtons.Count()); //verify no longer a saved request resolved by the settings manager settingsManager = testApplication.Controller.ResolveType <ISettingsManager>(); savedRequests = settingsManager.Resolve <SavedSettings>(typeof(TestSavedRequestDialogRequest)); Assert.IsFalse(savedRequests.SavedRequests.Any()); //verify does not throw fatal error if lookup referenced is deleted in the saved requests //create a saved request for a deleted solution var solution = ReCreateTestSolution(); request = new TestSavedRequestDialogRequest() { Name = "Foo", Autoload = true, SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString), XrmLookupField = solution.ToLookup() }; savedRequests = new SavedSettings() { SavedRequests = new[] { request } }; settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest)); XrmRecordService.Delete(solution); //verify a user message is thrown when the autoload fires testApplication = CreateAndLoadTestApplication <SavedRequestModule>(); testApplication.AddModule <TestSavedRequestModule>(); try { entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); } catch (Exception ex) { Assert.IsTrue(ex is FakeUserMessageException); } //verify saved requests load when a saved request has a deleted solution //create a saved request with a solution solution = ReCreateTestSolution(); request = new TestSavedRequestDialogRequest() { Name = "Foo", SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString), XrmLookupField = solution.ToLookup() }; savedRequests = new SavedSettings() { SavedRequests = new[] { request } }; settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest)); //load the dialog testApplication = CreateAndLoadTestApplication <SavedRequestModule>(); testApplication.AddModule <TestSavedRequestModule>(); entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>(); //delete the solution XrmRecordService.Delete(solution); //invoke the load request form loadRequestButton = entryForm.GetButton("LOADREQUEST"); loadRequestButton.Invoke(); //veirfy a user message is thrown if try to load the one with the deleted solution loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm); subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests)); Assert.IsTrue(subGrid.GridRecords.Count() == 1); subGrid.GridRecords.First().IsSelected = true; loadButton = subGrid.DynamicGridViewModel.GetButton("LOADREQUEST"); try { loadButton.Invoke(); } catch (Exception ex) { Assert.IsTrue(ex is FakeUserMessageException); } }