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 TestSelectExpandFunctionEntity() { ActODataService(args => { RegisterODataUserFunctions(args.Token.Functions, args.DataService); Медведь медв = new Медведь { Вес = 48 }; Лес лес1 = new Лес { Название = "Бор" }; Лес лес2 = new Лес { Название = "Березовая роща" }; медв.ЛесОбитания = лес1; var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; медв.Берлога.Add(берлога1); медв.Берлога.Add(берлога2); var objs = new DataObject[] { медв, берлога2, берлога1, лес1, лес2 }; args.DataService.UpdateObjects(ref objs); var expectedResult = (args.DataService as SQLDataService).Query <Медведь>(Медведь.Views.МедведьE).ToArray(); int intParam = 0; // Формируем URL запроса к OData-сервису. string requestUrl = $"http://localhost/odata/FunctionSelectExpandEntity(intParam={intParam})?$expand=Берлога($select=Наименование)"; // Обращаемся к 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["Вес"]); for (int i = 0; i < expectedResult[intParam].Берлога.Count; i++) { Assert.Equal(expectedResult[intParam].Берлога[i].Наименование, ((receivedDict["Берлога"] as ArrayList)[i] as Dictionary <string, object>)["Наименование"] as string); Assert.Equal(1, ((receivedDict["Берлога"] as ArrayList)[i] as Dictionary <string, object>).Count); } } }); }
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); } }); }
public void TestODataAny() { foreach (IDataService dataService in DataServices) { ICSSoft.STORMNET.Windows.Forms.ExternalLangDef.LanguageDef.DataService = dataService; //if (dataService is MSSQLDataService) // continue; Медведь медв = new Медведь { Вес = 48, Пол = Пол.Мужской }; Медведь медв2 = new Медведь { Вес = 148, Пол = Пол.Мужской }; Лес лес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 ICSSoft.STORMNET.DataObject[] { медв, медв2, берлога2, берлога1, берлога3, лес1, лес2 }; var ds = (SQLDataService)dataService; ds.UpdateObjects(ref objs); var v = new View(new ViewAttribute("AllProps", new string[] { "*" }), typeof(Кошка)); var ob = ds.LoadObjects(v); var l = ds.Query <Медведь>(Медведь.Views.МедведьE).Where( x => x.Берлога.Cast <Берлога>().Any(o => o.Наименование == "Для хорошего настроения")).ToList(); } }
public void TestAfterGet() { ActODataService(args => { args.Token.Events.CallbackAfterGet = AfterGet; Медведь медв = new Медведь { Вес = 48, Пол = tПол.Мужской }; Медведь медв2 = new Медведь { Вес = 148, Пол = tПол.Мужской }; Лес лес = new Лес { Название = "Бор" }; Лес лес2 = new Лес { Название = "Березовая роща" }; медв.ЛесОбитания = лес; медв2.ЛесОбитания = лес2; var берлога = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес }; var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; медв.Берлога.Add(берлога); медв2.Берлога.Add(берлога2); var objs = new DataObject[] { медв, медв2, берлога2, берлога, лес, лес2 }; args.DataService.UpdateObjects(ref objs); Objs = null; string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.GetAsync(requestUrl).Result) { // Убедимся, что запрос завершился успешно. Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(Objs); } }); }
public void BeforeSavePostComplexObjectTest() { // TODO: переписать тест с корректным формированием параметра - передаваемой сущности - для Post. // Объекты для тестирования создания. Медведь медв = new Медведь { Вес = 48 }; Лес лес1 = new Лес { Название = "Бор" }; Лес лес2 = new Лес { Название = "Березовая роща" }; медв.ЛесОбитания = лес1; var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; медв.Берлога.Add(берлога1); медв.Берлога.Add(берлога2); // Объекты для тестирования создания с обновлением. Медведь медвежонок = new Медведь { Вес = 12 }; var берлога3 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; медвежонок.Берлога.Add(берлога3); ActODataService(args => { args.Token.Events.CallbackBeforeCreate = BeforeCreate; args.Token.Events.CallbackBeforeUpdate = BeforeUpdate; args.Token.Events.CallbackBeforeDelete = BeforeDelete; // ------------------ Только создания объектов ------------------ // Подготовка тестовых данных в формате OData. var controller = new Controllers.DataObjectController(args.DataService, args.Token.Model, args.Token.Events, args.Token.Functions); System.Web.OData.EdmEntityObject edmObj = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Медведь)), медв, 1, null); var edmЛес1 = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес1, 1, null); var edmЛес2 = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес2, 1, null); edmObj.TrySetPropertyValue("ЛесОбитания", edmЛес1); var coll = controller.GetEdmCollection(медв.Берлога, typeof(Берлога), 1, null); edmObj.TrySetPropertyValue("Берлога", coll); System.Web.OData.EdmEntityObject edmБерлога1 = (System.Web.OData.EdmEntityObject)coll[0]; // controller.GetEdmObject(args.ODataService.Model.GetEdmEntityType(typeof(Берлога)), берлога1, 1, null); System.Web.OData.EdmEntityObject edmБерлога2 = (System.Web.OData.EdmEntityObject)coll[1]; // controller.GetEdmObject(args.ODataService.Model.GetEdmEntityType(typeof(Берлога)), берлога2, 1, null); edmБерлога1.TrySetPropertyValue("ЛесРасположения", edmЛес1); edmБерлога2.TrySetPropertyValue("ЛесРасположения", edmЛес2); // Формируем URL запроса к OData-сервису. string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); ParamObj = null; // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. HttpResponseMessage response = args.HttpClient.PostAsJsonAsync(requestUrl, edmObj).Result; Assert.NotNull(ParamObj); // Убедимся, что запрос завершился успешно. Assert.Equal(HttpStatusCode.Created, response.StatusCode); // Получим строку с ответом. string receivedJsonObjs = response.Content.ReadAsStringAsync().Result.Beautify(); // В ответе приходит объект с созданной сущностью. // Преобразуем полученный объект в словарь. Dictionary <string, object> receivedObjs = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedJsonObjs); // Проверяем созданный объект, вычитав с помощью DataService DataObject createdObj = new Медведь { __PrimaryKey = медв.__PrimaryKey }; args.DataService.LoadObject(createdObj); Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); Assert.Equal(((Медведь)createdObj).Вес, receivedObjs["Вес"]); // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), "ЛесE"); lcs.LoadingTypes = new[] { typeof(Лес) }; var dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(2, dobjs.Length); lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), "БерлогаE"); lcs.LoadingTypes = new[] { typeof(Берлога) }; // lcs.LimitFunction = ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.GuidType, SQLWhereLanguageDef.StormMainObjectKey), keyValue); dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(2, dobjs.Length); // ------------------ Создание объекта и обновление связанных ------------------ // Создаем нового медведя: в его мастере ЛесОбитания - лес1, но в нём изменим Название; в детейлы заберем от первого медведя детейл2, изменив Название в мастере детейла. // Подготовка тестовых данных в формате OData. edmObj = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Медведь)), медвежонок, 1, null); edmObj.TrySetPropertyValue("ЛесОбитания", edmЛес1); edmЛес1.TrySetPropertyValue("Название", лес1.Название + "(обновл)"); edmЛес2.TrySetPropertyValue("Название", лес2.Название + "(обновл)"); медв.Берлога.Remove(берлога2); медвежонок.Берлога.Add(берлога2); coll = controller.GetEdmCollection(медвежонок.Берлога, typeof(Берлога), 1, null); edmObj.TrySetPropertyValue("Берлога", coll); edmБерлога1 = (System.Web.OData.EdmEntityObject)coll[0]; edmБерлога2 = (System.Web.OData.EdmEntityObject)coll[1]; edmБерлога1.TrySetPropertyValue("ЛесРасположения", edmЛес2); edmБерлога2.TrySetPropertyValue("ЛесРасположения", edmЛес1); ParamObj = null; // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. response = args.HttpClient.PostAsJsonAsync(requestUrl, edmObj).Result; Assert.NotNull(ParamObj); // Убедимся, что запрос завершился успешно. Assert.Equal(HttpStatusCode.Created, response.StatusCode); // Проверяем созданный объект, вычитав с помощью DataService createdObj = new Медведь { __PrimaryKey = медвежонок.__PrimaryKey }; args.DataService.LoadObject(createdObj); Assert.Equal(ObjectStatus.UnAltered, createdObj.GetStatus()); Assert.Equal(12, ((Медведь)createdObj).Вес); // Проверяем что созданы все зависимые объекты, вычитав с помощью DataService ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), "ЛесE"); lcs.LoadingTypes = new[] { typeof(Лес) }; lcs.LimitFunction = ldef.GetFunction( ldef.funcEQ, new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), лес1.__PrimaryKey); dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(1, dobjs.Length); Assert.True(((Лес)dobjs[0]).Название.EndsWith("(обновл)")); lcs.LimitFunction = ldef.GetFunction( ldef.funcEQ, new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey), лес2.__PrimaryKey); dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(1, dobjs.Length); Assert.True(((Лес)dobjs[0]).Название.EndsWith("(обновл)")); lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), "БерлогаE"); lcs.LoadingTypes = new[] { typeof(Берлога) }; lcs.LimitFunction = ldef.GetFunction( ldef.funcEQ, new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), медв.__PrimaryKey); dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(1, dobjs.Length); lcs.LimitFunction = ldef.GetFunction( ldef.funcEQ, new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(ldef.GuidType, "Медведь"), медвежонок.__PrimaryKey); dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(2, dobjs.Length); // Вернем детейл для того, чтобы тест работал со следующими СУБД. медвежонок.Берлога.Remove(берлога2); медв.Берлога.Add(берлога2); }); }
public void BeforeSaveDeleteObjectTest() { ActODataService(args => { args.Token.Events.CallbackBeforeCreate = BeforeCreate; args.Token.Events.CallbackBeforeUpdate = BeforeUpdate; args.Token.Events.CallbackBeforeDelete = BeforeDelete; // ------------------ Удаление простого объекта ----------------------------- // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. Медведь медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; args.DataService.UpdateObject(медв); // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). string requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); ParamObj = null; // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { Assert.NotNull(ParamObj); // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); // Проверяем что объект данных был удален из базы. bool exists = true; Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; try { args.DataService.LoadObject(deletedМедв); } catch (Exception ex) { if (ex is CantFindDataObjectException) { exists = false; } } Assert.False(exists); } // ------------------ Удаление детейла и объекта с детейлами ----------------------------- // Создаем объект данных, который потом будем удалять, и добавляем в базу обычным сервисом данных. медв = new Медведь { Пол = tПол.Мужской, Вес = 80, ПорядковыйНомер = 1 }; медв.Берлога.Add(new Берлога { Наименование = "Берлога для хорошего настроения" }); медв.Берлога.Add(new Берлога { Наименование = "Берлога для плохого настроения" }); Берлога delБерлога = new Берлога { Наименование = "Отдельно удаляемая берлога" }; медв.Берлога.Add(delБерлога); args.DataService.UpdateObject(медв); // Проверяем что до вызова удалений в базе есть все детейлы. var ldef = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), Берлога.Views.БерлогаE); lcs.LoadingTypes = new[] { typeof(Берлога) }; ICSSoft.STORMNET.DataObject[] dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(3, dobjs.Length); // Формируем URL запроса к OData-сервису для удаления объекта-детейла (с идентификатором удаляемой сущности). requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Берлога)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)delБерлога.__PrimaryKey).Guid.ToString()); // Обращаемся к OData-сервису и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); // Проверяем что объект-детейл был удален из базы. bool exists = true; Берлога deletedБерлога = new Берлога { __PrimaryKey = delБерлога.__PrimaryKey }; try { args.DataService.LoadObject(deletedБерлога); } catch (Exception ex) { if (ex is CantFindDataObjectException) { exists = false; } } Assert.False(exists); // Проверяем что объект-агрегатор остался в базе. exists = true; Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; try { args.DataService.LoadObject(deletedМедв); } catch (Exception ex) { if (ex is CantFindDataObjectException) { exists = false; } } Assert.True(exists); // Проверяем что детейлов объекта в базе осталось на 1 меньше, чем создавали. dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(2, dobjs.Length); } // Формируем URL запроса к OData-сервису (с идентификатором удаляемой сущности). requestUrl = string.Format("http://localhost/odata/{0}({1})", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name, ((ICSSoft.STORMNET.KeyGen.KeyGuid)медв.__PrimaryKey).Guid.ToString()); // Обращаемся к OData-сервису для удаления объекта с детейлами и обрабатываем ответ. using (HttpResponseMessage response = args.HttpClient.DeleteAsync(requestUrl).Result) { // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок удаления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); // Проверяем что объект данных был удален из базы. bool exists = true; Медведь deletedМедв = new Медведь { __PrimaryKey = медв.__PrimaryKey }; try { args.DataService.LoadObject(deletedМедв); } catch (Exception ex) { if (ex is CantFindDataObjectException) { exists = false; } } Assert.False(exists); // Проверяем что детейлов объекта в базе не осталось. dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(0, dobjs.Length); } }); }
public void TestODataMasterFieldOrderby() { foreach (IDataService dataService in DataServices) { //ICSSoft.STORMNET.Windows.Forms.ExternalLangDef.LanguageDef.DataService = dataService; if (dataService is MSSQLDataService) { continue; } Лес лес1 = new Лес { Название = "Бор" }; Лес лес2 = new Лес { Название = "Березовая роща" }; Медведь медв = new Медведь { Вес = 48, Пол = Пол.Мужской, ЛесОбитания = лес1 }; Медведь медв2 = new Медведь { Вес = 148, Пол = Пол.Мужской, ЛесОбитания = лес1 }; Медведь медв3 = new Медведь { Вес = 148, Пол = Пол.Мужской, ЛесОбитания = лес2 }; медв.ЛесОбитания = лес1; var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; var берлога3 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; медв.Берлога.Add(берлога1); медв.Берлога.Add(берлога2); медв2.Берлога.Add(берлога3); var objs = new ICSSoft.STORMNET.DataObject[] { медв, медв2, медв3, берлога2, берлога1, берлога3, лес1, лес2 }; var ds = (SQLDataService)dataService; ds.UpdateObjects(ref objs); var expr0 = ds.Query <Медведь>(Медведь.Views.МедведьE).Where( x => x.ЛесОбитания.Название == "Бор"); var expr1 = ds.Query <Медведь>(Медведь.Views.МедведьE).OrderBy(x => x.ЛесОбитания.Название); var lcs1 = LinqToLcs.GetLcs(expr1.Expression, Медведь.Views.МедведьE); lcs1.View = Медведь.Views.МедведьE; lcs1.LoadingTypes = new Type[] { typeof(Медведь) }; var l1 = dataService.LoadObjects(lcs1); var expr2 = ds.Query <Медведь>(Медведь.Views.МедведьE).OrderByDescending(x => x.ЛесОбитания.Название); var lcs2 = LinqToLcs.GetLcs(expr2.Expression, Медведь.Views.МедведьE); lcs2.View = Медведь.Views.МедведьE; lcs2.LoadingTypes = new Type[] { typeof(Медведь) }; var l2 = dataService.LoadObjects(lcs2); var lcs3 = new LoadingCustomizationStruct(null); lcs3.View = Медведь.Views.МедведьE; lcs3.LoadingTypes = new Type[] { typeof(Медведь) }; lcs3.ColumnsSort = new[] { new ColumnsSortDef(Information.ExtractPropertyPath <Медведь>(c => c.ЛесОбитания.Название) /*new ColumnsSortDef("ЛесОбитания.Название"*/, ICSSoft.STORMNET.Business.SortOrder.Asc) }; var l3 = dataService.LoadObjects(lcs3); var lcs4 = new LoadingCustomizationStruct(null); lcs4.View = Медведь.Views.МедведьE; lcs4.LoadingTypes = new Type[] { typeof(Медведь) }; lcs4.ColumnsSort = new[] { new ColumnsSortDef(Information.ExtractPropertyPath <Медведь>(c => c.ЛесОбитания.Название) /*new ColumnsSortDef("ЛесОбитания.Название"*/, ICSSoft.STORMNET.Business.SortOrder.Desc) }; var l4 = dataService.LoadObjects(lcs4); } }
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 DeleteAggregatorWithDetailAndHierarhiTest() { foreach (IDataService dataService in DataServices) { // Arrange. SQLDataService ds = dataService as SQLDataService; //TODO: Fix OracleDataService error. if (dataService is OracleDataService) { continue; } var masterForest = new Лес { Название = "лес1" }; var detailDen = new Берлога { Наименование = "берлога1", ЛесРасположения = masterForest }; var aggregatorBear = new Медведь { ПорядковыйНомер = 2, ЛесОбитания = masterForest }; aggregatorBear.Берлога.Add(detailDen); ds.UpdateObject(aggregatorBear); var aggregatorBearMother = new Медведь { ПорядковыйНомер = 2 }; aggregatorBear.Мама = aggregatorBearMother; ds.UpdateObject(aggregatorBear); // Act & Assert. LoadingCustomizationStruct lcsBear = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), Медведь.Views.МедведьE); LoadingCustomizationStruct lcsForest = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), Лес.Views.ЛесE); DataObject[] dataObjectsBear = ds.LoadObjects(lcsBear); DataObject[] dataObjectsForest = ds.LoadObjects(lcsForest); // Act int countBearBefore = ds.GetObjectsCount(lcsBear); int countForestBefore = ds.GetObjectsCount(lcsForest); List <DataObject> objectsForUpdateList = new List <DataObject>(); foreach (Медведь медведь in dataObjectsBear) { медведь.SetStatus(ObjectStatus.Deleted); objectsForUpdateList.Add(медведь); } foreach (Лес лес in dataObjectsForest) { лес.SetStatus(ObjectStatus.Deleted); objectsForUpdateList.Add(лес); } DataObject[] objectsForUpdate = objectsForUpdateList.ToArray(); ds.UpdateObjects(ref objectsForUpdate); int countBearAfter = ds.GetObjectsCount(lcsBear); int countForestAfter = ds.GetObjectsCount(lcsForest); // Assert Assert.Equal(2, countBearBefore); Assert.Equal(1, countForestBefore); Assert.Equal(0, countBearAfter); Assert.Equal(0, countForestAfter); } }
public void BSTest() { // Объекты для тестирования создания. Медведь медв = new Медведь { Вес = 48 }; Лес лес1 = new Лес { Название = "Бор" }; Лес лес2 = new Лес { Название = "Березовая роща" }; медв.ЛесОбитания = лес1; var берлога1 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; var берлога2 = new Берлога { Наименование = "Для плохого настроения", ЛесРасположения = лес2 }; медв.Берлога.Add(берлога1); медв.Берлога.Add(берлога2); // Объекты для тестирования создания с обновлением. Медведь медвежонок = new Медведь { Вес = 12 }; var берлога3 = new Берлога { Наименование = "Для хорошего настроения", ЛесРасположения = лес1 }; медвежонок.Берлога.Add(берлога3); ActODataService(args => { // ------------------ Только создания объектов ------------------ // Подготовка тестовых данных в формате OData. var controller = new Controllers.DataObjectController(args.DataService, args.Token.Model, args.Token.Events, args.Token.Functions); System.Web.OData.EdmEntityObject edmObj = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Медведь)), медв, 1, null); var edmЛес1 = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес1, 1, null); var edmЛес2 = controller.GetEdmObject(args.Token.Model.GetEdmEntityType(typeof(Лес)), лес2, 1, null); edmObj.TrySetPropertyValue("ЛесОбитания", edmЛес1); var coll = controller.GetEdmCollection(медв.Берлога, typeof(Берлога), 1, null); edmObj.TrySetPropertyValue("Берлога", coll); System.Web.OData.EdmEntityObject edmБерлога1 = (System.Web.OData.EdmEntityObject)coll[0]; System.Web.OData.EdmEntityObject edmБерлога2 = (System.Web.OData.EdmEntityObject)coll[1]; edmБерлога1.TrySetPropertyValue("ЛесРасположения", edmЛес1); edmБерлога2.TrySetPropertyValue("ЛесРасположения", edmЛес2); // Формируем URL запроса к OData-сервису. string requestUrl = string.Format("http://localhost/odata/{0}", args.Token.Model.GetEdmEntitySet(typeof(Медведь)).Name); // Обращаемся к OData-сервису и обрабатываем ответ, в теле запроса передаем создаваемый объект в формате JSON. HttpResponseMessage response = args.HttpClient.PostAsJsonAsync(requestUrl, edmObj).Result; // Убедимся, что запрос завершился успешно. Assert.Equal(HttpStatusCode.Created, response.StatusCode); // Получим строку с ответом. string receivedJsonObjs = response.Content.ReadAsStringAsync().Result.Beautify(); // В ответе приходит объект с созданной сущностью. // Преобразуем полученный объект в словарь. Dictionary <string, object> receivedObjs = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(receivedJsonObjs); Assert.Equal("Object created.", receivedObjs["ПолеБС"]); // Проверяем что созданы зависимые объекты, вычитав с помощью args.DataService var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Берлога), "БерлогаE"); lcs.LoadingTypes = new[] { typeof(Берлога) }; var dobjs = args.DataService.LoadObjects(lcs); Assert.Equal(2, dobjs.Length); foreach (var obj in dobjs) { var berloga = (Берлога)obj; Assert.Equal("Object created.", berloga.ПолеБС); } }); }
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); } }); }