public async Task UpdateUser_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "UpdateUser_WhenParamatersAreValidAndUserExistsToggleAdmin")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();

                await actContext.AddAsync(testRole);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                await command.ToggleAdmin(testUser.Id);

                var adminUser = await assertContext.Users.Where(user => user.Id == testUser.Id).FirstAsync();

                Assert.AreEqual(GlobalConstants.AdminRole.ToString(), adminUser.Role.ToString());
            }
        }
        public async Task ReturnCorrectData_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "ReturnCorrectData_WhenParamatersAreValidAndUserExistsToggleAdmin")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();

                await actContext.AddAsync(testRole);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                var result = await command.ToggleAdmin(testUser.Id);

                Assert.IsInstanceOfType(result, typeof(UserDTO));
                Assert.IsFalse(result.Deleted);
                Assert.AreEqual(testUser.UserName, result.Username);
                Assert.AreEqual(testUser.Id, result.UserId);
                Assert.IsTrue(result.Admin);
            }
        }
        public async Task ReturnCorrectData_WhenNoParametersArePassed()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "ReturnCorrectData_WhenNoParametersArePassed")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUserOne);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                var result = await command.GetAllUsers();

                Assert.IsInstanceOfType(result, typeof(IPagedList <UserDTO>));
                Assert.IsTrue(result.Count() == 1);
                Assert.AreEqual(testUserOne.UserName, result.First().Username);
                Assert.IsFalse(result.First().Admin);
                Assert.IsFalse(result.First().Deleted);
            }
        }
        public async Task UpdateUser_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "UpdateUser_WhenParamatersAreValidAndUserExistsDeleteUser")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                await command.DeleteUser(testUser.Id);

                var deletedUser = await assertContext.Users.Where(user => user.Id == testUser.Id).FirstAsync();

                Assert.IsTrue(deletedUser.IsDeleted);
            }
        }
        public async Task ReturnCorrectData_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "ReturnCorrectData_WhenParamatersAreValidAndUserExists")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            var foreignExchangeDTO = new ForeignExchangeDTO
            {
                Base  = GlobalConstants.BaseCurrency,
                Rates = Enum.GetNames(typeof(Currency)).ToDictionary(name => name, value => 0m)
            };

            foreignExchangeServiceMock.Setup(exchange => exchange.GetConvertionRates())
            .Returns(Task.FromResult(foreignExchangeDTO));

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testWallet);

                await actContext.SaveChangesAsync();

                testUser.Wallet = testWallet;
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                var result = await command.GetUserInfo(testUser.Id);

                Assert.IsInstanceOfType(result, typeof(UserInfoDTO));
                Assert.AreEqual(testUser.UserName, result.Username);
                Assert.AreEqual(testWallet.Balance, result.Balance);
                Assert.AreEqual(walletCurrency.ToString(), result.Currency);
                Assert.AreEqual(testUser.Id, result.UserId);
                Assert.IsFalse(result.Admin);
            }
        }
        public async Task RemoveFromUserRolesTable_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "RemoveFromUserRolesTable_WhenParamatersAreValidAndUserExists")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();

                await actContext.AddAsync(testRole);

                await actContext.SaveChangesAsync();

                var userRole = new IdentityUserRole <string>();
                userRole.UserId = testUser.Id;
                userRole.RoleId = testRole.Id;
                await actContext.AddAsync(userRole);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                await command.ToggleAdmin(testUser.Id);

                var updatedUser = await assertContext.Users.Where(user => user.Id == testUser.Id).FirstOrDefaultAsync();

                var assignedRole = await assertContext.Roles.Where(role => role.Id == testRole.Id).FirstOrDefaultAsync();

                var userRole = await assertContext.UserRoles.Where(ur => ur.UserId == updatedUser.Id && ur.RoleId == assignedRole.Id).FirstOrDefaultAsync();

                Assert.IsNull(userRole);
            }
        }
        public async Task ThrowEntityNotFoundException_WhenUserCurrencyIsNotInCurrencyRates()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "ThrowEntityNotFoundException_WhenUserCurrencyIsNotInCurrencyRates")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            var foreignExchangeDTO = new ForeignExchangeDTO
            {
                Base  = GlobalConstants.BaseCurrency,
                Rates = new Dictionary <string, decimal>()
            };

            foreignExchangeServiceMock.Setup(exchange => exchange.GetConvertionRates())
            .Returns(Task.FromResult(foreignExchangeDTO));

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testWallet);

                await actContext.SaveChangesAsync();

                testUser.Wallet = testWallet;
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                await Assert.ThrowsExceptionAsync <EntityNotFoundException>(async() => await command.GetUserInfo(testUser.Id));
            }
        }
Beispiel #8
0
        public async Task UpdateUser_WhenParamatersAreValidAndUserExists()
        {
            //Arrange
            var contextOptions = new DbContextOptionsBuilder <ItsAllAboutTheGameDbContext>()
                                 .UseInMemoryDatabase(databaseName: "UpdateUser_WhenParamatersAreValidAndUserExistsLockoutUser")
                                 .UseInternalServiceProvider(serviceProvider)
                                 .Options;

            dateTimeProviderMock
            .Setup(date => date.UtcNow)
            .Returns(DateTime.Parse(fakeDate));

            dateTimeProviderMock
            .Setup(date => date.Now)
            .Returns(DateTime.Parse(fakeDate));

            //Act
            using (var actContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                await actContext.AddAsync(testUser);

                await actContext.SaveChangesAsync();
            }

            //Assert
            using (var assertContext = new ItsAllAboutTheGameDbContext(contextOptions))
            {
                var command = new UserService(assertContext, foreignExchangeServiceMock.Object,
                                              walletServiceMock.Object, dateTimeProviderMock.Object);

                await command.LockoutUser(testUser.Id, lockoutDays);

                var lockedUser = await assertContext.Users.Where(user => user.Id == testUser.Id).FirstAsync();

                Assert.IsNotNull(lockedUser.LockoutEnd);
                Assert.AreEqual(DateTime.Parse(fakeDate).AddDays(1).Date, lockedUser.LockoutEnd.Value.Date);
            }
        }