public void TestSomeStringValueIntToStringPoleString()
        {
            // Arrange.
            int intValue   = 1;
            var someString = intValue.ToString();

            foreach (IDataService dataService in DataServices)
            {
                if (dataService is OracleDataService && typeof(SQLDataService).Assembly.ImageRuntimeVersion.StartsWith("v2"))
                {
                    ///TODO: Исправить конвертацию для OracleDataService decimal в char, если используется System.Data.OracleClient (в Net3.5).
                    ///Для версии Net4.0 и выше используется Oracle.ManagedDataAccess.Client, для которого исправление не требуется.
                    continue;
                }
                var ds = (SQLDataService)dataService;
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleString = someString
                };
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);
                var view  = FullTypesMaster1.Views.FullMasterView;
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleString == someString || x.PoleInt.ToString() == someString);

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
        public void TestSomeStringValueString()
        {
            // Arrange.
            var someString = "Тестовая строка";

            foreach (IDataService dataService in DataServices)
            {
                var ds = (SQLDataService)dataService;
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleString = someString
                };
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);
                var view = FullTypesMaster1.Views.FullMasterView;

                // Происходит падение теста так как генерируется запрос вида:
                // WHERE ( ( "PoleString" = N'Тестовая строка') OR ( "PoleInt" = N'Тестовая строка')).
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleString == someString || x.PoleInt.ToString() == someString);

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
        public void TestSomeStringValueNullableGuidNotNull()
        {
            // Arrange.
            Guid?eqGuid     = new Guid("{72FCA622-A01E-494C-BE1C-0821178594FB}");
            var  someString = eqGuid.ToString();

            foreach (IDataService dataService in DataServices)
            {
                var ds = (SQLDataService)dataService;
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleString = someString
                };
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);
                var view = FullTypesMaster1.Views.FullMasterView;

                // Происходит падение теста так как генерируется запрос вида:
                // WHERE ( ( "PoleString" = N'72fca622-a01e-494c-be1c-0821178594fb')
                //      OR ( "PoleInt" = N'72fca622-a01e-494c-be1c-0821178594fb')).
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleString == someString || x.PoleInt.ToString() == someString);

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
        public void TestSomeStringValueGuid()
        {
            // Arrange.
            var someString = Guid.NewGuid().ToString();

            foreach (IDataService dataService in DataServices)
            {
                var ds = (SQLDataService)dataService;
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleString = someString
                };
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);
                var view = FullTypesMaster1.Views.FullMasterView;

                // Происходит падение теста так как генерируется запрос вида:
                // WHERE ( ( "StringField " = N'7e30b4d0-5f62-494e-aa8b-4c8ffce49f78')
                //      OR ( "IntField" = N'7e30b4d0-5f62-494e-aa8b-4c8ffce49f78')).
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleString == someString || x.PoleInt.ToString() == someString);

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
        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();
            }
        }
예제 #6
0
        public void TestQueryNullableValue()
        {
            foreach (IDataService dataService in DataServices)
            {
                if (dataService is OracleDataService && typeof(SQLDataService).Assembly.ImageRuntimeVersion.StartsWith("v2"))
                {
                    ///TODO: Исправить конвертацию для OracleDataService decimal в char, если используется System.Data.OracleClient (в Net3.5).
                    ///Для версии Net4.0 и выше используется Oracle.ManagedDataAccess.Client, для которого исправление не требуется.
                    continue;
                }
                var ds = (SQLDataService)dataService;

                NullableDateTime date = new NullableDateTime();
                date.Value = DateTime.Now;
                NullableDecimal dec = new NullableDecimal();
                dec.Value = new decimal(77.111);
                NullableDecimal decGreater = new NullableDecimal();
                decGreater.Value = dec.Value + new decimal(0.001);
                NullableInt i = new NullableInt();
                i.Value = 77;
                FullTypesMaster1 fullTypes = new FullTypesMaster1()
                {
                    PoleNullableDateTime = date, PoleNullableDecimal = dec, PoleNullableInt = i
                };

                // Сохранение данных.
                var updateObjectsArray = new ICSSoft.STORMNET.DataObject[] { fullTypes };
                ds.UpdateObjects(ref updateObjectsArray);

                // Выбор представления.
                var view = FullTypesMaster1.Views.FullMasterView;
                List <FullTypesMaster1> list;

                // Проверка поиска NullableDateTime.
                list = ds.Query <FullTypesMaster1>(view).Where(d => d.PoleNullableDateTime.Value <= date.Value).ToList();
                Assert.Equal(1, list.Count);

                // Проверка поиска NullableDecimal.
                list = ds.Query <FullTypesMaster1>(view).Where(d => d.PoleNullableDecimal.Value < decGreater.Value).ToList();
                Assert.Equal(1, list.Count);

                // Проверка поиска NullableInt.
                list = ds.Query <FullTypesMaster1>(view).Where(d => d.PoleNullableInt.Value == i.Value).ToList();
                Assert.Equal(1, list.Count);
            }
        }
예제 #7
0
        public void TestValueNullableGuidNotNull()
        {
            // Arrange.
            foreach (IDataService dataService in DataServices)
            {
                //TODO: Fix OracleDataService error.
                if (dataService is OracleDataService)
                {
                    continue;
                }

                var ds = (SQLDataService)dataService;

                // Контрольное значение.
                Guid?testValue = Guid.NewGuid();

                //  Создаём тестовый объект.
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleNullGuid = testValue
                };

                // Сохранение данных.
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);

                // Выбор представления.
                var view = FullTypesMaster1.Views.FullMasterView;

                // Применение функции ограничения.
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleNullGuid == testValue).ToList();

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
예제 #8
0
        public void TestValueGuid()
        {
            // Arrange.
            foreach (IDataService dataService in DataServices)
            {
                if (dataService is OracleDataService && typeof(SQLDataService).Assembly.ImageRuntimeVersion.StartsWith("v2"))
                {
                    ///TODO: Исправить конвертацию для OracleDataService decimal в char, если используется System.Data.OracleClient (в Net3.5).
                    ///Для версии Net4.0 и выше используется Oracle.ManagedDataAccess.Client, для которого исправление не требуется.
                    continue;
                }
                var ds = (SQLDataService)dataService;

                // Контрольное значение.
                var testValue = Guid.NewGuid();

                //  Создаём тестовый объект.
                var fullTypesMaster = new FullTypesMaster1()
                {
                    PoleGuid = testValue
                };

                // Сохранение данных.
                var updateObjectsArray = new DataObject[] { fullTypesMaster };
                ds.UpdateObjects(ref updateObjectsArray);

                // Выбор представления.
                var view = FullTypesMaster1.Views.FullMasterView;

                // Применение функции ограничения.
                var query = ((SQLDataService)dataService)
                            .Query <FullTypesMaster1>(view)
                            .Where(x => x.PoleGuid == testValue);

                // Act.
                FullTypesMaster1 result = query.FirstOrDefault();

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(fullTypesMaster.__PrimaryKey, result.__PrimaryKey);
            }
        }
        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);
            }
        }