public void TestUpdateLockedObjectBySameUserWithFlag() { ActODataService(args => { var userMock = new Mock <CurrentUserService.IUser>(); userMock.Setup(u => u.Login).Returns("user1"); var lockService = new LockService(args.DataService); var offlineManager = new DefaultOfflineManager(lockService, userMock.Object); args.UnityContainer.RegisterInstance <BaseOfflineManager>(offlineManager); var лес = new Лес(); args.DataService.UpdateObject(лес); AssertLock.IsNotAcquired(lockService, лес); // Select data with locking. var result1 = args.HttpClient.GetAsync(args.Token.Model, typeof(Лес), "user1").Result; Assert.True(result1.IsSuccessStatusCode); AssertLock.IsAcquired(lockService, лес, "user1"); // Update locked data. var result2 = args.HttpClient.PatchAsJsonStringAsync(args.Token.Model, лес, Лес.Views.ЛесE, "user1").Result; Assert.True(result2.IsSuccessStatusCode); AssertLock.IsNotAcquired(lockService, лес); }); }
public void TestMethod1() { // TODO: в чём состоит проблема: в классе Лес в конструкторе стоит "страна.SetExistObjectPrimaryKey("C254B561-B867-4888-837F-D8B68211E497")", но это не отрабатывает. foreach (IDataService dataService in DataServices) { string[] props = new[] { "Название", "Площадь", "Страна" /*,"Страна.__PrimaryKey"*/, /*"Страна.Название",*/ "Заповедник" }; SQLDataService ds = (SQLDataService)dataService; Assert.NotNull(ds); View view = new View(); view.DefineClassType = typeof(Лес); foreach (string prop in props) { view.AddProperty(prop); } LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Лес), view); var dataObjects = ds.LoadObjects(lcs); Лес лес = (Лес)dataObjects[0]; Assert.NotEqual("{C254B561-B867-4888-837F-D8B68211E497}", лес.Страна.__PrimaryKey.ToString().ToUpper()); } }
public void LoadObjectsWithTop() { foreach (IDataService dataService in DataServices) { SQLDataService ds = (SQLDataService)dataService; try { // Arrange. // Сначала создаём структуру данных, требуемую для теста. int top = 2; var forest = new Лес(); var bear1 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 2 }; var bear2 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 5 }; var bear3 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 8 }; var updateObjectsArray = new DataObject[] { forest, bear3, bear1, bear2 }; ds.UpdateObjects(ref updateObjectsArray); var view = Медведь.Views.МедведьL; var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); lcs.ReturnTop = top; // Выведем в консоль запрос, который генерируется данной операцией. ds.AfterGenerateSQLSelectQuery -= ds_AfterGenerateSQLSelectQuery; ds.AfterGenerateSQLSelectQuery += ds_AfterGenerateSQLSelectQuery; // Act. var dataObjects = ds.LoadObjects(lcs); // Assert. Assert.Equal(top, dataObjects.Length); } catch (Exception) { Debug.WriteLine("Тест запущен"); Debug.WriteLine(dataService.GetType().Name); Debug.WriteLine(dataService.CustomizationString); throw; } finally { ds.AfterGenerateSQLSelectQuery -= ds_AfterGenerateSQLSelectQuery; } } }
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 NullableDateTimeOrderBy() { ActODataService(args => { ExternalLangDef.LanguageDef.DataService = args.DataService; NullableDateTime dt1 = (NullableDateTime) new DateTime(2017, 11, 21); NullableDateTime dt2 = (NullableDateTime) new DateTime(2017, 10, 21); NullableDateTime dt3 = (NullableDateTime) new DateTime(2017, 09, 21); NullableDateTime dt4 = (NullableDateTime) new DateTime(2017, 08, 21); Лес лес1 = new Лес { Название = "Еловый", ДатаПоследнегоОсмотра = dt1 }; Лес лес2 = new Лес { Название = "Сосновый", ДатаПоследнегоОсмотра = dt2 }; Лес лес3 = new Лес { Название = "Смешанный", ДатаПоследнегоОсмотра = dt3 }; Лес лес4 = new Лес { Название = "Березовый", ДатаПоследнегоОсмотра = dt4 }; var objs = new DataObject[] { лес1, лес2, лес3, лес4 }; args.DataService.UpdateObjects(ref objs); string requestUrl; // Проверка использования в фильтрации перечислений. requestUrl = "http://localhost/odata/Лесs?$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); NullableDateTime[] expectedValues = { dt1, dt2, dt3, dt4 }; for (int i = 0; i < expectedValues.Length; i++) { var лес = ((ArrayList)receivedDict["value"])[i]; Assert.Equal(expectedValues[i], (NullableDateTime) new DateTimeOffset(DateTime.Parse((string)((Dictionary <string, object>)лес)["ДатаПоследнегоОсмотра"])).UtcDateTime); } } }); }
public void BeforeSavePatchSimpleObjectTest() { ActODataService(args => { args.Token.Events.CallbackBeforeCreate = BeforeCreate; args.Token.Events.CallbackBeforeUpdate = BeforeUpdate; args.Token.Events.CallbackBeforeDelete = BeforeDelete; // Создаем объект данных, который потом будем обновлять, и добавляем в базу обычным сервисом данных. Лес лес = new Лес { Название = "Чаща", Площадь = 100 }; args.DataService.UpdateObject(лес); // Обновляем часть атрибутов. лес.Площадь = 150; // Представление, по которому будем обновлять. string[] медвPropertiesNames = { Information.ExtractPropertyPath <Лес>(x => x.__PrimaryKey), Information.ExtractPropertyPath <Лес>(x => x.Площадь) }; var лесDynamicView = new View(new ViewAttribute("лесDynamicView", медвPropertiesNames), typeof(Лес)); // Преобразуем объект данных в JSON-строку. string requestJsonData = лес.ToJson(лесDynamicView, args.Token.Model); // Формируем 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-сервису и обрабатываем ответ, в теле запроса передаем обновляемый объект в формате JSON. using (HttpResponseMessage response = args.HttpClient.PatchAsJsonStringAsync(requestUrl, requestJsonData).Result) { Assert.NotNull(ParamObj); // Убедимся, что запрос завершился успешно (тело ответа д.б. пустым при отсутствии ошибок обновления). Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); // Проверяем что объект данных был обновлен в базе, причем только по переданным атрибутам. Лес updatedЛес = new Лес { __PrimaryKey = лес.__PrimaryKey }; args.DataService.LoadObject(updatedЛес); Assert.Equal(150, updatedЛес.Площадь); Assert.Equal("Чаща", updatedЛес.Название); } }); }
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 UpdateMasterPropertyTest() { foreach (IDataService dataService in DataServices) { // Arrange. string названиеЛеса = "Шишкин лес"; string новоеНазваниеЛеса = "Лисицын лес"; var лес = new Лес { Название = названиеЛеса }; var потапыч = new Медведь { ПорядковыйНомер = 5, ЛесОбитания = лес }; dataService.UpdateObject(потапыч); View view = new View { DefineClassType = typeof(Медведь), Properties = new[] { new PropertyInView(nameof(Медведь.ЛесОбитания), string.Empty, true, string.Empty) } }; LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); var dataObjects = dataService.LoadObjects(lcs); Assert.Equal(1, dataObjects.Length); Медведь медведь = (Медведь)dataObjects[0]; // Assert.AreEqual(названиеЛеса, медведь.ЛесОбитания.Название); // Act. медведь.ЛесОбитания.Название = новоеНазваниеЛеса; dataService.UpdateObject(медведь.ЛесОбитания); // Assert. view.AddProperty(Information.ExtractPropertyPath <Медведь>(м => м.ЛесОбитания.Название)); dataObjects = dataService.LoadObjects(lcs); Assert.Equal(1, dataObjects.Length); медведь = (Медведь)dataObjects[0]; Assert.Equal(названиеЛеса, медведь.ЛесОбитания.Название); } }
public void TestAcquiringWithoutLock() { ActODataService(args => { var lockService = new LockService(args.DataService); var currentUser = new Mock <CurrentUserService.IUser>().Object; var offlineManager = new DefaultOfflineManager(lockService, currentUser); args.UnityContainer.RegisterInstance <BaseOfflineManager>(offlineManager); var лес = new Лес(); args.DataService.UpdateObject(лес); AssertLock.IsNotAcquired(lockService, лес); var result = args.HttpClient.GetAsync(args.Token.Model, typeof(Лес)).Result; Assert.True(result.IsSuccessStatusCode); AssertLock.IsNotAcquired(lockService, лес); }); }
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 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 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 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 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 TestLoadingObjectIndexesWithMaxResultsCount() { foreach (IDataService dataService in DataServices) { var ds = (SQLDataService)dataService; var ldef = SQLWhereLanguageDef.LanguageDef; // Сначала создаём структуру данных, требуемую для теста. var forest = new Лес(); var bear1 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 2 }; var bear2 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 5 }; var bear3 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 8 }; var updateObjectsArray = new DataObject[] { forest, bear3, bear1, bear2 }; ds.UpdateObjects(ref updateObjectsArray); var view = Медведь.Views.OrderNumberTest; string numberPropertyName = Information.ExtractPropertyPath <Медведь>(x => x.ПорядковыйНомер); var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); lcs.ColumnsSort = new[] { new ColumnsSortDef(numberPropertyName, SortOrder.Asc) }; var variable = new VariableDef(ldef.NumericType, numberPropertyName); Function func = ldef.GetFunction( ldef.funcAND, ldef.GetFunction( ldef.funcEQ, new VariableDef(ldef.GuidType, Information.ExtractPropertyPath <Медведь>(x => x.ЛесОбитания)), forest.__PrimaryKey), ldef.GetFunction(ldef.funcG, variable, 3)); // Меньше чем всего результатов. IDictionary <int, string> indexes1 = ds.GetObjectIndexesWithPks(lcs, func, 1); // Столько же, сколько всего результатов. IDictionary <int, string> indexes2 = ds.GetObjectIndexesWithPks(lcs, func, 2); // Больше чем число результатов. IDictionary <int, string> indexes3 = ds.GetObjectIndexesWithPks(lcs, func, 3); Assert.NotNull(indexes1); Assert.Equal(1, indexes1.Count); Assert.Equal(bear2.__PrimaryKey.ToString(), indexes1[2]); Assert.NotNull(indexes2); Assert.Equal(2, indexes2.Count); Assert.Equal(bear2.__PrimaryKey.ToString(), indexes2[2]); Assert.Equal(bear3.__PrimaryKey.ToString(), indexes2[3]); Assert.NotNull(indexes3); Assert.Equal(2, indexes3.Count); Assert.Equal(bear2.__PrimaryKey.ToString(), indexes3[2]); Assert.Equal(bear3.__PrimaryKey.ToString(), indexes3[3]); } }
public void TestLoadingObjectIndex() { foreach (IDataService dataService in DataServices) { var ds = (SQLDataService)dataService; var ldef = SQLWhereLanguageDef.LanguageDef; // Сначала создаём структуру данных, требуемую для теста. var forest = new Лес(); var bear1 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 2 }; var bear2 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 5 }; var bear3 = new Медведь() { ЛесОбитания = forest, ПорядковыйНомер = 8 }; var updateObjectsArray = new DataObject[] { forest, bear3, bear1, bear2 }; ds.UpdateObjects(ref updateObjectsArray); // Формируем функцию ограничения, что нас интересуют только медведи из текущего леса. Function functionCurrentForest = ldef.GetFunction( ldef.funcEQ, new VariableDef(ldef.GuidType, Information.ExtractPropertyPath <Медведь>(x => x.ЛесОбитания)), forest.__PrimaryKey); var view = Медведь.Views.OrderNumberTest; string numberPropertyName = Information.ExtractPropertyPath <Медведь>(x => x.ПорядковыйНомер); // Проверка индекса первого элемента. var lcs1 = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); lcs1.ColumnsSort = new[] { new ColumnsSortDef(numberPropertyName, SortOrder.Asc) }; Function func1 = ldef.GetFunction( ldef.funcAND, functionCurrentForest, ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.GuidType, SQLWhereLanguageDef.StormMainObjectKey), bear2.__PrimaryKey)); int index1 = ds.GetObjectIndex(lcs1, func1); Assert.Equal(2, index1); // Проверка индекса первого элемента c учетом ограничения на номер записи. var lcs2 = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); lcs2.ColumnsSort = new[] { new ColumnsSortDef(numberPropertyName, SortOrder.Asc) }; lcs2.RowNumber = new RowNumberDef(2, 3); Function func2 = ldef.GetFunction( ldef.funcAND, functionCurrentForest, ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.GuidType, SQLWhereLanguageDef.StormMainObjectKey), bear2.__PrimaryKey)); int index2 = ds.GetObjectIndex(lcs2, func2); Assert.Equal(1, index2); // Проверка индекса нескольких элементов. var lcs3 = LoadingCustomizationStruct.GetSimpleStruct(typeof(Медведь), view); lcs3.ColumnsSort = new[] { new ColumnsSortDef(numberPropertyName, SortOrder.Asc) }; var variableDef3 = new VariableDef(ldef.NumericType, numberPropertyName); var func3 = ldef.GetFunction(ldef.funcG, variableDef3, 3); int[] indexes3 = ds.GetObjectIndexes(lcs3, func3); Assert.NotNull(indexes3); Assert.Equal(indexes3.Length, 2); Assert.Equal(indexes3[0], 2); Assert.Equal(indexes3[1], 3); // Проверка индексов с первичными ключами элементов. IDictionary <int, string> indexesWithPk3 = ds.GetObjectIndexesWithPks(lcs3, func3); Assert.NotNull(indexesWithPk3); Assert.Equal(indexesWithPk3.Count, 2); Assert.Equal(indexesWithPk3[2], bear2.__PrimaryKey.ToString()); Assert.Equal(indexesWithPk3[3], bear3.__PrimaryKey.ToString()); } }
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>)медведь)["Вес"]); } } }); }
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 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 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); } }); }