Ejemplo n.º 1
0
        public void TestFunctionExportTest()
        {
            ActODataService(args =>
            {
                DataServiceProvider.DataService = args.DataService;
                args.Token.Functions.Register(new Func <QueryParameters, string, Страна[]>(FunctionExportExcel));

                // Create objects and put them in the database.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = string.Format("Страна №{0}", i)
                    };
                }

                args.DataService.UpdateObjects(ref countries);
                string requestUrl = string.Format(
                    "http://localhost/odata/{0}?{1}",
                    "FunctionExportExcel(entitySet='Странаs')",
                    "exportExcel=true&colsOrder=Название/Название&detSeparateCols=false&detSeparateRows=false&$filter=contains(Название,'1')");
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    byte[] contentExcel = response.Content.ReadAsByteArrayAsync().Result;
                }
            });
        }
Ejemplo n.º 2
0
        public void ExportTest()
        {
            ActODataService(args =>
            {
                // Create objects and put them in the database.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = string.Format("Страна №{0}", i)
                    };
                }

                args.DataService.UpdateObjects(ref countries);
                // The request URL to the OData service is generated.
                string requestUrl = string.Format(
                    "http://localhost/odata/{0}?{1}",
                    args.Token.Model.GetEdmEntitySet(typeof(Страна)).Name,
                    "exportExcel=true&colsOrder=Название/Название&detSeparateCols=false&detSeparateRows=false&$filter=contains(Название,'1')");
                // A request is made to the OData service and the response is processed.
                using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result)
                {
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    byte[] contentExcel = response.Content.ReadAsByteArrayAsync().Result;
                }
            });
        }
        public void TestFunctionFunctionWithLcs()
        {
            ActODataService(args =>
            {
                RegisterODataUserFunctions(args.Token.Functions, args.DataService);

                // Создаем объекты и кладем их в базу данных.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = $"Страна №{i}"
                    };
                }

                args.DataService.UpdateObjects(ref countries);

                // Формируем URL запроса к OData-сервису.
                string requestUrl = $"http://localhost/odata/FunctionWithLcs2(entitySet='Странаs',query='$filter=Название eq ''Страна №1''')";

                // Обращаемся к 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.True(receivedDict.ContainsKey("value"));
                    Assert.Equal(1, receivedDict["value"]);
                }

                requestUrl = $"http://localhost/odata/FunctionWithLcs1(entitySet='Странаs')?$filter=Название eq 'Страна №1'";

                // Обращаемся к 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.True(receivedDict.ContainsKey("value"));
                    Assert.Equal(1, (receivedDict["value"] as ArrayList).Count);
                }
            });
        }
        public void TestCountFunctionEntitiesCollection()
        {
            ActODataService(args =>
            {
                RegisterODataUserFunctions(args.Token.Functions, args.DataService);

                // Создаем объекты и кладем их в базу данных.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = $"Страна №{i}"
                    };
                }

                args.DataService.UpdateObjects(ref countries);

                int intParam = 3;

                // Формируем URL запроса к OData-сервису.
                string requestUrl = $"http://localhost/odata/FunctionEntitiesCollection(intParam={intParam})?$count=true";

                // Обращаемся к 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.True(receivedDict.ContainsKey("value"));
                    Assert.Equal(((ArrayList)receivedDict["value"]).Count, intParam);

                    // Убедимся, что метаданные о количестве объектов получены.
                    Assert.True(receivedDict.ContainsKey("@odata.count"));

                    // Убедимся, что количество объектов в метаданных совпадает, с ожидаемым количеством.
                    object receivedMetadataCount = receivedDict["@odata.count"];
                    Assert.IsType(typeof(int), receivedMetadataCount);
                    Assert.Equal((int)receivedMetadataCount, intParam);
                }
            });
        }
        public void ObjectsWithCountTest()
        {
            ActODataService(args =>
            {
                // Создаем объекты и кладем их в базу данных.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = string.Format("Страна №{0}", i)
                    };
                }

                args.DataService.UpdateObjects(ref countries);

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

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

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

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

                    // Убедимся, что объекты получены и их нужное количество.
                    Assert.True(receivedCountries.ContainsKey("value"));
                    Assert.Equal(((ArrayList)receivedCountries["value"]).Count, countriesCount);

                    // Убедимся, что метаданные о количестве объектов получены.
                    Assert.True(receivedCountries.ContainsKey("@odata.count"));

                    // Убедимся, что количество объектов в метаданных совпадает, с ожидаемым количеством.
                    object receivedMetadataCount = receivedCountries["@odata.count"];
                    Assert.IsType(typeof(int), receivedMetadataCount);
                    Assert.Equal((int)receivedMetadataCount, countriesCount);
                }
            });
        }
        public void TestMethod2()
        {
            foreach (IDataService dataService in DataServices)
            {
                SQLDataService ds = (SQLDataService)dataService;

                string[] props = new[]
                {
                    Information.ExtractPropertyPath <Лес>(x => x.Название),
                    Information.ExtractPropertyPath <Лес>(x => x.Площадь),
                    Information.ExtractPropertyPath <Лес>(x => x.Страна),
                    Information.ExtractPropertyPath <Лес>(x => x.Заповедник)
                };

                var view = new View();
                view.DefineClassType = typeof(Лес);
                foreach (string prop in props)
                {
                    view.AddProperty(prop);
                }

                // Чтобы в базе был подходящий лес, делаем его сами.
                var country = new Страна()
                {
                    Название = "РФ"
                };
                var forest = new Лес()
                {
                    Название = "Черняевский", Страна = country
                };
                var updateArray = new DataObject[] { country, forest };
                ds.UpdateObjects(ref updateArray);

                var лес = new Лес();
                лес.SetExistObjectPrimaryKey(forest.__PrimaryKey);

                ds.LoadObject(view, лес, false, false);

                Assert.Equal(country.__PrimaryKey, лес.Страна.__PrimaryKey);
            }
        }
        public void TestFunctionEntity()
        {
            ActODataService(args =>
            {
                RegisterODataUserFunctions(args.Token.Functions, args.DataService);

                // Создаем объекты и кладем их в базу данных.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = $"Страна №{i}",
                    };
                }

                args.DataService.UpdateObjects(ref countries);

                var expectedResult = (args.DataService as SQLDataService).Query <Страна>(Страна.Views.СтранаE).ToArray();

                int intParam = 3;

                // Формируем URL запроса к OData-сервису.
                string requestUrl = $"http://localhost/odata/FunctionEntity(intParam={intParam})";

                // Обращаемся к 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(expectedResult[intParam].Название, receivedDict["Название"]);
                }
            });
        }
