Example #1
0
        public void UpdateOtherAgregatorInstanceTest()
        {
            foreach (IDataService dataService in DataServices)
            {
                // Шаг 1. Создание экземпляра класса А хотя бы с одним детейлом класса В.
                var берлога = new Берлога {
                    Наименование = "У потапыча"
                };
                var потапыч = new Медведь {
                    ПорядковыйНомер = 5
                };
                потапыч.Берлога.Add(берлога);
                dataService.UpdateObject(потапыч);

                // Шаг 2. Создание другого экземпляра класса А с установкой первичного ключа первого экземпляра.
                var pk      = (KeyGuid)потапыч.__PrimaryKey;
                var берёзыч = new Медведь {
                    ПорядковыйНомер = 6
                };
                берёзыч.SetExistObjectPrimaryKey(pk);

                // Шаг 3. Допустимо пропустить.

                // Шаг 4. Создание экземпляра класса С с установкой в качестве мастера второго экземпляра класса А.
                var блоха = new Блоха {
                    Кличка = "Попрыгушка", МедведьОбитания = берёзыч
                };

                // Шаг 5. Обновление экземпляра класса С в базу данных.
                dataService.UpdateObject(блоха);

                Assert.Equal(1, потапыч.Берлога.Count);
            }
        }
        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);
                }
            });
        }