Beispiel #1
0
 internal override Task <ParseObject> FetchAsyncInternal(Task toAwait, CancellationToken cancellationToken)
 {
     return(base.FetchAsyncInternal(toAwait, cancellationToken).OnSuccess(t => {
         if (!CurrentUserController.IsCurrent(this))
         {
             return Task <ParseObject> .FromResult(t.Result);
         }
         // If this is already the current user, refresh its state on disk.
         return SaveCurrentUserAsync(this).OnSuccess(_ => t.Result);
     }).Unwrap());
 }
Beispiel #2
0
 internal override Task SaveAsync(Task toAwait, CancellationToken cancellationToken)
 {
     lock (mutex) {
         if (ObjectId == null)
         {
             throw new InvalidOperationException("You must call SignUpAsync before calling SaveAsync.");
         }
         return(base.SaveAsync(toAwait, cancellationToken).OnSuccess(_ => {
             if (!CurrentUserController.IsCurrent(this))
             {
                 return Task.FromResult(0);
             }
             return SaveCurrentUserAsync(this);
         }).Unwrap());
     }
 }
Beispiel #3
0
        internal Task LogOutAsync(Task toAwait, CancellationToken cancellationToken)
        {
            string oldSessionToken = SessionToken;

            if (oldSessionToken == null)
            {
                return(Task.FromResult(0));
            }

            // Cleanup in-memory session.
            MutateState(mutableClone => {
                mutableClone.ServerData.Remove("sessionToken");
            });
            var revokeSessionTask = ParseSession.RevokeAsync(oldSessionToken, cancellationToken);

            return(Task.WhenAll(revokeSessionTask, CurrentUserController.LogOutAsync(cancellationToken)));
        }
Beispiel #4
0
        /// <summary>
        /// Setup the test
        /// </summary>
        public CurrentUserUnitTest()
        {
            DbContextOptions <DbAppContext> options      = new DbContextOptions <DbAppContext>();
            Mock <DbAppContext>             dbAppContext = new Mock <DbAppContext>(null, options);

            /*
             *
             * Here you will need to mock up the context.
             *
             * ItemType fakeItem = new ItemType(...);
             *
             * Mock<DbSet<ItemType>> mockList = MockDbSet.Create(fakeItem);
             *
             * dbAppContext.Setup(x => x.ModelEndpoint).Returns(mockItem.Object);
             *
             */

            CurrentUserService _service = new CurrentUserService(null, dbAppContext.Object);

            _CurrentUser = new CurrentUserController(_service);
        }
Beispiel #5
0
        /// <summary>
        /// Removes null values from authData (which exist temporarily for unlinking)
        /// </summary>
        private void CleanupAuthData()
        {
            lock (mutex) {
                if (!CurrentUserController.IsCurrent(this))
                {
                    return;
                }
                var authData = AuthData;

                if (authData == null)
                {
                    return;
                }

                foreach (var pair in new Dictionary <string, IDictionary <string, object> >(authData))
                {
                    if (pair.Value == null)
                    {
                        authData.Remove(pair.Key);
                    }
                }
            }
        }
Beispiel #6
0
        public CurrentUserControllerTests()
        {
            var userData = new List <User>
            {
                new User {
                    email = "*****@*****.**", name = "John Doe", password = "******"
                },
            }.AsQueryable();

            var userMockSet = new Mock <DbSet <User> >();

            userMockSet.As <IAsyncEnumerable <User> >().Setup(m => m.GetEnumerator()).Returns(new TestAsyncEnumerator <User>(userData.GetEnumerator()));
            userMockSet.As <IQueryable <User> >().Setup(m => m.Provider).Returns(new TestAsyncQueryProvider <User>(userData.Provider));
            userMockSet.As <IQueryable <User> >().Setup(m => m.Expression).Returns(userData.Expression);
            userMockSet.As <IQueryable <User> >().Setup(m => m.ElementType).Returns(userData.ElementType);
            userMockSet.As <IQueryable <User> >().Setup(m => m.GetEnumerator()).Returns(userData.GetEnumerator());
            _userRepositoryMock.Setup(m => m.Query()).Returns(userMockSet.Object.AsQueryable());
            var mockCtx = new Mock <IdeasDbContext>();

            mockCtx.SetupGet(c => c.Users).Returns(userMockSet.Object);

            _currentUserController = new CurrentUserController(_userRepositoryMock.Object);
        }
