public void NullableDateTimeTest() { foreach (IDataService dataService in DataServices) { // Arrange. // Добавляются объекты данных в БД, чтобы проверить обработку // NullableDateTime в linq-выражениях. // Мастер. var testMasterObject = new FullTypesMaster1(); testMasterObject.PoleInt = 1; // Первый объект для проверки работы linq-выражений, // если поле типа NullDateTime принимает значение null. var testObj1 = new FullTypesMainAgregator(); testObj1.PoleNullDateTime = null; testObj1.FullTypesMaster1 = testMasterObject; // Второй объект для проверки работы linq-выражений, // если поле типа NullDateTime принимает значение текущего даты-времени. var testObj2 = new FullTypesMainAgregator(); testObj2.PoleNullDateTime = DateTime.Now; testObj2.FullTypesMaster1 = testMasterObject; // Третий объект для проверки работы linq-выражений, // если поле типа NullDateTime принимает конкретное значение. var testObj3 = new FullTypesMainAgregator(); testObj3.PoleNullableDateTime = (NullableDateTime) new DateTime(2015, 11, 14, 10, 37, 44); testObj3.FullTypesMaster1 = testMasterObject; // Список объектов данных, которые нужно сохранить. List <ICSSoft.STORMNET.DataObject> objectsToUpdate = new List <ICSSoft.STORMNET.DataObject>(); objectsToUpdate.AddRange(new ICSSoft.STORMNET.DataObject[] { testMasterObject, testObj1, testObj2, testObj3 }); ICSSoft.STORMNET.DataObject[] objectsToUpdateArray = objectsToUpdate.ToArray(); dataService.UpdateObjects(ref objectsToUpdateArray); // Контролдьная дата-время. var gaugeNullableDateTime = new NullableDateTime { Value = DateTime.Today.AddDays(-7) }; // Act. // Для testObj3 должно выполниться только первое условие под .Where. List <FullTypesMainAgregator> testList = dataService .Query <FullTypesMainAgregator>(FullTypesMainAgregator.Views.FullView.Name) .Where(w => w.PoleNullableDateTime <= (NullableDateTime)DateTime.Now && w.PoleNullableDateTime >= gaugeNullableDateTime) .ToList(); } }
public void TestDataObjectValidatorOwnGuidProperty() { // Arrange. Guid primaryKey = Guid.NewGuid(); var fullTypesMainAgregator = new FullTypesMainAgregator() { __PrimaryKey = primaryKey }; Function trueFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, Information.ExtractPropertyPath <DataObject>(x => x.__PrimaryKey)), primaryKey); Function falseFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, Information.ExtractPropertyPath <DataObject>(x => x.__PrimaryKey)), Guid.Empty); // Act & Assert. Assert.True(DataObjectValidator.CheckObject(fullTypesMainAgregator, trueFunction)); Assert.False(DataObjectValidator.CheckObject(fullTypesMainAgregator, falseFunction)); }
public void TestDataObjectValidatorNotLoadedProperty() { var exception = Xunit.Record.Exception(() => { // Arrange. string fieldName = Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.PoleString); Function notLoadedFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, fieldName), "123"); var fullTypesMainAgregator = new FullTypesMainAgregator(); fullTypesMainAgregator.SetExistObjectPrimaryKey(Guid.NewGuid()); fullTypesMainAgregator.PoleString = "123"; // Act & Assert. Assert.True(fullTypesMainAgregator.GetStatus() != ObjectStatus.Created); Assert.False(fullTypesMainAgregator.GetLoadedProperties().Contains(fieldName)); DataObjectValidator.CheckObject(fullTypesMainAgregator, notLoadedFunction); }); Assert.IsType(typeof(UsedNotLoadedPropertyValidationException), exception); }
public void TestLoadNullChar() { // Arrange. char testChar = '1'; LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), FullTypesMainAgregator.Views.FullView); // 49 - это код символа '1'. lcs.LimitFunction = this.ldef.GetFunction( this.ldef.funcEQ, new VariableDef(this.ldef.StringType, Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.PoleNullChar)), 49); LoadingCustomizationStruct lcs2 = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), FullTypesMainAgregator.Views.FullView); lcs2.LimitFunction = this.ldef.GetFunction( this.ldef.funcEQ, new VariableDef(this.ldef.StringType, Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.PoleNullChar)), testChar); foreach (IDataService dataService in DataServices) { var testObject = new FullTypesMainAgregator() { PoleNullChar = '1', FullTypesMaster1 = new FullTypesMaster1() }; dataService.UpdateObject(testObject); // Act. int count = dataService.GetObjectsCount(lcs); int count2 = dataService.GetObjectsCount(lcs2); int linqCount = dataService.Query <FullTypesMainAgregator>(FullTypesMainAgregator.Views.FullView.Name).Count(x => x.PoleNullChar == testChar); int linq2Count = dataService.Query <FullTypesMainAgregator>(FullTypesMainAgregator.Views.FullView.Name).Count(x => x.PoleNullChar == '1'); // Assert. Assert.Equal(1, count); Assert.Equal(count, count2); Assert.Equal(count, linqCount); Assert.Equal(count, linq2Count); } }
public void TestDataObjectValidatorOr() { // Arrange. Guid primaryKey = Guid.NewGuid(); Guid otherGuid = Guid.NewGuid(); Guid other2Guid = Guid.Empty; Function withFirstFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, Information.ExtractPropertyPath <DataObject>(x => x.__PrimaryKey)), primaryKey); Function withSecondFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, Information.ExtractPropertyPath <DataObject>(x => x.__PrimaryKey)), otherGuid); Function withThirdFunction = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, Information.ExtractPropertyPath <DataObject>(x => x.__PrimaryKey)), other2Guid); var fullTypesMainAgregator = new FullTypesMainAgregator() { __PrimaryKey = primaryKey }; Function trueFunction = _languageDef.GetFunction(_languageDef.funcOR, withFirstFunction, withSecondFunction); Function true2Function = _languageDef.GetFunction(_languageDef.funcOR, withSecondFunction, withFirstFunction); Function falseFunction = _languageDef.GetFunction(_languageDef.funcOR, withSecondFunction, withThirdFunction); // Act & Assert. Assert.True(DataObjectValidator.CheckObject(fullTypesMainAgregator, trueFunction)); Assert.True(DataObjectValidator.CheckObject(fullTypesMainAgregator, true2Function)); Assert.False(DataObjectValidator.CheckObject(fullTypesMainAgregator, falseFunction)); }
public void Test_funcExistDetails() { // TODO Удалить данную строчку, как исправят баг 94309. // IDataService dataService = DataServices[0]; // TODO Вернуть данную строчку, как исправят баг 94309. foreach (IDataService dataService in DataServices) { // Arrange. var ds = (SQLDataService)dataService; // Контрольные значене. const int controlInt = 1; // Сначала создаём структуру данных, требуемую для теста. var testMasterObject = new FullTypesMaster1(); var testFullTypesMainAgregator = new FullTypesMainAgregator { FullTypesMaster1 = testMasterObject }; // Создание детейлов, которые не подходят под условие ограничения. testFullTypesMainAgregator.FullTypesDetail1.Add(new FullTypesDetail1 { PoleInt = controlInt }); testFullTypesMainAgregator.FullTypesDetail2.Add(new FullTypesDetail2 { PoleInt = 2 }); var updateObjectsArray = new DataObject[] { testMasterObject, testFullTypesMainAgregator }; // Сохранение данных. ds.UpdateObjects(ref updateObjectsArray); // Выбор представления. var view = FullTypesMainAgregator.Views.FullViewWithDetail1; var view2 = FullTypesDetail1.Views.FullDetailView; var view3 = FullTypesDetail2.Views.FullTypesDetail2E; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), view); string cmp = Information.ExtractPropertyPath <FullTypesDetail1>(x => x.FullTypesMainAgregator); string name1 = Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.FullTypesDetail1); string name2 = Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.FullTypesDetail2); var detail = new DetailVariableDef(_ldef.GetObjectType("Details"), name1, view2, cmp, new[] { SQLWhereLanguageDef.StormMainObjectKey }); var detail2 = new DetailVariableDef(_ldef.GetObjectType("Details"), name2, view3, cmp, new[] { SQLWhereLanguageDef.StormMainObjectKey }); // Проверка существования детейлов такого, что: lcs.LimitFunction = _ldef.GetFunction(_ldef.funcExistDetails, detail, detail2, _ldef.GetFunction( // Равны. _ldef.funcEQ, // Хотя бы одно значение в поле Int у первого детейла. new VariableDef(_ldef.NumericType, Information.ExtractPropertyPath <FullTypesDetail1>(x => x.PoleInt)), // И значение в поле Int у второго детейла. new VariableDef(_ldef.NumericType, Information.ExtractPropertyPath <FullTypesDetail2>(x => x.PoleInt)))); // Act. var dos = ds.LoadObjects(lcs); // Assert. Assert.Equal(dos.Length, 0); // Создание детейла, который подходит под условте ограничения. testFullTypesMainAgregator.FullTypesDetail2.Add(new FullTypesDetail2 { PoleInt = controlInt }); // Сохранение новых данных. ds.UpdateObjects(ref updateObjectsArray); // Act. var dos2 = ds.LoadObjects(lcs); // Assert. Assert.Equal(dos2.Length, 1); } }
public void Test_funcExistAll() { // TODO Удалить данную строчку, как исправят баг 94309. // IDataService dataService = DataServices[0]; // TODO Вернуть данную строчку, как исправят баг 94309. foreach (IDataService dataService in DataServices) { // Arrange. var ds = (SQLDataService)dataService; // Контрольные значене. const int controlInt = 1; const bool controlBool = true; // Сначала создаём структуру данных, требуемую для теста. var testMasterObject = new FullTypesMaster1(); var testFullTypesMainAgregator = new FullTypesMainAgregator { FullTypesMaster1 = testMasterObject }; // Создание детейла, который не подходит под условие ограничения. testFullTypesMainAgregator.FullTypesDetail1.Add(new FullTypesDetail1 { PoleInt = 2, PoleBool = false }); var updateObjectsArray = new DataObject[] { testMasterObject, testFullTypesMainAgregator }; // Сохранение данных. ds.UpdateObjects(ref updateObjectsArray); // Выбор представления. var view = FullTypesMainAgregator.Views.FullViewWithDetail1; var view2 = FullTypesDetail1.Views.FullDetailView; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), view); string cmp = Information.ExtractPropertyPath <FullTypesDetail1>(x => x.FullTypesMainAgregator); string name = Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.FullTypesDetail1); var detail = new DetailVariableDef(_ldef.GetObjectType("Details"), name, view2, cmp, new[] { SQLWhereLanguageDef.StormMainObjectKey }); // Проверка существования детейла такого, что: lcs.LimitFunction = _ldef.GetFunction(_ldef.funcExistAll, detail, // Поле int в детейле равно контрольному значению(controlInt = 1). _ldef.GetFunction(_ldef.funcEQ, new VariableDef(_ldef.NumericType, Information.ExtractPropertyPath <FullTypesDetail1>(x => x.PoleInt)), controlInt), // Или поле bool в детейле равно контрольному значению (controlBool=true). _ldef.GetFunction(_ldef.funcEQ, new VariableDef(_ldef.BoolType, Information.ExtractPropertyPath <FullTypesDetail1>(x => x.PoleBool)), controlBool)); // Act. var dos = ds.LoadObjects(lcs); // Assert. Assert.Equal(dos.Length, 0); // Создание детейла, который подходит под условие ограничения. testFullTypesMainAgregator.FullTypesDetail1.Add(new FullTypesDetail1 { PoleInt = controlInt, PoleBool = controlBool }); // Сохранение новых данных. ds.UpdateObjects(ref updateObjectsArray); // Act. var dos2 = ds.LoadObjects(lcs); // Assert. Assert.Equal(dos2.Length, 1); } }
public void Test_paramYearDIFF() { // TODO Удалить данную строчку, как исправят баг 94309. // IDataService dataService = DataServices[0]; // TODO Вернуть данную строчку, как исправят баг 94309. foreach (IDataService dataService in DataServices) { // Arrange. var ds = (SQLDataService)dataService; // Контрольные значене. DateTime controlDate = new DateTime(2016, 2, 2); const int firstDate = 1; const int secondDate = 3; var controlValue = new List <int>() { firstDate, secondDate }; // Сначала создаём структуру данных, требуемую для теста. var testMasterObject = new FullTypesMaster1(); // Дата, которая будет подходить под условия ограничения. var firstDateTrue = new FullTypesMainAgregator { PoleDateTime = new DateTime(2015, 2, 1), PoleInt = firstDate, FullTypesMaster1 = testMasterObject }; // Дата, которая не будет подходить под условия ограничения. var firstDateFalse = new FullTypesMainAgregator { PoleDateTime = new DateTime(2016, 2, 2), PoleInt = 2, FullTypesMaster1 = testMasterObject, }; // Дата, которая будет подходить под условия ограничения. var secondDateTrue = new FullTypesMainAgregator { PoleDateTime = new DateTime(2014, 2, 2), PoleInt = secondDate, FullTypesMaster1 = testMasterObject }; // Дата, которая не будет подходить под условия ограничения. var secondDateFalse = new FullTypesMainAgregator { PoleDateTime = new DateTime(2015, 2, 2), PoleInt = 4, FullTypesMaster1 = testMasterObject }; var updateObjectsArray = new DataObject[] { testMasterObject, firstDateTrue, firstDateFalse, secondDateTrue, secondDateFalse }; // Сохранение данных. ds.UpdateObjects(ref updateObjectsArray); // Выбор представления. var view = FullTypesMainAgregator.Views.FullView; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), view); lcs.LimitFunction = _ldef.GetFunction( _ldef.funcL, _ldef.GetFunction( _ldef.funcDateAdd, _ldef.GetFunction(_ldef.paramYearDIFF), 1, new VariableDef(_ldef.DateTimeType, Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.PoleDateTime))), _ldef.GetFunction(_ldef.funcOnlyDate, controlDate)); // Act. // Получение, массива значений поля PoleInt. var poleIntValue = ds.LoadObjects(lcs).Cast <FullTypesMainAgregator>().Select(x => x.PoleInt).ToList(); // Получение массивов Объединения и Пересечения обьектов(controlValue и PoleInt) var unionValue = poleIntValue.Union(controlValue).ToList(); var intersectValue = poleIntValue.Intersect(controlValue).ToList(); // Assert. Assert.Equal(controlValue.Count, unionValue.Count); Assert.Equal(controlValue.Count, intersectValue.Count); } }
public void Test_funcDayOfWeek() { // TODO Удалить данную строчку, как исправят баг 94309. // IDataService dataService = DataServices[0]; // TODO Вернуть данную строчку, как исправят баг 94309. foreach (IDataService dataService in DataServices) { // Arrange. var ds = (SQLDataService)dataService; // Контрольные значене. const int firstMonday = 1; const int secondMonday = 3; var controlValue = new List <int>() { firstMonday, secondMonday }; // Сначала создаём структуру данных, требуемую для теста. var testMasterObject = new FullTypesMaster1(); // Понедельник. var monday1 = new FullTypesMainAgregator { PoleDateTime = new DateTime(2016, 1, 11, 10, 37, 44), PoleInt = firstMonday, FullTypesMaster1 = testMasterObject }; // Пятница. var friday1 = new FullTypesMainAgregator { PoleDateTime = new DateTime(2016, 1, 22, 10, 37, 44), PoleInt = 2, FullTypesMaster1 = testMasterObject, }; // Понедельник. var monday2 = new FullTypesMainAgregator { PoleDateTime = new DateTime(2015, 12, 28, 10, 37, 44), PoleInt = secondMonday, FullTypesMaster1 = testMasterObject }; var updateObjectsArray = new DataObject[] { testMasterObject, monday1, friday1, monday2 }; // Сохранение данных. ds.UpdateObjects(ref updateObjectsArray); // Выбор представления. var view = FullTypesMainAgregator.Views.FullView; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(FullTypesMainAgregator), view); // Функция ограничения. // Применение функции ограничения. lcs.LimitFunction = _ldef.GetFunction( _ldef.funcEQ, _ldef.GetFunction( _ldef.funcDayOfWeek, new VariableDef(_ldef.DateTimeType, Information.ExtractPropertyPath <FullTypesMainAgregator>(x => x.PoleDateTime))), 1); // Act. // Получение, массива значений поля PoleInt. var poleIntValue = ds.LoadObjects(lcs).Cast <FullTypesMainAgregator>().Select(x => x.PoleInt).ToList(); // Получение массивов Объединения и Пересечения обьектов(controlValue и PoleInt) var unionValue = poleIntValue.Union(controlValue).ToList(); var intersectValue = poleIntValue.Intersect(controlValue).ToList(); // Assert. Assert.Equal(controlValue.Count, unionValue.Count); Assert.Equal(controlValue.Count, intersectValue.Count); } }