public async Task ConnectionLostUserSayGoOffline() { var prevConnection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, prevConnection); var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true); _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock); _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear(); var connection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, connection); Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); MockConnection.IsConnectionLost = true; Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); _readCommand.Execute(null); Assert.True(await TestsUtils.WaitUntil( () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000)); Assert.True((prevConnection as MockConnection).IsDisposed); MockConnection.IsConnectionLost = false; Assert.True(await TestsUtils.WaitUntil(() => !_readCommand.CanExecute(null), 30000)); }
public async Task ConnectionLostOnWrite() { var prevConnection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, prevConnection); var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true); _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock); _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear(); var connection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, connection); Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); _readCommand.Execute(null); Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); (_device.DataProvider.Item.TransactionCompleteSubscription as TransactionCompleteSubscription).ResetOnConnectionRetryCounter(true); _device.DataProvider.Item.TransactionCompleteSubscription.Execute(); var defaultPropertyWithBoolFormatting = _configurationFragmentViewModel.RootConfigurationItemViewModels .Cast <IConfigurationItemViewModel>().ToList() .FindItemViewModelByName(model => model.Header == "boolTestDefaultProperty") .Item as IRuntimePropertyViewModel; (defaultPropertyWithBoolFormatting.LocalValue as EditableBoolValueViewModel).BoolValueProperty = true; var writeCommand = _configurationFragmentViewModel.FragmentOptionsViewModel.FragmentOptionGroupViewModels .First(model => model.NameKey == "Device").FragmentOptionCommandViewModels .First(model => model.TitleKey == ConfigurationKeys.WRITE_LOCAL_VALUES_TO_DEVICE_STRING_KEY) .OptionCommand as RelayCommand; MockConnection.IsConnectionLost = true; while (!applicationGlobalCommandsMock.IsAskUserGlobalTriggered) { writeCommand.Execute(null); await TestsUtils.WaitUntil(() => writeCommand.CanExecute(null), 2000); } Assert.True(await TestsUtils.WaitUntil( () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000)); Assert.True((prevConnection as MockConnection).IsDisposed); Assert.True((connection as MockConnection).IsDisposed); Assert.True(applicationGlobalCommandsMock.IsAskUserGlobalTriggered); MockConnection.IsConnectionLost = false; (defaultPropertyWithBoolFormatting.LocalValue as EditableBoolValueViewModel).BoolValueProperty = false; Assert.True(await TestsUtils.WaitUntil(() => !_readCommand.CanExecute(null), 30000)); }
public async Task OpenProjectTryReconnectConnectionLost() { var app = Program.GetApp(); var shell = app.Container.Resolve <ShellViewModel>(); var typesContainer = app.Container.Resolve <ITypesContainer>(); var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true); typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock); Program.RefreshProject(); MockConnection.IsConnectionLost = true; var projectService = app.Container.Resolve <IUniconProjectService>(); await projectService.LoadProject("FileAssets/testProject.uniproj"); var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0]; Assert.True(await TestsUtils.WaitUntil(() => !deviceViewModel.ConnectionStateViewModel.IsDeviceConnected)); Assert.False(applicationGlobalCommandsMock.IsAskUserGlobalTriggered); var deviceContainerService = app.Container.Resolve <IDevicesContainerService>(); var device = deviceContainerService.ConnectableItems[0] as DefaultDevice; Assert.True(device.DeviceConnection is OfflineConnection); MockConnection.IsConnectionLost = false; projectService.CreateNewProject(); Program.RefreshProject(); }
public static void CleanProject() { var globalCommandsMock = ApplicationGlobalCommandsMock .Create() .WithAskUserGlobalResult(false); StaticContainer.Container?.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock); GetApp().Container.Resolve <IDevicesContainerService>().Refresh(); GetApp().Container.Resolve <IDevicesContainerService>().ConnectableItemChanged?.Invoke( new ConnectableItemChangingContext(null, ItemModifyingTypeEnum.Refresh)); }
public void EditorImportPropertiesTypeASave() { var globalCommandsMock = ApplicationGlobalCommandsMock .Create() .WithAskUserGlobalResult(true).WithSelectFileToOpenResult("FileAssets/МР5ПО60_ВЛС.xlsx"); StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock); var serializerService = Program.GetApp().Container.Resolve <ISerializerService>(); IResultingDeviceViewModel initialDevice = Program.GetApp().Container.Resolve <IResultingDeviceViewModel>(); initialDevice.LoadDevice("FileAssets/testFile.json"); var configurationEditorViewModel = initialDevice.FragmentEditorViewModels.First() as ConfigurationEditorViewModel; var targetGroup = configurationEditorViewModel.RootConfigurationItemViewModels.First(); targetGroup.ChildStructItemViewModels.Clear(); var helper = Program.GetApp().Container.Resolve <ImportPropertiesFromExcelTypeAHelper>(); helper.ImportPropertiesToGroup(targetGroup as IConfigurationGroupEditorViewModel); Program.CleanProject(); var device = initialDevice.GetDevice(); Program.GetApp().Container.Resolve <IDevicesContainerService>() .AddConnectableItem(device); var shell = Program.GetApp().Container.Resolve <ShellViewModel>(); var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0]; var configurationFragmentViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels .First(model => model.NameForUiKey == "Configuration") as RuntimeConfigurationViewModel; var group = configurationEditorViewModel.RootConfigurationItemViewModels.First(); Assert.AreEqual(group.ChildStructItemViewModels.Count, 111); Assert.AreEqual(group.ChildStructItemViewModels[49].Header, "U2>> ИО"); Assert.True( (((device.DeviceFragments.First() as IDeviceConfiguration).RootConfigurationItemList[0] as IItemsGroup).ConfigurationItemList[100] as IProperty).IsFromBits); Assert.True( (((device.DeviceFragments.First() as IDeviceConfiguration).RootConfigurationItemList[0] as IItemsGroup).ConfigurationItemList[100] as IProperty).UshortsFormatter is IBoolFormatter); }
public async Task ConnectionLostUserSayGoOfflineWhenMeasuringInLoadingCycle() { var prevConnection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, prevConnection); var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true); _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock); _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear(); var connection = new MockConnection(); await _typesContainer.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(_device, connection); Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); var loadCycleCommand = _measuringMonitorViewModel.FragmentOptionsViewModel.FragmentOptionGroupViewModels .First(model => model.NameKey == "Loading").FragmentOptionCommandViewModels .First(model => model.TitleKey == "CycleLoading") as FragmentOptionToggleCommandViewModel; loadCycleCommand.IsChecked = true; MockConnection.IsConnectionLost = true; Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000)); _readCommand.Execute(null); Assert.True(await TestsUtils.WaitUntil( () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000)); await Task.Delay(3000); Assert.False(_measuringMonitorViewModel.HasErrors); Assert.True(await TestsUtils.WaitUntil( () => !loadCycleCommand.IsChecked)); MockConnection.IsConnectionLost = false; }
public async Task LoadJournalStructureMustBeChecked() { Program.CleanProject(); var globalCommandsMock = ApplicationGlobalCommandsMock .Create() .WithSelectFileToOpenResult("FileAssets/Журнал(Журнал системы) МР301_JA.ujr") .WithAskUserGlobalResult(false); StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock); var serializerService = Program.GetApp().Container.Resolve <ISerializerService>(); var device = serializerService.DeserializeFromFile <IDevice>("FileAssets/МР301_JA.json") as DefaultDevice; StaticContainer.Container.Resolve <IDevicesContainerService>() .AddConnectableItem(device); var shell = StaticContainer.Container.Resolve <ShellViewModel>(); await StaticContainer.Container.Resolve <IDevicesContainerService>() .ConnectDeviceAsync(device, new OfflineConnection()); var journalViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels .First(model => model.NameForUiKey == "UniconJournal(Аварий)") as UniconJournalViewModel; var commandViewModel = journalViewModel.FragmentOptionsViewModel.GetCommand("Device", "Open"); commandViewModel.OptionCommand.Execute(null); await TestsUtils.WaitUntil(() => commandViewModel.OptionCommand.CanExecute(null)); Assert.True(globalCommandsMock.IsAskUserGlobalTriggered); Assert.False(journalViewModel.Table.Values.Any()); Program.RefreshProject(); }
public void EditorBaseValuesSave() { var serializerService = Program.GetApp().Container.Resolve <ISerializerService>(); IResultingDeviceViewModel initialDevice = Program.GetApp().Container.Resolve <IResultingDeviceViewModel>(); initialDevice.LoadDevice("FileAssets/testFile.json"); var configurationEditorViewModel = initialDevice.FragmentEditorViewModels.First() as ConfigurationEditorViewModel; var memoryForBaseValues = serializerService.DeserializeFromFile <Dictionary <ushort, ushort> >( "FileAssets/Конфигурация testFile.cnf"); var baseValuesMemory = Result <Dictionary <ushort, ushort> > .Create(memoryForBaseValues, true); configurationEditorViewModel.BaseValuesViewModel = new BaseValuesViewModel(); configurationEditorViewModel.BaseValuesViewModel.BaseValuesViewModels.Add(new BaseValueViewModel() { Name = "baseVal1", BaseValuesMemory = baseValuesMemory }); configurationEditorViewModel.BaseValuesViewModel.BaseValuesViewModels.Add(new BaseValueViewModel() { Name = "baseVal2", BaseValuesMemory = baseValuesMemory }); var result = ConfigurationFragmentFactory.CreateConfiguration(configurationEditorViewModel); Assert.AreEqual(result.BaseValues.BaseValues.Count, 2); Assert.True(result.BaseValues.BaseValues[0].Name == "baseVal1"); Assert.True(result.BaseValues.BaseValues[1].Name == "baseVal2"); Program.CleanProject(); var globalCommandsMock = ApplicationGlobalCommandsMock .Create() .WithAskUserGlobalResult(true); StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock); var device = initialDevice.GetDevice(); Program.GetApp().Container.Resolve <IDevicesContainerService>() .AddConnectableItem(device); var shell = Program.GetApp().Container.Resolve <ShellViewModel>(); var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0]; var configurationFragmentViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels .First(model => model.NameForUiKey == "Configuration") as RuntimeConfigurationViewModel; var command = configurationFragmentViewModel.FragmentOptionsViewModel.GetCommand("BaseValues", "baseVal1"); var editableChosenFromListValueViewModel = ((configurationFragmentViewModel.AllRows[4].ChildStructItemViewModels[2] as ILocalAndDeviceValueContainingViewModel).LocalValue as EditableChosenFromListValueViewModel); Assert.AreEqual( editableChosenFromListValueViewModel.SelectedItem, "Нет"); command.OptionCommand.Execute(null); Assert.AreEqual( editableChosenFromListValueViewModel.SelectedItem, "Д2 Инв"); editableChosenFromListValueViewModel.SelectedItem = editableChosenFromListValueViewModel.AvailableItemsList[1]; Assert.AreEqual( editableChosenFromListValueViewModel.SelectedItem, "Д1 Инв"); command.OptionCommand.Execute(null); Assert.AreEqual( editableChosenFromListValueViewModel.SelectedItem, "Д2 Инв"); }