コード例 #1
0
        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);
        }
コード例 #2
0
 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);
 }
コード例 #3
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);
        }
コード例 #4
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);
        }
コード例 #5
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);
        }
コード例 #6
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.");
        }
コード例 #7
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);
        }
コード例 #8
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);
        }
コード例 #9
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);
        }
コード例 #10
0
        public void AddItemsToNullPropertyTest()
        {
            APObject obj = new APObject("object");

            obj.AddItems("field1", 5, 6);
            Assert.IsTrue(obj.GetList <string>("field1").Count() == 2);
        }
コード例 #11
0
        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;
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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");
        }
コード例 #14
0
        public async Task <List <Model.Hotel> > List()
        {
            var hotelList = new List <Model.Hotel>();
            var apiHotel  = new APObject("hotel");



            return(hotelList);
        }
コード例 #15
0
        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");
        }
コード例 #16
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());
            }
        }
コード例 #17
0
        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);
        }
コード例 #18
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);
 }
コード例 #19
0
        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.");
        }
コード例 #20
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);
        }
コード例 #21
0
        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);
        }
コード例 #22
0
 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);
 }
コード例 #23
0
 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);
 }
コード例 #24
0
        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"));
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        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);
        }
コード例 #27
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);
        }
コード例 #28
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");
        }
コード例 #29
0
        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.");

        }
コード例 #30
0
        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);
        }
コード例 #31
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);
        }
コード例 #32
0
        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);
        }
コード例 #33
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);
        }
コード例 #34
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);
 }
コード例 #35
0
        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)
            {
            }
        }
コード例 #36
0
        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);
        }
コード例 #37
0
        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));
        }
コード例 #38
0
        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);
        }
コード例 #39
0
        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);
        }
コード例 #40
0
 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"));
 }
コード例 #41
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);
        }
コード例 #42
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);
        }
コード例 #43
0
 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)
     { }
 }
コード例 #44
0
 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;
 }
コード例 #45
0
 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);
     }
 }
コード例 #46
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);
        }
コード例 #47
0
 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);
 }
コード例 #48
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);
        }
コード例 #49
0
 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);
 }
コード例 #50
0
 public Score(APObject obj)
     : base(obj)
 {
 }
コード例 #51
0
        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);
        }
コード例 #52
0
        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);
        }
コード例 #53
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);
        }
コード例 #54
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);
        }
コード例 #55
0
        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)
            {   
            }
        }
コード例 #56
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);
        }
コード例 #57
0
        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);
        }
コード例 #58
0
        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;
        }
コード例 #60
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 );
        }