public Task TestFetch() { var state = new MutableObjectState { ClassName = "Corgi", ObjectId = "st4nl3yW", ServerData = new Dictionary<string, object>() { { "corgi", "isNotDoge" } } }; var responseDict = new Dictionary<string, object>() { { "__type", "Object" }, { "className", "Corgi" }, { "objectId", "st4nl3yW" }, { "doge", "isShibaInu" }, { "createdAt", "2015-09-18T18:11:28.943Z" } }; var response = new Tuple<HttpStatusCode, IDictionary<string, object>>(HttpStatusCode.Accepted, responseDict); var mockRunner = CreateMockRunner(response); var controller = new ParseObjectController(mockRunner.Object); return controller.FetchAsync(state, 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)); var newState = t.Result; Assert.AreEqual("isShibaInu", newState["doge"]); Assert.False(newState.ContainsKey("corgi")); Assert.NotNull(newState.CreatedAt); Assert.NotNull(newState.UpdatedAt); }); }