Beispiel #1
0
        public void TestFilterNotStored()
        {
            ActODataService(args =>
            {
                DataObject класс = new КлассСМножествомТипов()
                {
                    PropertyInt = 15, PropertyDateTime = DateTime.Now
                };
                args.DataService.UpdateObject(ref класс);
                string requestUrl;
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=NotStoredProperty eq 15";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
Beispiel #2
0
        public void TestFilterGis()
        {
            ActODataService(args =>
            {
                ExternalLangDef.LanguageDef.DataService = args.DataService;

                DateTime date = new DateTimeOffset(DateTime.Now).UtcDateTime;
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyEnum = Цифра.Семь, PropertyDateTime = date, PropertyGeography = "LINESTRING(0 0,1 1,1 2)".CreateGeography(), PropertyInt = 5
                };
                var objs = new DataObject[] { класс };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                requestUrl = "http://localhost/odata/КлассСМножествомТиповs?$filter=PropertyInt eq 5 and geo.intersects(geography1=PropertyGeography, geography2=geography'SRID=4326;LINESTRING(0 0,1 1,1 2)')";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
Beispiel #3
0
        public void TestFilterNullableDateFunctions()
        {
            ActODataService(args =>
            {
                DateTime?date = new DateTime?(DateTime.UtcNow);
                ExternalLangDef.LanguageDef.DataService = args.DataService;
                КлассСМножествомТипов класс             = new КлассСМножествомТипов()
                {
                    PropertySystemNullableDateTime = date, PropertyDateTime = date.Value
                };
                var objs = new DataObject[] { класс };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                // Проверка использования фильтрации для типа System.DateTime?.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=day(PropertySystemNullableDateTime) eq {date.Value.Day}";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
Beispiel #4
0
        public void TestBeforeGet()
        {
            ActODataService(args =>
            {
                args.Token.Events.CallbackBeforeGet = BeforeGet;

                DateTime date               = new DateTimeOffset(DateTime.Now).UtcDateTime;
                string prevDate             = $"{date.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss")}%2B05:00";
                string nextDate             = $"{date.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ss")}%2B05:00";
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyEnum = Цифра.Семь, PropertyDateTime = date
                };
                Медведь медв = new Медведь {
                    Вес = 48, Пол = tПол.Мужской
                };
                Медведь медв2 = new Медведь {
                    Вес = 148, Пол = tПол.Мужской
                };
                Лес лес1 = new Лес {
                    Название = "Бор"
                };
                Лес лес2 = new Лес {
                    Название = "Березовая роща"
                };
                медв.ЛесОбитания = лес1;
                var берлога1     = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                var берлога2 = new Берлога {
                    Наименование = "Для плохого настроения", ЛесРасположения = лес2
                };
                var берлога3 = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                медв.Берлога.Add(берлога1);
                медв.Берлога.Add(берлога2);
                медв2.Берлога.Add(берлога3);
                var objs = new DataObject[] { класс, медв, медв2, берлога2, берлога1, берлога3, лес1, лес2 };
                args.DataService.UpdateObjects(ref objs);
                this.lcs       = null;
                var requestUrl = "http://localhost/odata/Медведьs";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                    Assert.NotNull(this.lcs);
                }
            });
        }
Beispiel #5
0
        /// <summary>
        /// Осуществляет проверку того, что <see cref="FileDescription.FileUrl"/> и <see cref="FileDescription.PreviewUrl"/>
        /// корректно формируются, если задан избыточный набор свойств
        /// (все свойства описания: и ключ загрузки с именем файла, и описание объекта данных, с которым связан файл).
        /// При этом соблюдается приоритет в пользу ключа загрузки и имени файла.
        /// </summary>
        //[Test]
        public void TestUrlsByAllProperties()
        {
            string fileBaseUrl = "http://localhost/api/File";

            // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла).
            string fileUploadKey = Guid.NewGuid().ToString("D");
            string fileName      = "readme.txt";

            // Свойства достаточные для описания файла, который привязан к объекту данных
            // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных).
            КлассСМножествомТипов entity = new КлассСМножествомТипов();
            string entityTypeName        = entity.GetType().AssemblyQualifiedName;
            string entityPropertyName    = nameof(entity.PropertyStormnetFile);
            string entityPrimaryKey      = entity.__PrimaryKey.ToString();

            // Описание файла с избыточным набором свойств.
            FileDescription fileDescription = new FileDescription(fileBaseUrl)
            {
                FileUploadKey      = fileUploadKey,
                FileName           = fileName,
                EntityTypeName     = entityTypeName,
                EntityPropertyName = entityPropertyName,
                EntityPrimaryKey   = entityPrimaryKey
            };

            Uri receivedFileUri    = new Uri(fileDescription.FileUrl);
            Uri receivedPreviewUri = new Uri(fileDescription.PreviewUrl);

            string receivedFileBaseUrl    = receivedFileUri.GetLeftPart(UriPartial.Path);
            string receivedPreviewBaseUrl = receivedPreviewUri.GetLeftPart(UriPartial.Path);

            NameValueCollection receivedFileQueryParameters    = HttpUtility.ParseQueryString(receivedFileUri.Query);
            NameValueCollection receivedPreviewQueryParameters = HttpUtility.ParseQueryString(receivedPreviewUri.Query);

            /*
             * Assert.AreEqual(fileBaseUrl, receivedFileBaseUrl);
             * Assert.AreEqual(fileBaseUrl, receivedPreviewBaseUrl);
             *
             * Assert.AreEqual(2, receivedFileQueryParameters.Count);
             * Assert.AreEqual(fileUploadKey, receivedFileQueryParameters["fileUploadKey"]);
             * Assert.AreEqual(fileName, receivedFileQueryParameters["fileName"]);
             *
             * Assert.AreEqual(3, receivedPreviewQueryParameters.Count);
             * Assert.AreEqual(fileUploadKey, receivedPreviewQueryParameters["fileUploadKey"]);
             * Assert.AreEqual(fileName, receivedPreviewQueryParameters["fileName"]);
             * Assert.AreEqual(true, bool.Parse(receivedPreviewQueryParameters["getPreview"]));
             */
        }
Beispiel #6
0
        public void ModifyTest()
        {
            ActODataService(args =>
            {
                // Создаем объект данных.
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyEnum     = Цифра.Семь, PropertyGeography = "POINT(3 3)".CreateGeography(), PropertyInt = 5,
                    PropertyDateTime = DateTime.Now
                };

                // Преобразуем объект данных в JSON-строку.
                string[] классСМножествомТиповPropertiesNames =
                {
                    Information.ExtractPropertyPath <КлассСМножествомТипов>(x => x.__PrimaryKey),
                    Information.ExtractPropertyPath <КлассСМножествомТипов>(x => x.PropertyEnum),
                    Information.ExtractPropertyPath <КлассСМножествомТипов>(x => x.PropertyGeography),
                    Information.ExtractPropertyPath <КлассСМножествомТипов>(x => x.PropertyInt),
                    Information.ExtractPropertyPath <КлассСМножествомТипов>(x => x.PropertyDateTime)
                };
                var dynamicView        = new View(new ViewAttribute("dynamicView", классСМножествомТиповPropertiesNames), typeof(КлассСМножествомТипов));
                string requestJsonData = класс.ToJson(dynamicView, args.Token.Model);

                // Формируем URL запроса к OData-сервису.
                string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(КлассСМножествомТипов)).Name);

                // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON.
                using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, requestJsonData).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.Created, response.StatusCode);
                }

                requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(КлассСМножествомТипов)).Name, ((KeyGuid)класс.__PrimaryKey).Guid.ToString());
                using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
                }
            });
        }
