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);
        }
Пример #4
0
        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);
            }
        }