public Task <ParseUser> GetAsync(CancellationToken cancellationToken) { ParseUser cachedCurrent; lock (mutex) { cachedCurrent = CurrentUser; } if (cachedCurrent != null) { return(Task <ParseUser> .FromResult(cachedCurrent)); } return(taskQueue.Enqueue(toAwait => { return toAwait.ContinueWith(t => { object temp; ParseClient.ApplicationSettings.TryGetValue("CurrentUser", out temp); var userDataString = temp as string; ParseUser user = null; if (userDataString != null) { var userData = Json.Parse(userDataString) as IDictionary <string, object>; user = ParseObject.CreateWithoutData <ParseUser>(null); user.HandleFetchResult(ParseObjectCoder.Instance.Decode(userData, ParseDecoder.Instance)); } CurrentUser = user; return user; }); }, cancellationToken)); }
public Task TestCurrentSessionToken() { Mock <IStorageController> storageController = new Mock <IStorageController>(); Mock <IStorageDictionary <string, object> > mockedStorage = new Mock <IStorageDictionary <string, object> >(); ParseCurrentUserController controller = new ParseCurrentUserController(storageController.Object); storageController.Setup(c => c.LoadAsync()).Returns(Task.FromResult(mockedStorage.Object)); return(controller.GetCurrentSessionTokenAsync(CancellationToken.None).OnSuccess(t => { Assert.IsNull(t.Result); // We should probably mock this. ParseUser user = ParseObject.CreateWithoutData <ParseUser>(null); user.HandleFetchResult(new MutableObjectState { ServerData = new Dictionary <string, object> { ["sessionToken"] = "randomString" } }); return controller.SetAsync(user, CancellationToken.None); }).Unwrap() .OnSuccess(_ => controller.GetCurrentSessionTokenAsync(CancellationToken.None)).Unwrap() .OnSuccess(t => Assert.AreEqual("randomString", t.Result))); }