Beispiel #7
0
        /// <summary>
        /// Осуществляет проверку того, что <see cref="FileDescription.FileUrl"/> и <see cref="FileDescription.PreviewUrl"/> не формируются
        /// если не задано свойтсво <see cref="FileDescription.FileBaseUrl"/>.
        /// </summary>
        //[Test]
        public void TestUrlsByEmptyFileBaseUrl()
        {
            // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла).
            string fileUploadKey = Guid.NewGuid().ToString("D");
            string fileName      = "readme.txt";

            // Свойства достаточные для описания файла, который привязан к объекту данных
            // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных).
            КлассСМножествомТипов entity = new КлассСМножествомТипов();
            string entityTypeName        = entity.GetType().AssemblyQualifiedName;
            string entityPropertyName    = nameof(entity.PropertyStormnetFile);
            string entityPrimaryKey      = entity.__PrimaryKey.ToString();

            // Варианты описаний файлов с достаточными наборами свойств. но с пустыми базовыми URL-адресами.
            List <FileDescription> fileDescriptions = new List <FileDescription>
            {
                new FileDescription(null)
                {
                    FileUploadKey = fileUploadKey, FileName = fileName
                },
                new FileDescription(null)
                {
                    EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey
                },
                new FileDescription(string.Empty)
                {
                    FileUploadKey = fileUploadKey, FileName = fileName
                },
                new FileDescription(string.Empty)
                {
                    EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey
                },
            };

            foreach (var fileDescription in fileDescriptions)
            {
                //Assert.AreEqual(null, fileDescription.FileUrl);
                //Assert.AreEqual(null, fileDescription.PreviewUrl);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Осуществляет проверку того, что для файлов, связанных с объектами данных, корректно скачиваются их preview-изображения.
        /// </summary>
        //[Test]
        public void TestPreviewDownloadFromDataObjectSuccess()
        {
            string fileBaseUrl = "http://localhost/api/File";

            using (DataServiceWrapper dataServiceWrapper = new DataServiceWrapper())
            {
                foreach (IDataService dataService in dataServiceWrapper.AllowedDataServices)
                {
                    foreach (string srcFilePath in new List <string> {
                        _srcImageFilePath, _srcTextFilePath
                    })
                    {
                        FileInfo fileInfo = new FileInfo(srcFilePath);

                        string fileUploadKey = Guid.NewGuid().ToString("D");
                        string fileName      = fileInfo.Name;
                        string fileMimeType  = MimeMapping.GetMimeMapping(fileName);
                        long   fileSize      = fileInfo.Length;

                        // Копируем тестовый файл в каталог, предназначенный для загруженных на сервер файлов.
                        // Тем самым имитируем ситуацию как будто файл был ранее загружен на сервер через файловый контроллер.
                        string uploadedFileDirectoryPath = CreateUploadsSubDirectory(fileUploadKey);
                        string uploadedFilePath          = string.Concat(uploadedFileDirectoryPath, "\\", fileName);
                        System.IO.File.Copy(srcFilePath, uploadedFilePath, true);

                        // Описание загруженного файла, содержащее URL для скачивания файла с сервера.
                        FileDescription uploadedFileDescription = new FileDescription(fileBaseUrl, uploadedFilePath);

                        // Загруженный файл в виде Base64String.
                        string uploadedFileBase64String = FileController.GetBase64StringFileData(uploadedFilePath);

                        // Свойство объекта данных типа File, связывающее загруженный файл с объектом данных.
                        string entityFilePropertyName = nameof(КлассСМножествомТипов.PropertyStormnetFile);
                        File   entityFileProperty     = new File {
                            Name = fileName, Size = fileSize
                        };
                        entityFileProperty.FromNormalToZip(uploadedFilePath);

                        // Свойство объекта данных типа WebFile, связывающее загруженный файл с объектом данных.
                        string  entityWebFilePropertyName = nameof(КлассСМножествомТипов.PropertyStormnetWebFile);
                        WebFile entityWebFileProperty     = new WebFile {
                            Name = fileName, Size = (int)fileSize, Url = uploadedFileDescription.FileUrl
                        };

                        // Объект данных, с которым связан загруженный файл.
                        DataObject entity = new КлассСМножествомТипов
                        {
                            // Файловые свойства объекта данных.
                            PropertyStormnetFile    = entityFileProperty,
                            PropertyStormnetWebFile = entityWebFileProperty,

                            // DateTime-свойство объекта данных.
                            // На работу с файловыми свойствами никак не влияет,
                            // но если оставить его незаполненным, сервис данных будет ругаться при сохранении.
                            PropertyDateTime = new DateTimeOffset(DateTime.Now).UtcDateTime
                        };

                        // Свойства необходимые для описания файла, связанного с объектом данных.
                        string        entityTypeName        = entity.GetType().AssemblyQualifiedName;
                        string        entityPrimaryKey      = entity.__PrimaryKey.ToString();
                        List <string> entityPropertiesnames = new List <string> {
                            entityFilePropertyName, entityWebFilePropertyName
                        };

                        // Сохраняем объект данных в БД (используя подменный сервис данных).
                        dataService.UpdateObject(entity);

                        // Перебираем разнотипные файловые свойства объекта данных.
                        foreach (string entityPropertyName in entityPropertiesnames)
                        {
                            // Описание файла, связанного с объектом данных, которое содержит ссылку на скачивание файла.
                            FileDescription entityRelatedFileDescription = new FileDescription(fileBaseUrl)
                            {
                                FileName           = fileName,
                                FileSize           = fileSize,
                                FileMimeType       = fileMimeType,
                                EntityTypeName     = entityTypeName,
                                EntityPrimaryKey   = entityPrimaryKey,
                                EntityPropertyName = entityPropertyName
                            };

                            // Конфигурируем HttpServer, файловый контроллер, и обращаемся к серверу для скачивания файла.
                            using (var config = new HttpConfiguration())
                            {
                                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
                                config.MapODataServiceFileRoute("File", "api/File", _uploadsDirectoryPath, dataService);

                                using (var server = new HttpServer(config))
                                    using (var client = new HttpClient(server, false))
                                        using (HttpResponseMessage response = client.GetAsync(entityRelatedFileDescription.PreviewUrl).Result)
                                        {
                                            //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

                                            // Получаем Base64String, содержащую preview скачанного файла.
                                            string downloadedFileBase64String = response.Content.ReadAsStringAsync().Result;

                                            if (fileMimeType.StartsWith("image"))
                                            {
                                                // Для файлов являющихся изображениями, должна возвращаться Base64String с указанием MIME-типа.
                                                //Assert.AreEqual(uploadedFileBase64String, downloadedFileBase64String);
                                                //Assert.AreEqual(true, downloadedFileBase64String.ToLower().StartsWith($"data:{fileMimeType}"));
                                            }
                                            else
                                            {
                                                // Для файлов не являющихся изображениями, должна возвращаться пустая строка.
                                                //Assert.AreEqual(true, downloadedFileBase64String == string.Empty);
                                                //Assert.AreEqual(0.ToString(), response.Content.Headers.GetValues("Content-Length").FirstOrDefault());
                                            }
                                        }
                            }
                        }
                    }
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// Осуществляет проверку того, что файлы, связанные с объектами данных, корректно скачиваются с сервера.
        /// </summary>
        //[Test]
        public void TestFileDownloadFromDataObjectSuccess()
        {
            string fileBaseUrl = "http://localhost/api/File";

            using (DataServiceWrapper dataServiceWrapper = new DataServiceWrapper())
            {
                foreach (IDataService dataService in dataServiceWrapper.AllowedDataServices)
                {
                    foreach (string srcFilePath in new List <string> {
                        _srcImageFilePath, _srcTextFilePath
                    })
                    {
                        FileInfo fileInfo = new FileInfo(srcFilePath);

                        string fileUploadKey          = Guid.NewGuid().ToString("D");
                        string fileName               = fileInfo.Name;
                        string fileMimeType           = MimeMapping.GetMimeMapping(fileName);
                        long   fileSize               = fileInfo.Length;
                        string fileContentDisposition = string.Format("attachment; filename=\"{0}\"; filename*=UTF-8''{1}; size={2}", fileName, Uri.EscapeDataString(fileName), fileSize);

                        // Копируем тестовый файл в каталог, предназначенный для загруженных на сервер файлов.
                        // Тем самым имитируем ситуацию как будто файл был ранее загружен на сервер через файловый контроллер.
                        string uploadedFileDirectoryPath = CreateUploadsSubDirectory(fileUploadKey);
                        string uploadedFilePath          = string.Concat(uploadedFileDirectoryPath, "\\", fileName);
                        System.IO.File.Copy(srcFilePath, uploadedFilePath, true);

                        // Описание загруженного файла, содержащее URL для скачивания файла с сервера.
                        FileDescription uploadedFileDescription = new FileDescription(fileBaseUrl, uploadedFilePath);

                        // Свойство объекта данных типа File, связывающее загруженный файл с объектом данных.
                        string entityFilePropertyName = nameof(КлассСМножествомТипов.PropertyStormnetFile);
                        File   entityFileProperty     = new File {
                            Name = fileName, Size = fileSize
                        };
                        entityFileProperty.FromNormalToZip(uploadedFilePath);

                        // Свойство объекта данных типа WebFile, связывающее загруженный файл с объектом данных.
                        string  entityWebFilePropertyName = nameof(КлассСМножествомТипов.PropertyStormnetWebFile);
                        WebFile entityWebFileProperty     = new WebFile {
                            Name = fileName, Size = (int)fileSize, Url = uploadedFileDescription.FileUrl
                        };

                        // Объект данных, с которым связан загруженный файл.
                        DataObject entity = new КлассСМножествомТипов
                        {
                            // Файловые свойства объекта данных.
                            PropertyStormnetFile    = entityFileProperty,
                            PropertyStormnetWebFile = entityWebFileProperty,

                            // DateTime-свойство объекта данных.
                            // На работу с файловыми свойствами никак не влияет,
                            // но если оставить его незаполненным, сервис данных будет ругаться при сохранении.
                            PropertyDateTime = new DateTimeOffset(DateTime.Now).UtcDateTime
                        };

                        // Свойства необходимые для описания файла, связанного с объектом данных.
                        string        entityTypeName        = entity.GetType().AssemblyQualifiedName;
                        string        entityPrimaryKey      = entity.__PrimaryKey.ToString();
                        List <string> entityPropertiesnames = new List <string> {
                            entityFilePropertyName, entityWebFilePropertyName
                        };

                        // Сохраняем объект данных в БД (используя подменный сервис данных).
                        dataService.UpdateObject(entity);

                        // Перебираем разнотипные файловые свойства объекта данных.
                        foreach (string entityPropertyName in entityPropertiesnames)
                        {
                            // Описание файла, связанного с объектом данных, которое содержит ссылку на скачивание файла.
                            var entityRelatedFileDescription = new FileDescription(fileBaseUrl)
                            {
                                FileName           = fileName,
                                FileSize           = fileSize,
                                FileMimeType       = fileMimeType,
                                EntityTypeName     = entityTypeName,
                                EntityPrimaryKey   = entityPrimaryKey,
                                EntityPropertyName = entityPropertyName
                            };

                            // Конфигурируем HttpServer, файловый контроллер, и обращаемся к серверу для скачивания файла.
                            using (var config = new HttpConfiguration())
                            {
                                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
                                config.MapODataServiceFileRoute("File", "api/File", _uploadsDirectoryPath, dataService);

                                using (var server = new HttpServer(config))
                                    using (var client = new HttpClient(server, false))
                                        using (HttpResponseMessage response = client.GetAsync(entityRelatedFileDescription.FileUrl).Result)
                                        {
                                            //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

                                            // Проверяем, что в ответе правильно указаны: длина, тип файла, и content-disposition.
                                            //Assert.AreEqual(fileSize.ToString(), response.Content.Headers.GetValues("Content-Length").FirstOrDefault());
                                            //Assert.AreEqual(fileMimeType, response.Content.Headers.GetValues("Content-Type").FirstOrDefault());
                                            //Assert.AreEqual(fileContentDisposition, response.Content.Headers.GetValues("Content-Disposition").FirstOrDefault());

                                            // Получаем поток байтов, скачиваемого файла.
                                            using (Stream stream = response.Content.ReadAsStreamAsync().Result)
                                            {
                                                // Вычитываем поток в буфер.
                                                byte[] bytes = new byte[stream.Length];
                                                stream.Read(bytes, 0, (int)stream.Length);

                                                // Сохраняем поток в виде файла (в каталог, предназначенный для скачанных с сервера файлов).
                                                // Тем самым имитируем ситуацию как будто файл был скачан.
                                                string downloadedFileDirectoryPath = CreateDownloadsSubDirectory(fileUploadKey);
                                                string downloadedFilePath          = $"{downloadedFileDirectoryPath}\\{fileName}";
                                                using (var fileStream = new FileStream(downloadedFilePath, FileMode.Create, FileAccess.Write))
                                                {
                                                    fileStream.Write(bytes, 0, (int)stream.Length);
                                                    fileStream.Close();

                                                    // Проверяем, что загруженный на сервер, и скачанный с сервера файлы - одинаковы.
                                                    //Assert.AreEqual(true, FilesComparer.FilesAreEqual(uploadedFilePath, downloadedFilePath));
                                                }
                                            }
                                        }
                            }
                        }
                    }
                }
            }
        }
        public void TestFilterAnyAll()
        {
            ActODataService(args =>
            {
                ExternalLangDef.LanguageDef.DataService = args.DataService;

                DateTime date = new DateTimeOffset(DateTime.Now).UtcDateTime;
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyEnum = Цифра.Семь, PropertyDateTime = date
                };
                Медведь медв = new Медведь {
                    Вес = 48, Пол = tПол.Мужской
                };
                Медведь медв2 = new Медведь {
                    Вес = 148, Пол = tПол.Мужской
                };
                Лес лес1 = new Лес {
                    Название = "Бор"
                };
                Лес лес2 = new Лес {
                    Название = "Березовая роща"
                };
                медв.ЛесОбитания = лес1;
                var берлога1     = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                var берлога2 = new Берлога {
                    Наименование = "Для плохого настроения", ЛесРасположения = лес2
                };
                var берлога3 = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                медв.Берлога.Add(берлога1);
                медв.Берлога.Add(берлога2);
                медв2.Берлога.Add(берлога3);
                Блоха блоха = new Блоха()
                {
                    Кличка = "1", МедведьОбитания = медв
                };
                var objs = new DataObject[] { класс, медв, медв2, берлога2, берлога1, берлога3, лес1, лес2, блоха };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                // Проверка использования в фильтрации функции any.
                requestUrl = "http://localhost/odata/Медведьs?$expand=Берлога&$filter=Берлога/any(f:f/Наименование eq 'Для хорошего настроения')";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(2, ((ArrayList)receivedDict["value"]).Count);
                }

                // Проверка использования в фильтрации функции all.
                requestUrl = $"http://localhost/odata/Медведьs?$filter=Берлога/all(f:f/Наименование eq 'Для хорошего настроения')";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
        public void TestFilterIsOf()
        {
            ActODataService(args =>
            {
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyString = "parent", PropertyDateTime = new DateTimeOffset(DateTime.Now).UtcDateTime
                };
                ДочернийКласс класс2 = new ДочернийКласс()
                {
                    ChildProperty = "child01", PropertyString = "child1", PropertyDateTime = new DateTimeOffset(DateTime.Now).UtcDateTime
                };
                ДочернийКласс класс3 = new ДочернийКласс()
                {
                    ChildProperty = "child02", PropertyString = "child2", PropertyDateTime = new DateTimeOffset(DateTime.Now).UtcDateTime
                };

                // КлассNotStored классNotStored = new КлассNotStored() { StrAttr = "notStored" };
                КлассStoredDerived классStoredDerived = new КлассStoredDerived()
                {
                    StrAttr = "Stored", StrAttr2 = "str2"
                };
                var objs = new DataObject[] { класс, класс2, класс3, классStoredDerived };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                // Использование $filter с функцией isof. Должны вернуться сущности всех типов, родительские и дочерние.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=isof('NewPlatform.Flexberry.ORM.ODataService.Tests.КлассСМножествомТипов') or isof('NewPlatform.Flexberry.ORM.ODataService.Tests.ДочернийКласс')";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(3, ((ArrayList)receivedDict["value"]).Count);
                }

                // Использование $filter с функцией isof. Должны вернуться сущности только дочернего типа.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=isof('NewPlatform.Flexberry.ORM.ODataService.Tests.ДочернийКласс')";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(2, ((ArrayList)receivedDict["value"]).Count);
                }

                // Без использования $filter. Должны вернуться также сущности, имеющие дочерний тип.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(3, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
Beispiel #12
0
        /// <summary>
        /// Осуществляет проверку того, что <see cref="FileDescription"/> с заданными свойствами, описывающими объект данных,
        /// корректно десериализуется из JSON-строки.
        /// </summary>
        //[Test]
        public void TestDeserializationFromJsonByEntityProperties()
        {
            string fileBaseUrl = "http://localhost/api/File";

            // Имя, размер и тип файла.
            string fileName     = "readme.txt";
            long   fileSize     = 1024;
            string fileMimeType = MimeMapping.GetMimeMapping(fileName);

            // Свойства достаточные для описания файла, который привязан к объекту данных
            // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных).
            КлассСМножествомТипов entity = new КлассСМножествомТипов();
            string entityTypeName        = entity.GetType().AssemblyQualifiedName;
            string entityPropertyName    = nameof(entity.PropertyStormnetFile);
            string entityPrimaryKey      = entity.__PrimaryKey.ToString();

            // Описание файла с избыточным набором свойств.
            FileDescription fileDescription = new FileDescription(fileBaseUrl)
            {
                FileName           = fileName,
                FileSize           = fileSize,
                FileMimeType       = fileMimeType,
                EntityTypeName     = entityTypeName,
                EntityPropertyName = entityPropertyName,
                EntityPrimaryKey   = entityPrimaryKey
            };

            string serializedFileDescription = fileDescription.ToJson();

            // Получаем десериализованные описания файла, полученные различными способами.
            List <FileDescription> deserializedFileDescriptions = new List <FileDescription>
            {
                FileDescription.FromJson(serializedFileDescription)
            };

            using (HttpConfiguration config = new HttpConfiguration())
            {
                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
                config.Routes.MapHttpRoute("File", "api/File", new { controller = "FileDescriptionTest" });

                using (HttpServer server = new HttpServer(config))
                {
                    using (HttpClient client = new HttpClient(server, false))
                    {
                        // Получаем десериализованное описание файла из тела POST-запроса.
                        using (HttpResponseMessage response = client.PostAsJsonStringAsync("http://localhost/api/File", serializedFileDescription).Result)
                        {
                            // Убедимся, что запрос завершился успешно.
                            //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

                            deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPost);
                        }

                        // Получаем десериализованное описание файла из URL PUT-запроса.
                        string putUrl = string.Format(
                            "http://localhost/api/File?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
                            nameof(FileDescription.FileName),
                            fileDescription.FileName,
                            nameof(FileDescription.FileSize),
                            fileDescription.FileSize,
                            nameof(FileDescription.FileMimeType),
                            fileDescription.FileMimeType,
                            nameof(FileDescription.EntityTypeName),
                            fileDescription.EntityTypeName,
                            nameof(FileDescription.EntityPropertyName),
                            fileDescription.EntityPropertyName,
                            nameof(FileDescription.EntityPrimaryKey),
                            fileDescription.EntityPrimaryKey);
                        using (HttpResponseMessage response = client.SendAsync(new HttpRequestMessage(HttpMethod.Put, putUrl)).Result)
                        {
                            // Убедимся, что запрос завершился успешно.
                            //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

                            deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPut);
                        }
                    }
                }
            }

            // Проверяем, что результаты десериализации, полученные разными способами - одинаковы и корректны.
            foreach (FileDescription deserializedFileDescription in deserializedFileDescriptions)
            {
                /*
                 * Assert.AreEqual(fileName, deserializedFileDescription.FileName);
                 * Assert.AreEqual(fileSize, deserializedFileDescription.FileSize);
                 * Assert.AreEqual(fileMimeType, deserializedFileDescription.FileMimeType);
                 * Assert.AreEqual(entityTypeName, deserializedFileDescription.EntityTypeName);
                 * Assert.AreEqual(entityPropertyName, deserializedFileDescription.EntityPropertyName);
                 * Assert.AreEqual(entityPrimaryKey, deserializedFileDescription.EntityPrimaryKey);
                 * Assert.AreEqual(fileDescription.FileUrl, deserializedFileDescription.FileUrl);
                 * Assert.AreEqual(fileDescription.PreviewUrl, deserializedFileDescription.PreviewUrl);
                 * Assert.AreEqual(null, deserializedFileDescription.FileUploadKey);
                 */
            }
        }
Beispiel #13
0
        /// <summary>
        /// Осуществляет проверку того, что <see cref="FileDescription"/>
        /// корректно сериализуется в JSON-строку.
        /// </summary>
        //[Test]
        public void TestSerializationToJson()
        {
            string fileBaseUrl = "http://localhost/api/File";

            // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла).
            string fileUploadKey = Guid.NewGuid().ToString("D");
            string fileName      = "readme.txt";

            // Размер и тип файла.
            long   fileSize     = 1024;
            string fileMimeType = MimeMapping.GetMimeMapping(fileName);

            // Свойства достаточные для описания файла, который привязан к объекту данных
            // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных).
            КлассСМножествомТипов entity = new КлассСМножествомТипов();
            string entityTypeName        = entity.GetType().AssemblyQualifiedName;
            string entityPropertyName    = nameof(entity.PropertyStormnetFile);
            string entityPrimaryKey      = entity.__PrimaryKey.ToString();

            // Описание файла с избыточным набором свойств.
            FileDescription fileDescription = new FileDescription(fileBaseUrl)
            {
                FileUploadKey      = fileUploadKey,
                FileName           = fileName,
                FileSize           = fileSize,
                FileMimeType       = fileMimeType,
                EntityTypeName     = entityTypeName,
                EntityPropertyName = entityPropertyName,
                EntityPrimaryKey   = entityPrimaryKey
            };

            FileDescriptionTestController.FileDescriptionGet = fileDescription;

            // Получаем сериализованные описания файлов несколькими способами (вручную, и из ответа, получаемого от сервера).
            List <string> serializedFileDescriptions = new List <string> {
                fileDescription.ToJson()
            };

            using (HttpConfiguration config = new HttpConfiguration())
            {
                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
                config.Routes.MapHttpRoute("File", "api/File", new { controller = "FileDescriptionTest" });

                using (HttpServer server = new HttpServer(config))
                {
                    using (HttpClient client = new HttpClient(server, false))
                    {
                        using (HttpResponseMessage response = client.GetAsync("http://localhost/api/File").Result)
                        {
                            // Убедимся, что запрос завершился успешно.
                            //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

                            serializedFileDescriptions.Add(response.Content.ReadAsStringAsync().Result);
                        }
                    }
                }
            }

            // Проверяем, что результаты сериализации, полученные разными способами - одинаковы и корректны.
            foreach (string serializedFileDescription in serializedFileDescriptions)
            {
                // Преобразуем сериализованное описание файла в словарь.
                Dictionary <string, object> deserializedFileDescription = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(serializedFileDescription);

                /*
                 * Assert.AreEqual(5, deserializedFileDescription.Keys.Count);
                 * Assert.AreEqual(fileName, deserializedFileDescription["fileName"]);
                 * Assert.AreEqual((int)fileSize, (int)deserializedFileDescription["fileSize"]);
                 * Assert.AreEqual(fileMimeType, deserializedFileDescription["fileMimeType"]);
                 * Assert.AreEqual(fileDescription.FileUrl, deserializedFileDescription["fileUrl"]);
                 * Assert.AreEqual(fileDescription.PreviewUrl, deserializedFileDescription["previewUrl"]);
                 */
            }
        }
Beispiel #14
0
        /// <summary>
        /// Осуществляет проверку того, что <see cref="FileDescription.FileUrl"/> и <see cref="FileDescription.PreviewUrl"/> не формируются,
        /// если заданный набор свойств недостаточен для описания файла.
        /// </summary>
        //[Test]
        public void TestUrlsByIncompleteProperties()
        {
            string fileBaseUrl = "http://localhost/api/File";

            // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла).
            string fileUploadKey = Guid.NewGuid().ToString("D");
            string fileName      = "readme.txt";

            // Свойства достаточные для описания файла, который привязан к объекту данных
            // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных).
            КлассСМножествомТипов entity = new КлассСМножествомТипов();
            string entityTypeName        = entity.GetType().AssemblyQualifiedName;
            string entityPropertyName    = nameof(entity.PropertyStormnetFile);
            string entityPrimaryKey      = entity.__PrimaryKey.ToString();

            // Описания файлов с недостаточными наборами свойств.
            List <FileDescription> incompleteFileDescriptions = new List <FileDescription>
            {
                // Свойства не заданы вообще.
                new FileDescription(fileBaseUrl)
                {
                },

                // Заданы либо ключ, либо имя файла, но не оба свойства вместе.
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName
                },

                // Заданы либо имя типа объекта данных, либо имя файлового свойства в объекте данных, либо первичный ключ объекта данных,
                // либо любые парные комбинации этих свойств, но не все свойства вместе.
                new FileDescription(fileBaseUrl)
                {
                    EntityTypeName = entityTypeName
                },
                new FileDescription(fileBaseUrl)
                {
                    EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    EntityPrimaryKey = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    EntityTypeName = entityTypeName, EntityPropertyName = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey
                },

                // Комбинации предыдущих неполностью заданных наборов свойств.
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityTypeName = entityTypeName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityPrimaryKey = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityTypeName = entityTypeName, EntityPropertyName = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    FileUploadKey = fileUploadKey, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey
                },

                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityTypeName = entityTypeName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityPrimaryKey = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityTypeName = entityTypeName, EntityPropertyName = entityPrimaryKey
                },
                new FileDescription(fileBaseUrl)
                {
                    FileName = fileName, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey
                }
            };

            foreach (FileDescription fileDescription in incompleteFileDescriptions)
            {
                //Assert.AreEqual(null, fileDescription.FileUrl);
                //Assert.AreEqual(null, fileDescription.PreviewUrl);
            }
        }
Beispiel #15
0
        public void TestFilterNullable()
        {
            ActODataService(args =>
            {
                NullableDateTime date = new NullableDateTime();
                date.Value            = new DateTimeOffset(DateTime.Now).UtcDateTime;
                NullableInt i         = new NullableInt();
                i.Value                     = 7;
                NullableDecimal d           = new NullableDecimal();
                d.Value                     = new decimal(777.777);
                string prevDecimal          = (d.Value - 1).ToString().Replace(",", ".");
                string nextDecimal          = (d.Value + 1).ToString().Replace(",", ".");
                string prevDate             = $"{date.Value.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss.fff")}%2B05:00";
                string nextDate             = $"{date.Value.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ss.fff")}%2B05:00";
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyStormnetNullableInt = i, PropertyStormnetNullableDecimal = d, PropertyStormnetNullableDateTime = date, PropertyDateTime = date.Value
                };
                var objs = new DataObject[] { класс };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                /*
                 * // Проверка использования фильтрации для типа ICSSoft.STORMNET.UserDataTypes.NullableDateTime.
                 * requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=(PropertyStormnetNullableDateTime gt {prevDate}) and (PropertyStormnetNullableDateTime lt {nextDate})";
                 *
                 * // Обращаемся к OData-сервису и обрабатываем ответ.
                 * using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                 * {
                 *  // Убедимся, что запрос завершился успешно.
                 *  Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                 *
                 *  // Получим строку с ответом.
                 *  string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();
                 *
                 *  // Преобразуем полученный объект в словарь.
                 *  Dictionary<string, object> receivedDict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(receivedStr);
                 *
                 *  Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                 * }
                 *
                 * // Проверка использования фильтрации для типа ICSSoft.STORMNET.UserDataTypes.NullableDecimal.
                 * requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=(PropertyStormnetNullableDecimal gt {prevDecimal}M) and (PropertyStormnetNullableDecimal lt {nextDecimal})";
                 *
                 * // Обращаемся к OData-сервису и обрабатываем ответ.
                 * using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                 * {
                 *  // Убедимся, что запрос завершился успешно.
                 *  Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                 *
                 *  // Получим строку с ответом.
                 *  string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();
                 *
                 *  // Преобразуем полученный объект в словарь.
                 *  Dictionary<string, object> receivedDict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(receivedStr);
                 *
                 *  Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                 * }
                 */
                // Проверка использования фильтрации для типа ICSSoft.STORMNET.UserDataTypes.NullableInt.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=PropertyStormnetNullableInt eq {i.Value.ToString()}";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }
