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));
        }
Example #2
0
        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)));
        }