Ejemplo n.º 8
0
        public void TestActionWithLcs()
        {
            ActODataService(args =>
            {
                args.Token.Functions.RegisterAction(new Func <QueryParameters, string, string, IEnumerable <DataObject> >(AddWithQueryParameters));
                RegisterODataActions(args.Token.Functions, args.DataService);

                // Создаем объекты и кладем их в базу данных.
                DataObject[] countries = new DataObject[5];
                int countriesCount     = countries.Length;
                for (int i = 0; i < countriesCount; i++)
                {
                    countries[i] = new Страна {
                        Название = $"Страна №{i}"
                    };
                }

                args.DataService.UpdateObjects(ref countries);

                // Формируем URL запроса к OData-сервису.
                string requestUrl = $"http://localhost/odata/ActionWithLcs";
                string json       = "{\"entitySet\": \"Странаs\", \"query\": \"$filter=Название eq 'Страна №1'\"}";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).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.True(receivedDict.ContainsKey("value"));
                    Assert.Equal(1, (receivedDict["value"] as ArrayList).Count);
                }

                DataServiceProvider.DataService = args.DataService;
                requestUrl = $"http://localhost/odata/AddWithQueryParameters";
                json       = "{\"entitySet\": \"Странаs\", \"query\": \"$filter=Название eq 'Страна №2'\"}";
                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).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.True(receivedDict.ContainsKey("value"));
                    Assert.Equal(1, (receivedDict["value"] as ArrayList).Count);
                }

                requestUrl = $"http://localhost/odata/ActionVoid";

                // Обращаемся к OData-сервису и обрабатываем ответ.
                using (HttpResponseMessage response = args.HttpClient.PostAsJsonStringAsync(requestUrl, json).Result)
                {
                    // Убедимся, что запрос завершился успешно.
                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                }
            });
        }
        public void MasterFieldsOrderBy()
        {
            ActODataService(args =>
            {
                ExternalLangDef.LanguageDef.DataService = args.DataService;
                Страна страна1 = new Страна {
                    Название = "Россия"
                };
                Страна страна2 = new Страна {
                    Название = "Белоруссия"
                };
                Лес лес1 = new Лес {
                    Название = "Бор"
                };
                Лес лес2 = new Лес {
                    Название = "Березовая роща"
                };
                Медведь медвПапа1 = new Медведь {
                    СтранаРождения = страна1, ЛесОбитания = лес1, ПорядковыйНомер = 1, Вес = 200, Пол = tПол.Мужской
                };
                медвПапа1.СтранаРождения = страна1;
                Медведь медвПапа2        = new Медведь {
                    СтранаРождения = страна1, ЛесОбитания = лес1, ПорядковыйНомер = 2, Вес = 150, Пол = tПол.Мужской
                };
                Медведь медвМама1 = new Медведь {
                    СтранаРождения = страна1, ЛесОбитания = лес2, ПорядковыйНомер = 3, Вес = 120, Пол = tПол.Женский
                };
                Медведь медвМама2 = new Медведь {
                    СтранаРождения = страна1, ЛесОбитания = лес2, ПорядковыйНомер = 3, Вес = 110, Пол = tПол.Женский
                };
                Медведь медвежонок1 = new Медведь {
                    СтранаРождения = страна2, ЛесОбитания = лес2, Папа = медвПапа1, Мама = медвМама1, Вес = 48, Пол = tПол.Мужской
                };
                Медведь медвежонок2 = new Медведь {
                    СтранаРождения = страна2, ЛесОбитания = лес2, Папа = медвПапа2, Мама = медвМама1, Вес = 22, Пол = tПол.Мужской
                };
                Медведь медвежонок3 = new Медведь {
                    СтранаРождения = страна2, ЛесОбитания = лес2, Папа = медвПапа1, Мама = медвМама2, Вес = 58, Пол = tПол.Мужской
                };
                Медведь медвежонок4 = new Медведь {
                    СтранаРождения = страна2, ЛесОбитания = лес2, Папа = медвПапа2, Мама = медвМама2, Вес = 62, Пол = tПол.Мужской
                };
                var objs = new DataObject[] { страна1, страна2, медвМама1, медвМама2, медвПапа1, медвПапа2, лес1, лес2 };
                args.DataService.UpdateObjects(ref objs);
                objs = new DataObject[] { медвежонок1, медвежонок2, медвежонок3, медвежонок4 };
                args.DataService.UpdateObjects(ref objs);

                string requestUrl;
                // Проверка использования в фильтрации перечислений.
                requestUrl = "http://localhost/odata/Медведьs?$filter=Папа ne null&$expand=Папа,Мама&$orderby=Мама/Вес desc,Папа/Вес desc";

                // Обращаемся к 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(4, ((ArrayList)receivedDict["value"]).Count);

                    int[] expectedValues = { 48, 22, 58, 62 };

                    for (int i = 0; i < expectedValues.Length; i++)
                    {
                        var медведь = ((ArrayList)receivedDict["value"])[i];
                        Assert.Equal(expectedValues[i], (int)((Dictionary <string, object>)медведь)["Вес"]);
                    }
                }

                requestUrl = "http://localhost/odata/Медведьs?$filter=Папа ne null&$expand=Папа,Мама&$orderby=Мама/Вес desc,Папа/Вес";

                // Обращаемся к 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(4, ((ArrayList)receivedDict["value"]).Count);

                    int[] expectedValues = { 22, 48, 62, 58 };

                    for (int i = 0; i < expectedValues.Length; i++)
                    {
                        var медведь = ((ArrayList)receivedDict["value"])[i];
                        Assert.Equal(expectedValues[i], (int)((Dictionary <string, object>)медведь)["Вес"]);
                    }
                }
            });
        }