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 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 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 async Task BulkDeleteObjectAsyncTest() { var a1 = await ObjectHelper.CreateNewAsync(); var a2 = await ObjectHelper.CreateNewAsync(); var a3 = await ObjectHelper.CreateNewAsync(); var a4 = await ObjectHelper.CreateNewAsync(); await APObjects.MultiDeleteAsync(a1.Type, a1.Id, a2.Id, a3.Id, a4.Id); var ids = new[] { a1.Id, a2.Id, a3.Id, a4.Id }; for (int i = 0; i < ids.Length; i++) { try { var copy = await APObjects.GetAsync("object", ids[i]); Assert.Fail("Operation should have faulted since the object has been deleted."); } catch (AppacitiveApiException) { } } }
public async Task TypeMappingTest() { Score s1 = new Score { Points = 100 }; s1.Badges.Add("novice"); s1.Badges.Add("alcolyte"); await s1.SaveAsync(); Score s2 = new Score { Points = 100 }; await s2.SaveAsync(); AppContext.Types.MapObjectType <Score>("score"); var saved = await APObjects.GetAsync("score", s1.Id); Assert.IsNotNull(saved); Assert.IsTrue(saved is Score); Assert.IsTrue(((Score)saved).Badges.SequenceEqual(new [] { "novice", "alcolyte" })); var scores = await APObjects.FindAllAsync("score"); foreach (var score in scores) { Assert.IsNotNull(score); Assert.IsTrue(score is Score); } }
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 ReadAclVerificationTest() { var user = await UserHelper.CreateNewUserAsync(); var obj = await ObjectHelper.CreateNewAsync(); await AppContext.LoginAsync(new UsernamePasswordCredentials(user.Username, user.Password)); try { var read = await APObjects.GetAsync("object", obj.Id, options : new ApiOptions { ApiKey = TestConfiguration.ClientApiKey }); Assert.Fail("Test should have failed as user does not have access on the object."); } catch (AccessDeniedException) { } obj.Acl.AllowUser(user.Id, Access.Read); await obj.SaveAsync(); var read2 = await APObjects.GetAsync("object", obj.Id, options : new ApiOptions { ApiKey = TestConfiguration.ClientApiKey }); Assert.IsNotNull(read2); }
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 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 FindNonExistantPageTest() { // Search var objects = await APObjects.FindAllAsync("object", Query.None, null, 10000, 500); Assert.IsNotNull(objects); Console.WriteLine("page:{0} pageSize:{1} total: {2}", objects.PageNumber, objects.PageSize, objects.TotalRecords); }
public async Task GetUsersShouldReturnUserObjectsTest() { var created = await UserHelper.CreateNewUserAsync(); var users = await APObjects.FindAllAsync("user"); Assert.IsFalse(users.Exists(d => d is APUser == false)); }
public async Task GetDevicesShouldReturnDeviceObjectsTest() { var created = await DeviceHelper.CreateNewAsync(); var devices = await APObjects.FindAllAsync("device"); Assert.IsFalse(devices.Exists(d => d is APDevice == false)); }
public async Task FindAllObjectsAsyncTest() { // Create the object var saved = await ObjectHelper.CreateNewAsync(); // Search var objects = await APObjects.FindAllAsync("object"); objects.ForEach(a => Console.WriteLine(a.Id)); Console.WriteLine("page:{0} pageSize:{1} total: {2}", objects.PageNumber, objects.PageSize, objects.TotalRecords); }
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 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 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 RefreshAsyncTest() { var obj = await ObjectHelper.CreateNewAsync(); var copy = await APObjects.GetAsync("object", obj.Id); var updatedValue = Unique.String; copy.Set("stringfield", updatedValue); await copy.SaveAsync(); Assert.AreNotEqual(obj.Get <string>("stringfield"), updatedValue); await obj.RefreshAsync(); Assert.AreEqual(obj.Get <string>("stringfield"), updatedValue); }
public async Task MultiGetObjectAsyncTest() { // Create new object var obj1 = await ObjectHelper.CreateNewAsync(); var obj2 = await ObjectHelper.CreateNewAsync(); // Get the created objects var enumerable = await APObjects.MultiGetAsync("object", new[] { obj1.Id, obj2.Id }); // Asserts Assert.IsNotNull(enumerable); var list = enumerable.Select(x => x.Id); Assert.IsTrue(list.Intersect(new[] { obj1.Id, obj2.Id }).Count() == 2); }
public async Task FindAllObjectsAsyncWithQueryTest() { // Create the object dynamic apObject = new APObject("object"); apObject.stringfield = Unique.String; dynamic obj = await ObjectHelper.CreateNewAsync(apObject as APObject); // Search string stringToSearch = obj.stringfield; var objects = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsEqualTo(stringToSearch)); 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 FindAllObjectsAsyncWithSpecialCharacterInQueryTest() { // Create the object dynamic apObject = new APObject("object"); apObject.stringfield = Unique.String + " 129764_TouricoTGS_Museum (tunnels in the city’s cliffs)"; //Unique.String + "&" + "12las@"; dynamic obj = await ObjectHelper.CreateNewAsync(apObject as APObject); // Search string stringToSearch = obj.stringfield; var objects = await APObjects.FindAllAsync("object", Query.Property("stringfield").IsEqualTo(stringToSearch)); 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 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 async Task FindObjectByDataTimeField() { var time = DateTime.Now; var obj = ObjectHelper.NewInstance(); obj.Set("datetimefield", time); await obj.SaveAsync(); #if (NET40) await TaskEx.Delay(1000); #else await Task.Delay(1000); #endif var results = await APObjects.FindAllAsync("object", Query.Property("datetimefield").IsGreaterThanEqualTo(time)); Assert.IsTrue(results.Count > 0); Assert.IsTrue(results.Exists(x => x.Id == obj.Id)); }
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 DeleteObjectAsyncTest() { // Create the object var saved = await ObjectHelper.CreateNewAsync(); // Delete the object await APObjects.DeleteAsync("object", saved.Id); // Try and get and confirm that the object is deleted. try { var copy = await APObjects.GetAsync("object", saved.Id); Assert.Fail("Operation should have faulted since the object has been deleted."); } catch (AppacitiveApiException) { } }
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 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 async Task UpdateObjectAttributeAsyncTest() { string attrToRemove = "one"; string attrPersist = "two"; string attrToAdd = "three"; // Create the object dynamic obj = new APObject("object"); decimal pi = 22.0m / 7.0m; obj.intfield = 1; obj.decimalfield = pi; //Add Attributes obj.SetAttribute(attrToRemove, attrToRemove); obj.SetAttribute(attrPersist, attrPersist); var saved = await ObjectHelper.CreateNewAsync(obj as APObject); // Get the newly created object var afterFirstUpdate = await APObjects.GetAsync("object", saved.Id); Assert.IsNotNull(afterFirstUpdate); Assert.IsTrue(afterFirstUpdate.Attributes.Count(tag => string.Equals(tag.Key, attrPersist, StringComparison.OrdinalIgnoreCase)) == 1); Assert.IsTrue(afterFirstUpdate.Attributes.Count(tag => string.Equals(tag.Key, attrToRemove, StringComparison.OrdinalIgnoreCase)) == 1); Assert.IsTrue(afterFirstUpdate.Attributes.Count() == 2); //Add/Remove Attribute afterFirstUpdate.RemoveAttribute(attrToRemove); afterFirstUpdate.SetAttribute(attrToAdd, attrToAdd); await afterFirstUpdate.SaveAsync(); var afterSecondUpdate = await APObjects.GetAsync("object", saved.Id); Assert.IsTrue(afterSecondUpdate.Attributes.Count(tag => string.Equals(tag.Key, attrPersist, StringComparison.OrdinalIgnoreCase)) == 1); Assert.IsTrue(afterSecondUpdate.Attributes.Count(tag => string.Equals(tag.Key, attrToAdd, StringComparison.OrdinalIgnoreCase)) == 1); Assert.IsTrue(afterSecondUpdate.Attributes.Count() == 2); //Cleanup await APObjects.DeleteAsync(afterSecondUpdate.Type, afterSecondUpdate.Id); }
public async Task QueryWithTagsMatchAllTest() { // Create the test object. APObject obj = new APObject("object"); var tags = new string[] { Unique.String, Unique.String }; obj.Set <string>("stringfield", Unique.String); obj.AddTags(tags); await obj.SaveAsync(); // Delay for index propagation on test bench. await Utilities.Delay(1500); // Search for the object with tags. var matches = await APObjects.FindAllAsync("object", Query.Tags.MatchAll(tags)); Assert.IsTrue(matches != null); Assert.IsTrue(matches.Count == 1); Assert.IsTrue(matches[0] != null); Assert.IsTrue(matches[0].Id == obj.Id); }
public async Task UpdateObjectPropertyAsyncTest() { // 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); // Get the newly created object dynamic copy = await APObjects.GetAsync("object", saved.Id); Assert.IsNotNull(copy); int intfield = copy.intfield; decimal decimalField = copy.decimalfield; Assert.IsTrue(intfield == 1); Assert.IsTrue(Math.Abs(decimalField - pi) < 0.0001m); // Update the object copy.intfield = 2; copy.decimalfield = 30m; copy.stringfield = "Test"; await copy.SaveAsync(); // Get updated copy and verify dynamic updated = await APObjects.GetAsync("object", saved.Id); Assert.IsNotNull(updated); intfield = updated.intfield; decimalField = updated.decimalfield; string stringField = updated.stringfield; Assert.IsTrue(intfield == 2, "intfield not updated."); Assert.IsTrue(decimalField == 30, "decimal field not updated."); Assert.IsTrue(stringField == "Test", "stringfield not updated."); }