Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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)
                {
                }
            }
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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.");
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        public async Task GetUsersShouldReturnUserObjectsTest()
        {
            var created = await UserHelper.CreateNewUserAsync();

            var users = await APObjects.FindAllAsync("user");

            Assert.IsFalse(users.Exists(d => d is APUser == false));
        }
Ejemplo n.º 13
0
        public async Task GetDevicesShouldReturnDeviceObjectsTest()
        {
            var created = await DeviceHelper.CreateNewAsync();

            var devices = await APObjects.FindAllAsync("device");

            Assert.IsFalse(devices.Exists(d => d is APDevice == false));
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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");
        }
Ejemplo n.º 16
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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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));
        }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 25
0
        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)
            {
            }
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        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.");
        }