コード例 #1
0
        public Task TestSave()
        {
            Mock <IParseCommandRunner> mockRunner = CreateMockRunner(new Tuple <HttpStatusCode, IDictionary <string, object> >(HttpStatusCode.Accepted, new Dictionary <string, object> {
                ["__type"] = "Object", ["className"] = "Corgi", ["objectId"] = "st4nl3yW", ["doge"] = "isShibaInu", ["createdAt"] = "2015-09-18T18:11:28.943Z"
            }));

            return(new ParseObjectController(mockRunner.Object).SaveAsync(new MutableObjectState {
                ClassName = "Corgi", ObjectId = "st4nl3yW", ServerData = new Dictionary <string, object> {
                    ["corgi"] = "isNotDoge"
                }
            }, new Dictionary <string, IParseFieldOperation> {
                ["gogo"] = new Mock <IParseFieldOperation> {
                }.Object
            }, null, CancellationToken.None).ContinueWith(t =>
            {
                Assert.IsFalse(t.IsFaulted);
                Assert.IsFalse(t.IsCanceled);

                mockRunner.Verify(obj => obj.RunCommandAsync(It.Is <ParseCommand>(command => command.Uri.AbsolutePath == "/1/classes/Corgi/st4nl3yW"), It.IsAny <IProgress <ParseUploadProgressEventArgs> >(), It.IsAny <IProgress <ParseDownloadProgressEventArgs> >(), It.IsAny <CancellationToken>()), Times.Exactly(1));

                IObjectState newState = t.Result;
                Assert.AreEqual("isShibaInu", newState["doge"]);
                Assert.IsFalse(newState.ContainsKey("corgi"));
                Assert.IsFalse(newState.ContainsKey("gogo"));
                Assert.IsNotNull(newState.CreatedAt);
                Assert.IsNotNull(newState.UpdatedAt);
            }));
        }
コード例 #2
0
        public Task TestSaveAllManyObjects()
        {
            List <IObjectState> states = new List <IObjectState>();

            for (int i = 0; i < 102; ++i)
            {
                states.Add(new MutableObjectState
                {
                    ClassName  = "Corgi",
                    ObjectId   = "st4nl3yW" + i,
                    ServerData = new Dictionary <string, object> {
                        ["corgi"] = "isNotDoge"
                    }
                });
            }
            List <IDictionary <string, IParseFieldOperation> > operationsList = new List <IDictionary <string, IParseFieldOperation> >();

            for (int i = 0; i < 102; ++i)
            {
                operationsList.Add(new Dictionary <string, IParseFieldOperation> {
                    ["gogo"] = new Mock <IParseFieldOperation>().Object
                });
            }

            // Make multiple response since the batch will be splitted.
            List <IDictionary <string, object> > results = new List <IDictionary <string, object> >();

            for (int i = 0; i < 50; ++i)
            {
                results.Add(new Dictionary <string, object>
                {
                    ["success"] = new Dictionary <string, object>
                    {
                        ["__type"]    = "Object",
                        ["className"] = "Corgi",
                        ["objectId"]  = "st4nl3yW" + i,
                        ["doge"]      = "isShibaInu",
                        ["createdAt"] = "2015-09-18T18:11:28.943Z"
                    }
                });
            }
            Dictionary <string, object> responseDict = new Dictionary <string, object> {
                ["results"] = results
            };
            Tuple <HttpStatusCode, IDictionary <string, object> > response = new Tuple <HttpStatusCode, IDictionary <string, object> >(HttpStatusCode.OK, responseDict);

            List <IDictionary <string, object> > results2 = new List <IDictionary <string, object> >();

            for (int i = 0; i < 2; ++i)
            {
                results2.Add(new Dictionary <string, object>
                {
                    ["success"] = new Dictionary <string, object>
                    {
                        ["__type"]    = "Object",
                        ["className"] = "Corgi",
                        ["objectId"]  = "st4nl3yW" + i,
                        ["doge"]      = "isShibaInu",
                        ["createdAt"] = "2015-09-18T18:11:28.943Z"
                    }
                });
            }
            Dictionary <string, object> responseDict2 = new Dictionary <string, object> {
                ["results"] = results2
            };
            Tuple <HttpStatusCode, IDictionary <string, object> > response2 = new Tuple <HttpStatusCode, IDictionary <string, object> >(HttpStatusCode.OK, responseDict2);

            Mock <IParseCommandRunner> mockRunner = new Mock <IParseCommandRunner> {
            };

            mockRunner.SetupSequence(obj => obj.RunCommandAsync(It.IsAny <ParseCommand>(), It.IsAny <IProgress <ParseUploadProgressEventArgs> >(), It.IsAny <IProgress <ParseDownloadProgressEventArgs> >(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(response)).Returns(Task.FromResult(response)).Returns(Task.FromResult(response2));

            ParseObjectController        controller = new ParseObjectController(mockRunner.Object);
            IList <Task <IObjectState> > tasks      = controller.SaveAllAsync(states, operationsList, null, CancellationToken.None);

            return(Task.WhenAll(tasks).ContinueWith(_ =>
            {
                Assert.IsTrue(tasks.All(task => task.IsCompleted && !task.IsCanceled && !task.IsFaulted));

                for (int i = 0; i < 102; ++i)
                {
                    IObjectState serverState = tasks[i].Result;
                    Assert.AreEqual("st4nl3yW" + (i % 50), serverState.ObjectId);
                    Assert.IsFalse(serverState.ContainsKey("gogo"));
                    Assert.IsFalse(serverState.ContainsKey("corgi"));
                    Assert.AreEqual("isShibaInu", serverState["doge"]);
                    Assert.IsNotNull(serverState.CreatedAt);
                    Assert.IsNotNull(serverState.UpdatedAt);
                }

                mockRunner.Verify(obj => obj.RunCommandAsync(It.Is <ParseCommand>(command => command.Uri.AbsolutePath == "/1/batch"), It.IsAny <IProgress <ParseUploadProgressEventArgs> >(), It.IsAny <IProgress <ParseDownloadProgressEventArgs> >(), It.IsAny <CancellationToken>()), Times.Exactly(3));
            }));
        }