Beispiel #16
0
        public void TestFilter()
        {
            ActODataService(args =>
            {
                DateTime date               = new DateTimeOffset(DateTime.Now).UtcDateTime;
                string prevDate             = $"{date.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss")}%2B05:00";
                string nextDate             = $"{date.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ss")}%2B05:00";
                КлассСМножествомТипов класс = new КлассСМножествомТипов()
                {
                    PropertyEnum = Цифра.Семь, PropertyDateTime = date
                };
                Медведь медв = new Медведь {
                    Вес = 48, Пол = tПол.Мужской
                };
                Медведь медв2 = new Медведь {
                    Вес = 148, Пол = tПол.Мужской
                };
                Лес лес1 = new Лес {
                    Название = "Бор"
                };
                Лес лес2 = new Лес {
                    Название = "Березовая роща"
                };
                медв.ЛесОбитания = лес1;
                var берлога1     = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                var берлога2 = new Берлога {
                    Наименование = "Для плохого настроения", ЛесРасположения = лес2
                };
                var берлога3 = new Берлога {
                    Наименование = "Для хорошего настроения", ЛесРасположения = лес1
                };
                медв.Берлога.Add(берлога1);
                медв.Берлога.Add(берлога2);
                медв2.Берлога.Add(берлога3);
                var objs = new DataObject[] { класс, медв, медв2, берлога2, берлога1, берлога3, лес1, лес2 };
                args.DataService.UpdateObjects(ref objs);
                string requestUrl;

                // Проверка использования в фильтрации перечислений.
                requestUrl = "http://localhost/odata/Медведьs?$filter=Пол eq NewPlatform.Flexberry.ORM.ODataService.Tests.tПол'Мужской'";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(2, ((ArrayList)receivedDict["value"]).Count);
                }

                // Проверка использования в фильтрации DateTime.
                requestUrl = $"http://localhost/odata/КлассСМножествомТиповs?$filter=(PropertyDateTime gt {prevDate}) and (PropertyDateTime lt {nextDate})";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }

                // Проверка использования в фильтрации поля __PrimaryKey.
                string strGuid = ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString("D");
                requestUrl     = $"http://localhost/odata/Медведьs?$filter=__PrimaryKey eq {strGuid}";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    // Получим строку с ответом.
                    string receivedStr = response.Content.ReadAsStringAsync().Result.Beautify();

                    // Преобразуем полученный объект в словарь.
                    Dictionary <string, object> receivedDict = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedStr);

                    Assert.Equal(1, ((ArrayList)receivedDict["value"]).Count);
                }
            });
        }