public static async Task <APObject> CreateNewAsync(APObject apObject = null) { Console.WriteLine("Creating new apObject"); var now = DateTime.Now; dynamic obj = apObject ?? new APObject("object"); if (apObject == null) { obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.datetimefield = now.ToString("o"); obj.stringfield = "string value"; obj.textfield = "text value"; obj.boolfield = false; obj.geofield = "11.5,12.5"; obj.listfield = "a"; obj.SetAttribute("attr1", "value1"); obj.SetAttribute("attr2", "value2"); } CreateObjectResponse response = null; response = await(new CreateObjectRequest() { Object = obj, Environment = Environment.Sandbox }).ExecuteAsync(); ApiHelper.EnsureValidResponse(response); Assert.IsNotNull(response.Object); Console.WriteLine("Created apObject id {0}", response.Object.Id); return(response.Object); }
public void GetListTest() { var obj = new APObject("object"); obj.SetList<int>("multifield", new[] { 1, 2, 3, 4, 5 }); var list = obj.GetList<decimal>("multifield"); Assert.IsTrue(list.Intersect(new decimal[] { 1, 2, 3, 4, 5 }).Count() == 5); }
public async Task FindAllObjectsAsyncWithNestedQueryTest() { // Create the object dynamic apObject = new APObject("object"); apObject.stringfield = Unique.String; apObject.intfield = 10; dynamic obj = await ObjectHelper.CreateNewAsync(apObject as APObject); // Search string stringToSearch = obj.stringfield; var query = Query.And(new[] { Query.Property("stringfield").IsEqualTo(stringToSearch), Query.Property("intfield").IsEqualTo(10) }); // Delay for index propagation on test bench. await Utilities.Delay(1500); var objects = await APObjects.FindAllAsync("object", query); Assert.IsNotNull(objects); Assert.IsTrue(objects.Count == 1); Console.WriteLine("page:{0} pageSize:{1} total: {2}", objects.PageNumber, objects.PageSize, objects.TotalRecords); }
public async Task UpdateObjectWithNoUpdateAsyncTest() { var stopWatch = new System.Diagnostics.Stopwatch(); // Create the object dynamic obj = new APObject("object"); decimal pi = 22.0m / 7.0m; obj.intfield = 1; obj.decimalfield = pi; var saved = await ObjectHelper.CreateNewAsync(obj as APObject); var firstUpdateTime = saved.LastUpdatedAt; stopWatch.Start(); //Dummy update, shouldn't make any api call, assuming api call takes atleast 50 ms await saved.SaveAsync(); stopWatch.Stop(); Assert.IsTrue(stopWatch.ElapsedMilliseconds < 50); Console.WriteLine(stopWatch.ElapsedMilliseconds); //Cleanup await APObjects.DeleteAsync(saved.Type, saved.Id); }
public async Task QueryWithTagsMatchOneOrMoreTest() { var tag1 = Unique.String; var tag2 = Unique.String; // Create the test object 1. APObject obj1 = new APObject("object"); obj1.Set <string>("stringfield", Unique.String); obj1.AddTag(tag1); await obj1.SaveAsync(); APObject obj2 = new APObject("object"); obj2.Set <string>("stringfield", Unique.String); obj2.AddTag(tag2); await obj2.SaveAsync(); // Search for the object with tags. var matches = await APObjects.FindAllAsync("object", Query.Tags.MatchOneOrMore(tag1, tag2)); Assert.IsTrue(matches != null); Assert.IsTrue(matches.Count == 2); Assert.IsTrue(matches[0] != null && matches[1] != null); Assert.IsTrue(matches[0].Id == obj1.Id || matches[1].Id == obj1.Id); Assert.IsTrue(matches[0].Id == obj2.Id || matches[1].Id == obj2.Id); }
public async Task FindAndDisplayAllObjectsTest() { var waitHandle = new ManualResetEvent(false); // Create the object dynamic obj = new APObject("object"); obj.stringfield = Unique.String; await obj.SaveAsync(); var saved = obj as APObject; Console.WriteLine("Created apObj with id {0}", saved.Id); var index = 1; // Search var objects = await APObjects.FindAllAsync("object", Query.None, null, 1, 100); do { objects.ForEach(a => Console.WriteLine("{0}) {1}", index++, a.Id)); Console.WriteLine("page:{0} pageSize:{1} total: {2}", objects.PageNumber, objects.PageSize, objects.TotalRecords); if (objects.IsLastPage == false) { objects = await objects.NextPageAsync(); } else { break; } } while (true); Console.WriteLine("Finished."); }
public async Task FreeTextSearchWithQuestionMarkOperatorTest() { var prefix = Unique.String; var suffix = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set <string>("stringfield", prefix + "X" + suffix); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set <string>("stringfield", prefix + "Y" + suffix); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #endif // Delay for index propagation on test bench. await Utilities.Delay(1500); var results = await APObjects.FreeTextSearchAsync("object", prefix + "?" + suffix); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 2); Assert.IsTrue(results[0].Id == obj1.Id || results[0].Id == obj2.Id); Assert.IsTrue(results[1].Id == obj1.Id || results[1].Id == obj2.Id); }
public async Task FreeTextSearchWithMinusOperatorTest() { var mandatoryToken = Unique.String; var optionalToken = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set <string>("stringfield", mandatoryToken); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set <string>("stringfield", mandatoryToken + " " + optionalToken); // Create one object with only optional token var obj3 = new APObject("object"); obj3.Set <string>("stringfield", optionalToken); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync(), obj3.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync(), obj3.SaveAsync()); #endif var results = await APObjects.FreeTextSearchAsync("object", mandatoryToken + " -" + optionalToken); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results[0].Id == obj1.Id); }
public async Task FreeTextSearchWithProximityOperatorTest() { var prefix = Unique.String; var suffix = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set <string>("stringfield", prefix + " word1" + " word2" + " word3 " + suffix); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set <string>("stringfield", prefix + " word1" + " word2" + " word3" + " word4" + " word5 " + suffix); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #endif var results = await APObjects.FreeTextSearchAsync("object", "\"" + prefix + " " + suffix + "\"~4"); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results[0].Id == obj1.Id); }
public void AddItemsToNullPropertyTest() { APObject obj = new APObject("object"); obj.AddItems("field1", 5, 6); Assert.IsTrue(obj.GetList <string>("field1").Count() == 2); }
public static async Task<APObject> CreateNewAsync(APObject apObject = null) { Console.WriteLine("Creating new apObject"); var now = DateTime.Now; dynamic obj = apObject ?? new APObject("object"); if (apObject == null) { obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.datetimefield = now.ToString("o"); obj.stringfield = "string value"; obj.textfield = "text value"; obj.boolfield = false; obj.geofield = "11.5,12.5"; obj.listfield = "a"; obj.SetAttribute("attr1", "value1"); obj.SetAttribute("attr2", "value2"); } CreateObjectResponse response = null; response = await (new CreateObjectRequest() { Object = obj, Environment = Environment.Sandbox }).ExecuteAsync(); ApiHelper.EnsureValidResponse(response); Assert.IsNotNull(response.Object); Console.WriteLine("Created apObject id {0}", response.Object.Id); return response.Object; }
public void GetListTest() { var obj = new APObject("object"); obj.SetList <int>("multifield", new[] { 1, 2, 3, 4, 5 }); var list = obj.GetList <decimal>("multifield"); Assert.IsTrue(list.Intersect(new decimal[] { 1, 2, 3, 4, 5 }).Count() == 5); }
public void TestGeocodeGet() { var apObject = new APObject("object"); apObject.Set("geofield", new Geocode(80.0m, 81.0m)); var geo = apObject.Get <Geocode>("geofield"); Assert.IsTrue(geo.ToString() == "80.0,81.0"); }
public async Task <List <Model.Hotel> > List() { var hotelList = new List <Model.Hotel>(); var apiHotel = new APObject("hotel"); return(hotelList); }
public void TestGeocodeSet() { var apObject = new APObject("object"); apObject.Set("geofield", new Geocode(80.0m, 81.0m)); var value = apObject.Get <string>("geofield"); Assert.IsTrue(value == "80.0,81.0"); }
private void WriteObject(JsonWriter writer, APObject obj) { var serializer = ObjectFactory.Build <IJsonSerializer>(); var bytes = serializer.Serialize(obj); using (var reader = new StreamReader(new MemoryStream(bytes), Encoding.UTF8)) { writer.WriteRawValue(reader.ReadToEnd()); } }
public async Task AddItemsToMultiValuedFieldAsyncTest() { var obj = new APObject("object"); await obj.SaveAsync(); await obj.AddItemsAsync("multifield", "1", "2", "3"); var list = obj.GetList <string>("multifield"); Assert.IsTrue(list.Except(new[] { "1", "2", "3" }).Count() == 0); }
public async Task FindObjectsWithInQueryTest() { var value = Unique.String; var queryValues = new[] { Unique.String, value, Unique.String, Unique.String }; var obj = new APObject("object"); obj.Set("stringfield", value); obj = await ObjectHelper.CreateNewAsync(obj); var results = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsIn(queryValues), sortOrder: SortOrder.Descending, orderBy: "__id", pageSize: 5); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results.Single().Id == obj.Id); }
public async Task DeleteObjectAsyncTest() { // Create apObject var now = DateTime.Now; dynamic obj = new APObject("object"); obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.datetimefield = now.ToString("o"); obj.stringfield = "string value"; obj.textfield = "text value"; obj.boolfield = false; obj.geofield = "11.5,12.5"; obj.listfield = "a"; obj.SetAttribute("attr1", "value1"); obj.SetAttribute("attr2", "value2"); CreateObjectResponse response = null; response = await(new CreateObjectRequest() { Object = obj }).ExecuteAsync(); Assert.IsNotNull(response); Assert.IsNotNull(response.Status); Assert.IsTrue(response.Status.IsSuccessful); Assert.IsNotNull(response.Object); Console.WriteLine("Created apObject id {0}", response.Object.Id); Console.WriteLine("Time taken: {0} seconds", response.TimeTaken); // Delete the apObject var deleteObjectResponse = await(new DeleteObjectRequest() { Id = response.Object.Id, Type = response.Object.Type }).ExecuteAsync(); Assert.IsNotNull(deleteObjectResponse, "Delete apObjectr response is null."); Assert.IsTrue(deleteObjectResponse.Status.IsSuccessful == true, deleteObjectResponse.Status.Message ?? "Delete apObject operation failed."); // Try get the deleted apObject var getObjectResponse = await( new GetObjectRequest() { Id = response.Object.Id, Type = response.Object.Type }).ExecuteAsync(); Assert.IsNotNull(getObjectResponse, "Get apObject response is null."); Assert.IsNull(getObjectResponse.Object, "Should not be able to get a deleted apObject."); Assert.IsTrue(getObjectResponse.Status.Code == "404", "Error code expected was not 404."); }
public async Task SaveMultivaluedAsyncTest() { var array = new[] { 1, 3, 4, 5, 6, 7 }; var obj = new APObject("object"); obj.SetList<int>("multifield", array); await obj.SaveAsync(); var saved = await APObjects.GetAsync("object", obj.Id); var array2 = saved.GetList<int>("multifield"); Assert.IsTrue(array.Intersect(array2).Count() == array.Length); }
public async Task EntityCreateAndUpdatedDateTimeTest() { var obj = new APObject("object"); obj.Set<string>("stringfield", Unique.String); await obj.SaveAsync(); var createDuration = obj.CreatedAt.Subtract(DateTime.Now).Duration(); Assert.IsTrue(createDuration.Minutes < 2); var updateDuration = obj.LastUpdatedAt.Subtract(DateTime.Now).Duration(); Assert.IsTrue(updateDuration.Minutes < 2); }
public async Task PropertyNotInStringTest() { var value = Unique.String; var obj = new APObject("object"); obj.Set("stringfield", value); await obj.SaveAsync(); var objects = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsNotIn(new[] { Unique.String }), orderBy: "__id", sortOrder: SortOrder.Descending, pageSize: 1); Assert.AreEqual(obj.Id, objects.Single().Id); objects = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsNotIn(new [] { value }), orderBy: "__id", sortOrder: SortOrder.Descending, pageSize: 1); Assert.AreNotEqual(obj.Id, objects.Single().Id); }
public async Task PropertyNotInIntegerTest() { var value = DateTime.UtcNow.Ticks; var obj = new APObject("object"); obj.Set("intfield", value); await obj.SaveAsync(); var objects = await APObjects.FindAllAsync("object", Query.Property("intfield").IsNotIn(new[] { 100L }), orderBy: "__id", sortOrder: SortOrder.Descending, pageSize: 1); Assert.AreEqual(obj.Id, objects.Single().Id); objects = await APObjects.FindAllAsync("object", Query.Property("intfield").IsNotIn(new[] { value }), orderBy: "__id", sortOrder: SortOrder.Descending, pageSize: 1); Assert.AreNotEqual(obj.Id, objects.Single().Id); }
public async Task AtomicCountersWithoutPreInitializationTest() { var obj = new APObject("object"); await obj.SaveAsync(); await obj.IncrementAsync("intfield", 10); await obj.DecrementAsync("intfield", 5); Assert.AreEqual(5, obj.Get <int>("intfield")); }
public void ItemAddTestWithoutDuplication() { APObject obj = new APObject("object"); obj.SetList <int>("field1", new[] { 1, 2, 3, 4, 5, 6 }); var field1 = obj.GetList <int>("field1"); Assert.IsTrue(field1.Count() == 6); obj.AddItems("field1", false, 5, 6); field1 = obj.GetList <int>("field1"); Assert.IsTrue(field1.Count() == 6); }
public void RemoveAllOccurencesOfItemTest() { APObject obj = new APObject("object"); obj.SetList <int>("field1", new[] { 1, 2, 3, 1, 2, 3 }); var removed = obj.RemoveItems("field1", 1, false); Assert.IsTrue(removed == true); var list = obj.GetList <int>("field1").ToList(); Assert.IsTrue(list.Count == 4); Assert.IsTrue(list.Count(x => x == 1) == 0); }
public async Task QueryObjectWithSingleQuotedValueTest() { dynamic obj = new APObject("object"); var stringValue = "Pan's Labyrinth" + Unique.String; obj.stringfield = stringValue; await obj.SaveAsync(); PagedList <APObject> result = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsEqualTo(stringValue)); Assert.IsTrue(result.TotalRecords == 1, "Expected single record but multiple records were returned."); Assert.IsTrue(result.Single().Id == obj.Id); }
public async Task MultiValueObjectTest() { var obj = new APObject("object"); obj.SetList <string>("multifield", new[] { "1", "2", "3", "4" }); await obj.SaveAsync(); var read = await APObjects.GetAsync("object", obj.Id); var value = read.GetList <string>("multifield"); var strList = read.GetList <string>("multifield"); var intList = read.GetList <int>("multifield"); }
public async Task DeleteObjectAsyncTest() { // Create apObject var now = DateTime.Now; dynamic obj = new APObject("object"); obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.datetimefield = now.ToString("o"); obj.stringfield = "string value"; obj.textfield = "text value"; obj.boolfield = false; obj.geofield = "11.5,12.5"; obj.listfield = "a"; obj.SetAttribute("attr1", "value1"); obj.SetAttribute("attr2", "value2"); CreateObjectResponse response = null; response = await (new CreateObjectRequest() { Object = obj }).ExecuteAsync(); Assert.IsNotNull(response); Assert.IsNotNull(response.Status); Assert.IsTrue(response.Status.IsSuccessful); Assert.IsNotNull(response.Object); Console.WriteLine("Created apObject id {0}", response.Object.Id); Console.WriteLine("Time taken: {0} seconds", response.TimeTaken); // Delete the apObject var deleteObjectResponse = await (new DeleteObjectRequest() { Id = response.Object.Id, Type = response.Object.Type }).ExecuteAsync(); Assert.IsNotNull(deleteObjectResponse, "Delete apObjectr response is null."); Assert.IsTrue(deleteObjectResponse.Status.IsSuccessful == true, deleteObjectResponse.Status.Message ?? "Delete apObject operation failed."); // Try get the deleted apObject var getObjectResponse = await ( new GetObjectRequest() { Id = response.Object.Id, Type = response.Object.Type }).ExecuteAsync(); Assert.IsNotNull(getObjectResponse, "Get apObject response is null."); Assert.IsNull(getObjectResponse.Object, "Should not be able to get a deleted apObject."); Assert.IsTrue(getObjectResponse.Status.Code == "404", "Error code expected was not 404."); }
public async Task UpdateObjectAsyncTest() { // Create an apObject var now = DateTime.Now; dynamic obj = new APObject("object"); obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.stringfield = "initial"; obj.Tags.Add("initial"); var createdResponse = await(new CreateObjectRequest() { Object = obj }).ExecuteAsync(); Assert.IsNotNull(createdResponse, "Object creation failed."); Assert.IsNotNull(createdResponse.Status, "Status is null."); Assert.IsTrue(createdResponse.Status.IsSuccessful, createdResponse.Status.Message ?? "Create apObject failed."); var created = createdResponse.Object; // Update the apObject var updateRequest = new UpdateObjectRequest() { Id = created.Id, Type = created.Type }; updateRequest.PropertyUpdates["intfield"] = "2"; updateRequest.PropertyUpdates["decimalfield"] = 20.0m.ToString(); updateRequest.PropertyUpdates["stringfield"] = null; updateRequest.PropertyUpdates["datefield"] = "2013-11-20"; updateRequest.AddedTags.AddRange(new[] { "tag1", "tag2" }); updateRequest.RemovedTags.AddRange(new[] { "initial" }); var updatedResponse = await updateRequest.ExecuteAsync(); Assert.IsNotNull(updatedResponse, "Update apObject response is null."); Assert.IsNotNull(updatedResponse.Status, "Update apObject response status is null."); Assert.IsNotNull(updatedResponse.Object, "Updated apObject is null."); var updated = updatedResponse.Object; Assert.IsTrue(updated.Get <string>("intfield") == "2"); Assert.IsTrue(updated.Get <decimal>("decimalfield") == 20.0m); Assert.IsTrue(updated.Get <string>("stringfield") == null); Assert.IsTrue(updated.Get <string>("datefield") == "2013-11-20"); Assert.IsTrue(updated.Tags.Count() == 2); Assert.IsTrue(updated.Tags.Intersect(new[] { "tag1", "tag2" }).Count() == 2); }
public async Task SaveMultivaluedAsyncTest() { var array = new[] { 1, 3, 4, 5, 6, 7 }; var obj = new APObject("object"); obj.SetList <int>("multifield", array); await obj.SaveAsync(); var saved = await APObjects.GetAsync("object", obj.Id); var array2 = saved.GetList <int>("multifield"); Assert.IsTrue(array.Intersect(array2).Count() == array.Length); }
public async Task AddUniqueItemsToMultiValuedFieldAsyncTest() { var obj = new APObject("object"); obj.SetList("multifield", new int[] { 1, 2, 3 }); await obj.SaveAsync(); await obj.AddItemsAsync("multifield", true, "1", "2", "3", "4", "5"); var list = obj.GetList <string>("multifield"); Assert.IsTrue(list.Count() == 5); Assert.IsTrue(list.Except(new[] { "1", "2", "3", "4", "5" }).Count() == 0); }
public async Task RemoveItemsFromMultiValuedFieldAsyncTest() { var obj = new APObject("object"); obj.SetList("multifield", new int[] { 1, 2, 3 }); await obj.SaveAsync(); await obj.RemoveItemsAsync("multifield", "1", "2"); var list = obj.GetList <string>("multifield"); Assert.IsTrue(list.Count() == 1); Assert.IsTrue(list.Except(new[] { "3" }).Count() == 0); }
public async Task ForceUpdateEmptyShouldUpdateNothingTest() { var obj = await ObjectHelper.CreateNewAsync(); var copy = new APObject("object", obj.Id); await copy.SaveAsync(forceUpdate: true); var existingProperties = obj.Properties.ToList(); var updateProperties = copy.Properties.ToList(); var existing = existingProperties .Select(x => new KeyValuePair<string, string>(x.Key, x.Value.ToString())) .ToList(); var updated = updateProperties.Select(x => new KeyValuePair<string, string>(x.Key, x.Value.ToString())).ToList(); Assert.IsTrue(updated.Count == existing.Count); }
public void InvalidRemoveItemsTest() { var obj = new APObject("object"); obj["age"] = 10; try { obj.RemoveItems("age", 2); Assert.Fail("Add item to integer property should have failed."); } catch (ArgumentException) { } }
public async Task EntityCreateAndUpdatedDateTimeTest() { var obj = new APObject("object"); obj.Set <string>("stringfield", Unique.String); await obj.SaveAsync(); var createDuration = obj.CreatedAt.Subtract(DateTime.Now).Duration(); Assert.IsTrue(createDuration.Minutes < 2); var updateDuration = obj.LastUpdatedAt.Subtract(DateTime.Now).Duration(); Assert.IsTrue(updateDuration.Minutes < 2); }
public void ItemAddTest() { APObject obj = new APObject("object"); obj.SetList <int>("field1", new[] { 1, 2, 3, 4, 5, 6 }); var field1 = obj.GetList <int>("field1"); Assert.IsFalse(field1.Contains(10)); Assert.IsFalse(field1.Contains(11)); obj.AddItems("field1", 10, 11); field1 = obj.GetList <int>("field1"); Assert.IsTrue(field1.Contains(10)); Assert.IsTrue(field1.Contains(11)); }
public void EntityGetSetTest() { dynamic apObject = new APObject("object"); AssertGetSet <int>(apObject, "field1", 10); AssertGetSet <uint>(apObject, "field2", 10); AssertGetSet <long>(apObject, "field3", 10); AssertGetSet <float>(apObject, "field4", 10.0f); AssertGetSet <double>(apObject, "field5", 10.0d); AssertGetSet <decimal>(apObject, "field6", 10.0m); AssertGetSet <string>(apObject, "field7", "test string"); AssertGetSet <char>(apObject, "field8", 'x'); AssertGetSet <DateTime>(apObject, "field9", DateTime.Now); }
public static void WriteAcl(JsonWriter writer, APObject obj, JsonSerializer serializer) { var acl = obj.Acl; var allowed = acl.Allowed.ToList(); var denied = acl.Denied.ToList(); var inherit = acl.Reset.ToList(); if (allowed.Count == 0 && denied.Count == 0 && inherit.Count == 0) { return; } writer.WritePropertyName("__acls"); WriteAcls(writer, allowed, denied, inherit); }
public async Task AggregateGetTest() { var objA = new APObject("object"); objA.Set("decimalfield", 100.0m); var root = new APObject("object"); root.Set("decimalfield", 50m); await APConnection .New("sibling") .FromNewObject("object", root) .ToNewObject("object", objA) .SaveAsync(); await Task.Delay(20000); var rootCopy = await APObjects.GetAsync("object", root.Id); Assert.AreEqual(100.0m, rootCopy.GetAggregate("decimal_aggregate")); }
public async Task StartsWithAndEndsWithFiltersTest() { var prefix = Unique.String; var suffix = Unique.String; var obj = new APObject("object"); obj.Set<string>("stringfield", prefix + suffix); await obj.SaveAsync(); var found = (await APObjects.FindAllAsync("object", Query.Property("stringfield").StartsWith(prefix))).SingleOrDefault(); Assert.IsTrue(found != null); Assert.IsTrue(found.Id == obj.Id); found = (await APObjects.FindAllAsync("object", Query.Property("stringfield").EndsWith(suffix))).SingleOrDefault(); Assert.IsTrue(found != null); Assert.IsTrue(found.Id == obj.Id); }
public async Task EntityDateTimePropertyTest() { var dateTime = DateTime.Now; var obj1 = new APObject("object"); obj1.Set<DateTime>("datetimefield", dateTime); await obj1.SaveAsync(); var obj2 = new APObject("object"); obj2.Set<DateTime>("datetimefield", dateTime.ToUniversalTime()); await obj2.SaveAsync(); var obj1Copy = await APObjects.GetAsync("object", obj1.Id); var obj2Copy = await APObjects.GetAsync("object", obj2.Id); Assert.IsTrue(obj1Copy.Get<DateTime>("datetimefield") == dateTime); Assert.IsTrue(obj2Copy.Get<DateTime>("datetimefield") == dateTime); }
public void CannotGetMultiValuedViaIndexerTest() { var obj = new APObject("object"); try { obj.SetList<int>("multifield", new int[] { 1, 2, 4 }); try { var list = obj["multifield"]; Assert.Fail("Set operation on multivalue indexer should have failed."); } catch (Exception) { } } catch (Exception) { } }
public static APObject NewInstance() { Console.WriteLine("Creating new apObject instance without saving"); var now = DateTime.Now; dynamic obj = new APObject("object"); obj.intfield = 1; obj.decimalfield = 10.0m; obj.datefield = "2012-12-20"; obj.datetimefield = now.ToString("o"); obj.stringfield = "string value"; obj.textfield = "text value"; obj.boolfield = false; obj.geofield = "11.5,12.5"; obj.listfield = "a"; obj.SetAttribute("attr1", "value1"); obj.SetAttribute("attr2", "value2"); return obj as APObject; }
public static void ReadAcl(APObject obj, JObject json, JsonSerializer serializer) { JToken value; if (json.TryGetValue("__acls", out value) == false) return; var array = value as JArray; if (array == null || array.Count == 0) return; var items = array.Values<JObject>(); foreach (var item in items) { ParseClaims(obj.Acl, item); } }
public async Task FreeTextSearchTest() { var value = Unique.String + " " + Unique.String; var obj = new APObject("object"); obj.Set<string>("stringfield", value); await obj.SaveAsync(); // Delay for index propagation on test bench. await Utilities.Delay(1500); var results = await APObjects.FreeTextSearchAsync("object", value); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results[0].Id == obj.Id); }
public static void WriteAcl(JsonWriter writer, APObject obj, JsonSerializer serializer) { var acl = obj.Acl; var allowed = acl.Allowed.ToList(); var denied = acl.Denied.ToList(); var inherit = acl.Reset.ToList(); if (allowed.Count == 0 && denied.Count == 0 && inherit.Count == 0) return; writer.WritePropertyName("__acls"); WriteAcls(writer, allowed, denied, inherit); }
public async Task FreeTextSearchWithQuestionMarkOperatorTest() { var prefix = Unique.String; var suffix = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set<string>("stringfield", prefix + "X" + suffix); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set<string>("stringfield", prefix + "Y" + suffix); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #endif // Delay for index propagation on test bench. await Utilities.Delay(1500); var results = await APObjects.FreeTextSearchAsync("object", prefix + "?" + suffix); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 2); Assert.IsTrue(results[0].Id == obj1.Id || results[0].Id == obj2.Id); Assert.IsTrue(results[1].Id == obj1.Id || results[1].Id == obj2.Id); }
public async Task CreateConnection2BetweenNewAndExistingObjectsAsyncTest() { var obj1 = await ObjectHelper.CreateNewAsync(); var obj2 = new APObject("object"); var conn = APConnection .New("sibling") .FromExistingObject("object", obj1.Id) .ToNewObject("object", obj2); await conn.SaveAsync(); Assert.IsTrue(string.IsNullOrWhiteSpace(conn.Id) == false); Console.WriteLine("Created connection with id: {0}", conn.Id); Assert.IsTrue(string.IsNullOrWhiteSpace(obj2.Id) == false); Console.WriteLine("Created new apObject with id: {0}", obj1.Id); // Ensure that the endpoint ids match Assert.IsTrue(conn.Endpoints.ToArray().Select(x => x.ObjectId).Intersect(new[] { obj1.Id, obj2.Id }).Count() == 2); }
public Score(APObject obj) : base(obj) { }
public async Task MatchQueryTest() { var propertyValue = Unique.String; var attrValue = Unique.String; var obj = new APObject("object"); obj.Set<string>("stringfield", propertyValue); obj.SetAttribute("test_attribute", attrValue); await obj.SaveAsync(); var propertyQuery = Query.Property("stringfield").FreeTextMatches(propertyValue); var attrQuery = Query.Attribute("test_attribute").FreeTextMatches(attrValue); var result1 = await APObjects.FindAllAsync("object", propertyQuery); var result2 = await APObjects.FindAllAsync("object", attrQuery); Assert.IsNotNull(result1); Assert.IsTrue(result1.Count == 1); Assert.IsNotNull(result2); Assert.IsTrue(result2.Count == 1); Assert.IsTrue(result1.Single().Id == obj.Id); Assert.IsTrue(result2.Single().Id == obj.Id); }
public async Task CreateDuplicateConnectionAsyncTest() { var o1 = new APObject("object"); var o2 = new APObject("object"); var conn = await APConnection .New("sibling") .FromNewObject("object", o1) .ToNewObject("object", o2) .SaveAsync(); var dupe = await APConnection .New("sibling") .FromExistingObject("object", o1.Id) .ToExistingObject("object", o2.Id) .SaveAsync(); Assert.AreEqual(conn.Id, dupe.Id); }
public async Task QueryWithTagsMatchOneOrMoreTest() { var tag1 = Unique.String; var tag2 = Unique.String; // Create the test object 1. APObject obj1 = new APObject("object"); obj1.Set<string>("stringfield", Unique.String); obj1.AddTag(tag1); await obj1.SaveAsync(); APObject obj2 = new APObject("object"); obj2.Set<string>("stringfield", Unique.String); obj2.AddTag(tag2); await obj2.SaveAsync(); // Search for the object with tags. var matches = await APObjects.FindAllAsync("object", Query.Tags.MatchOneOrMore(tag1, tag2)); Assert.IsTrue(matches != null); Assert.IsTrue(matches.Count == 2); Assert.IsTrue(matches[0] != null && matches[1] != null ); Assert.IsTrue(matches[0].Id == obj1.Id || matches[1].Id == obj1.Id); Assert.IsTrue(matches[0].Id == obj2.Id || matches[1].Id == obj2.Id); }
public async Task RawQueryTest() { var propertyValue = Unique.String; var obj = new APObject("object"); obj.Set<string>("stringfield", propertyValue); await obj.SaveAsync(); var rawQuery = string.Format("*stringfield == '{0}'", propertyValue); // Delay for index propagation on test bench. await Utilities.Delay(1500); var results = await APObjects.FindAllAsync("object", Query.FromRawQuery(rawQuery)); Assert.IsNotNull(results); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results.Single().Id == obj.Id); }
public async Task CreateDuplicateConnectionWithFaultAsyncTest() { var o1 = new APObject("object"); var o2 = new APObject("object"); var conn = await APConnection .New("sibling") .FromNewObject("object", o1) .ToNewObject("object", o2) .SaveAsync(); try { var dupe = await APConnection .New("sibling") .FromExistingObject("object", o1.Id) .ToExistingObject("object", o2.Id) .SaveAsync(throwIfAlreadyExists: true); Assert.Fail("Duplicate connection creation did not fault."); } catch (DuplicateObjectException) { } }
public async Task FreeTextSearchWithProximityOperatorTest() { var prefix = Unique.String; var suffix = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set<string>("stringfield", prefix + " word1" + " word2" + " word3 " + suffix); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set<string>("stringfield", prefix + " word1" + " word2" + " word3" + " word4" + " word5 " + suffix); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync()); #endif var results = await APObjects.FreeTextSearchAsync("object", "\"" + prefix + " " + suffix + "\"~4"); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results[0].Id == obj1.Id); }
public async Task CreateConnectionBetweenNewObjectsAsyncTest() { var obj1 = new APObject("object"); var obj2 = new APObject("object"); var conn = APConnection .New("sibling") .FromNewObject("object", obj1) .ToNewObject("object", obj2); await conn.SaveAsync(); Assert.IsTrue(string.IsNullOrWhiteSpace(conn.Id) == false); Console.WriteLine("Created connection with id: {0}", conn.Id); Assert.IsTrue(string.IsNullOrWhiteSpace(obj1.Id) == false); Console.WriteLine("Created new apObject with id: {0}", obj1.Id); Assert.IsTrue(string.IsNullOrWhiteSpace(obj2.Id) == false); Console.WriteLine("Created new apObject with id: {0}", obj2.Id); }
public async Task UpdatePartialConnectionAsyncTest() { // Create new connection var obj1 = await ObjectHelper.CreateNewAsync(); var obj2 = new APObject("object"); var conn = APConnection .New("sibling") .FromExistingObject("object", obj1.Id) .ToNewObject("object", obj2); await conn.SaveAsync(); // Update var conn2 = new APConnection("sibling", conn.Id); var value = Guid.NewGuid().ToString(); conn["field1"] = value; await conn.SaveAsync(); var updated = await APConnections.GetAsync("sibling", conn.Id); Assert.IsTrue(updated.Get<string>("field1") == value); }
private APConnection ParseConnection(string parentLabel, APObject parentObj, APObject currentObj, JObject json) { string label = string.Empty; if( json.Property("__label") != null ) label = GetValue(json, "__label", JTokenType.String, true).ToString(); else label = GetValue(json, "label", JTokenType.String, true).ToString(); var relation = GetValue(json, "__relationtype", JTokenType.String, true).ToString(); var id = GetValue(json, "__id", JTokenType.String, true).ToString(); var conn = new APConnection(relation, id); conn.Endpoints = new EndpointPair( new Endpoint(parentLabel, parentObj), new Endpoint(label, currentObj)); // Parse system properties JToken value = null; // Id if (json.TryGetValue("__id", out value) == true && value.Type != JTokenType.Null) { conn.Id = value.ToString(); json.Remove("__id"); } // Revision if (json.TryGetValue("__revision", out value) == true && value.Type != JTokenType.Null) { conn.Revision = int.Parse(value.ToString()); json.Remove("__revision"); } // Created by if (json.TryGetValue("__createdby", out value) == true && value.Type != JTokenType.Null) { conn.CreatedBy = value.ToString(); json.Remove("__createdby"); } // Create date if (json.TryGetValue("__utcdatecreated", out value) == true && value.Type != JTokenType.Null) { conn.CreatedAt = (DateTime)value; json.Remove("__utcdatecreated"); } // Last updated by if (json.TryGetValue("__lastmodifiedby", out value) == true && value.Type != JTokenType.Null) { conn.LastUpdatedBy = value.ToString(); json.Remove("__lastmodifiedby"); } // Last update date if (json.TryGetValue("__utclastupdateddate", out value) == true && value.Type != JTokenType.Null) { conn.LastUpdatedAt = (DateTime)value; json.Remove("__utclastupdateddate"); } // Parse connection tags if (json.TryGetValue("__tags", out value) == true && value.Type == JTokenType.Array) { ((JArray)value).Values<string>().For(t => conn.AddTag(t, true)); } json.Remove("__tags"); // Parse connection attributes if (json.TryGetValue("__attributes", out value) == true && value.Type == JTokenType.Object) { foreach (var property in ((JObject)value).Properties()) { if( property.Type != JTokenType.Null ) conn.SetAttribute(property.Name, property.Value.ToString(), true); } } json.Remove("__attributes"); // properties foreach (var property in json.Properties()) { // Ignore objects if (property.Value.Type == JTokenType.Object) continue; // Check for arrays else if (property.Value.Type == JTokenType.Array) { conn.SetList<string>(property.Name, property.Value.Values<string>(), true); } // Set value of the property else if (property.Value.Type == JTokenType.Date) conn.SetField(property.Name, ((DateTime)property.Value).ToString("o"), true); else conn.SetField(property.Name, property.Value.Type == JTokenType.Null ? null : property.Value.ToString(), true); } return conn; }
public async Task FreeTextSearchWithMinusOperatorTest() { var mandatoryToken = Unique.String; var optionalToken = Unique.String; // Create one object with only the mandatory token. var obj1 = new APObject("object"); obj1.Set<string>("stringfield", mandatoryToken); // Create one object with the mandatory token and optional token. var obj2 = new APObject("object"); obj2.Set<string>("stringfield", mandatoryToken + " " + optionalToken); // Create one object with only optional token var obj3 = new APObject("object"); obj3.Set<string>("stringfield", optionalToken); #if NET40 await TaskEx.WhenAll(obj1.SaveAsync(), obj2.SaveAsync(), obj3.SaveAsync()); #else await Task.WhenAll(obj1.SaveAsync(), obj2.SaveAsync(), obj3.SaveAsync()); #endif var results = await APObjects.FreeTextSearchAsync("object", mandatoryToken + " -" + optionalToken); Assert.IsTrue(results != null); Assert.IsTrue(results.Count == 1); Assert.IsTrue(results[0].Id == obj1.Id ); }