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); })); }
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)); })); }