Beispiel #7
0
 internal static Task <string> GetCurrentSessionTokenAsync(CancellationToken cancellationToken = default(CancellationToken))
 {
     return(CurrentUserController.GetCurrentSessionTokenAsync(cancellationToken));
 }
Beispiel #8
0
 internal static void ClearInMemoryUser()
 {
     CurrentUserController.ClearFromMemory();
 }
Beispiel #9
0
 private static Task SaveCurrentUserAsync(ParseUser user, CancellationToken cancellationToken)
 {
     return(CurrentUserController.SetAsync(user, cancellationToken));
 }
Beispiel #10
0
 /// <summary>
 /// Gets the currently logged in ParseUser with a valid session, either from memory or disk
 /// if necessary, asynchronously.
 /// </summary>
 internal static Task <ParseUser> GetCurrentUserAsync(CancellationToken cancellationToken)
 {
     return(CurrentUserController.GetAsync(cancellationToken));
 }
        public void Setup()
        {
            ServiceCollection services = new();

            services.AddDbContext <LibraryContext>(
                // using package Microsoft.EntityFrameworkCore.InMemory
                opt => opt.UseInMemoryDatabase(databaseName: "LibraryAPI"),
                ServiceLifetime.Scoped,
                ServiceLifetime.Scoped
                );

            ServiceProvider serviceProvider = services.BuildServiceProvider();

            testService   = serviceProvider.GetService <CurrentUserService>();
            resultService = serviceProvider.GetService <ResultService>();
            var context = serviceProvider.GetService <LibraryContext>();

            // Create in-memory data
            var user1 = new User {
                Id = Guid.NewGuid(), Username = "******", Password = "******", Role = UserRole.User
            };
            var user2 = new User {
                Id = Guid.NewGuid(), Username = "******", Password = "******", Role = UserRole.User
            };
            var user3 = new User {
                Id = Guid.NewGuid(), Username = "******", Password = "******", Role = UserRole.User
            };

            context.Users.Add(user1);
            context.Users.Add(user2);
            context.Users.Add(user3);

            var cate1 = new Category {
                Id = Guid.NewGuid(), Name = "Fantasy"
            };
            var cate2 = new Category {
                Id = Guid.NewGuid(), Name = "Action"
            };
            var cate3 = new Category {
                Id = Guid.NewGuid(), Name = "Sci-fi"
            };

            context.Categories.Add(cate1);
            context.Categories.Add(cate2);
            context.Categories.Add(cate3);

            var book1 = new Book {
                Id = bookId1, Title = "Frost", Author = "Erin LaTimer", CategoryId = cate1.Id
            };
            var book2 = new Book {
                Id = bookId2, Title = "Flame", Author = "Erin LaTimer", CategoryId = cate1.Id
            };
            var book3 = new Book {
                Id = bookId3, Title = "Harry Potter and the Philosopher's Stone", Author = "J.K. Rowling", CategoryId = cate1.Id
            };
            var book4 = new Book {
                Id = bookId4, Title = "Ready Player One", Author = "Ernest Cline", CategoryId = cate2.Id
            };
            var book5 = new Book {
                Id = bookId5, Title = "Ready Player Two", Author = "Ernest Cline", CategoryId = cate2.Id
            };
            var book6 = new Book {
                Id = bookId6, Title = "Ender's Game", Author = "Orson Scott Card", CategoryId = cate3.Id
            };

            context.Books.Add(book1);
            context.Books.Add(book2);
            context.Books.Add(book3);
            context.Books.Add(book4);
            context.Books.Add(book5);
            context.Books.Add(book6);

            controller = new CurrentUserController(testService, resultService);
        }
 public CurrentUserControllerTests()
 {
     TimeService.UtcNow = new DateTime(2019, 2, 1, 12, 3, 0);
     _controller        = new CurrentUserController(Db, UserEventsService, MockLogger.Get <CurrentUserController>(), TimeService);
 }