Пример #1
0
        public async Task Handle_NormalValues_RegisterExternalUser()
        {
            // arrange
            var cancellationToken = new CancellationToken();
            var unitOfWorkFactory = new TransactionScopeUnitOfWorkFactory();
            var dbContextFactory  = new DefaultDbContextFactory();

            var identityServiceFactory = new IdentityServiceFactory();

            var classifierRepositoryFactoryBuilder = new ClassifierRepositoryFactoryBuilder(dbContextFactory)
            {
                UserTypeCode = ClassifierTypeCode.User
            };
            var classifierRepositoryFactory = classifierRepositoryFactoryBuilder.Build();

            // todo: test EmailConfirmationService
            var emailConfirmationServiceMock = new Mock <IEmailConfirmationService>();

            var handler = new ExternalRegisterHandler(new NullLogger <ExternalRegisterHandler>(), classifierRepositoryFactory,
                                                      identityServiceFactory.UserManager, identityServiceFactory.SignInManager, emailConfirmationServiceMock.Object);

            using (var _ = unitOfWorkFactory.Create())
            {
                // act
                var command = new ExternalRegister
                {
                    Email = "*****@*****.**"
                };

                var result = await handler.Handle(command, cancellationToken);

                // assert
                Assert.IsTrue(result.Success, string.Join(",", result.Message));
            }
        }
Пример #2
0
        public async Task Handle_NormalValues_RegisterUser()
        {
            // arrange
            var cancellationToken = new CancellationToken();
            var unitOfWorkFactory = new TransactionScopeUnitOfWorkFactory();
            var dbContextFactory  = new DefaultDbContextFactory();

            var appOptionsAccessorMock = new Mock <IOptionsMonitor <AppOptions> >();

            appOptionsAccessorMock.Setup(x => x.CurrentValue)
            .Returns(() => new AppOptions {
                AppUrl = "https://app.montr.net"
            });
            var appOptionsAccessor = appOptionsAccessorMock.Object;

            var identityServiceFactory = new IdentityServiceFactory();

            var classifierRepositoryFactoryBuilder = new ClassifierRepositoryFactoryBuilder(dbContextFactory)
            {
                UserTypeCode = ClassifierTypeCode.User
            };
            var classifierRepositoryFactory = classifierRepositoryFactoryBuilder.Build();

            // todo: test EmailConfirmationService

            /*
             * var dbMessageTemplateRepository = new DbMessageTemplateRepository(dbContextFactory);
             * var templateRenderer = new MustacheTemplateRenderer(dbMessageTemplateRepository);
             * var emailConfirmationService = new EmailConfirmationService(userManager, appUrlBuilder, new Mock<IEmailSender>().Object, templateRenderer);
             */

            var appUrlBuilder = new DefaultAppUrlBuilder(appOptionsAccessor);
            var emailConfirmationServiceMock = new Mock <IEmailConfirmationService>();

            var generator = new MasterDataDbGenerator(unitOfWorkFactory, dbContextFactory);

            var handler = new RegisterHandler(new NullLogger <RegisterHandler>(), classifierRepositoryFactory,
                                              identityServiceFactory.UserManager, identityServiceFactory.SignInManager, appUrlBuilder, emailConfirmationServiceMock.Object);

            using (var _ = unitOfWorkFactory.Create())
            {
                await generator.EnsureClassifierTypeRegistered(Numerator.GetDefaultMetadata(), cancellationToken);

                await generator.EnsureClassifierTypeRegistered(User.GetDefaultMetadata(), cancellationToken);

                // act
                var command = new Register
                {
                    Email    = "*****@*****.**",
                    Password = Guid.NewGuid().ToString()
                };

                var result = await handler.Handle(command, cancellationToken);

                // assert
                Assert.IsTrue(result.Success);
            }
        }
Пример #3
0
        public async Task ManageUserRoles_NormalValues_ReturnSuccess()
        {
            // arrange
            var cancellationToken = new CancellationToken();
            var unitOfWorkFactory = new TransactionScopeUnitOfWorkFactory();
            var dbContextFactory  = new DefaultDbContextFactory();

            var identityServiceFactory             = new IdentityServiceFactory();
            var classifierRepositoryFactoryBuilder = new ClassifierRepositoryFactoryBuilder(dbContextFactory);
            var classifierRepositoryFactory        = classifierRepositoryFactoryBuilder.Build();

            var roleRepository = classifierRepositoryFactory.GetNamedOrDefaultService(classifierRepositoryFactoryBuilder.RoleTypeCode);
            var userRepository = classifierRepositoryFactory.GetNamedOrDefaultService(classifierRepositoryFactoryBuilder.UserTypeCode);

            var generator = new MasterDataDbGenerator(unitOfWorkFactory, dbContextFactory);

            var addHandler    = new AddUserRolesHandler(new NullLogger <AddUserRolesHandler>(), unitOfWorkFactory, identityServiceFactory.UserManager);
            var removeHandler = new RemoveUserRolesHandler(new NullLogger <RemoveUserRolesHandler>(), unitOfWorkFactory, identityServiceFactory.UserManager);

            var roles = new[] { "test_role_1", "test_role_2", "test_role_3" };

            using (var _ = unitOfWorkFactory.Create())
            {
                await generator.EnsureClassifierTypeRegistered(Role.GetDefaultMetadata(), cancellationToken);

                await generator.EnsureClassifierTypeRegistered(User.GetDefaultMetadata(), cancellationToken);

                // arrange
                foreach (var name in roles)
                {
                    var role = await roleRepository.Insert(new Role { Uid = Guid.NewGuid(), Name = name }, cancellationToken);

                    Assert.IsTrue(role.Success, string.Join(",", role.Errors.SelectMany(x => x.Messages)));
                }

                // var dbRoles = identityServiceFactory.RoleManager.Roles.ToList();

                var user = await userRepository.Insert(new User { Uid = Guid.NewGuid(), UserName = "******" }, cancellationToken);

                Assert.IsTrue(user.Success, string.Join(",", user.Errors.SelectMany(x => x.Messages)));

                // ReSharper disable once PossibleInvalidOperationException
                var userUid = user.Uid.Value;

                // act - add roles
                var addResult = await addHandler.Handle(new AddUserRoles { UserUid = userUid, Roles = roles }, cancellationToken);

                Assert.IsTrue(addResult.Success, string.Join(",", user.Errors.SelectMany(x => x.Messages)));

                // act - remove roles
                var removeResult = await removeHandler.Handle(new RemoveUserRoles { UserUid = userUid, Roles = roles }, cancellationToken);

                Assert.IsTrue(removeResult.Success, string.Join(",", user.Errors.SelectMany(x => x.Messages)));
            }
        }
Пример #4
0
        public async Task ManageRole_NormalValues_ManageItems()
        {
            // arrange
            var cancellationToken = new CancellationToken();
            var unitOfWorkFactory = new TransactionScopeUnitOfWorkFactory();
            var dbContextFactory  = new DefaultDbContextFactory();
            var generator         = new MasterDataDbGenerator(unitOfWorkFactory, dbContextFactory);
            var classifierRepositoryFactoryBuilder = new ClassifierRepositoryFactoryBuilder(dbContextFactory);
            var classifierRepositoryFactory        = classifierRepositoryFactoryBuilder.Build();
            var insertHandler = new InsertClassifierHandler(unitOfWorkFactory, classifierRepositoryFactory);
            var updateHandler = new UpdateClassifierHandler(unitOfWorkFactory, classifierRepositoryFactory);
            var deleteHandler = new DeleteClassifierHandler(unitOfWorkFactory, classifierRepositoryFactory);

            using (var _ = unitOfWorkFactory.Create())
            {
                // arrange
                generator.TypeCode = classifierRepositoryFactoryBuilder.RoleTypeCode;

                await generator.InsertType(HierarchyType.None, cancellationToken);

                // act - insert
                var insertedIds = new List <Guid>();
                for (var i = 0; i < 3; i++)
                {
                    var insertResult = await insertHandler.Handle(new InsertClassifier
                    {
                        UserUid = generator.UserUid,
                        Item    = new Role
                        {
                            Type = generator.TypeCode,
                            Code = "00" + i,
                            Name = "00" + i + " - Test Role"
                        }
                    }, cancellationToken);

                    Assert.IsNotNull(insertResult);
                    Assert.IsTrue(insertResult.Success, string.Join(",", insertResult.Errors.SelectMany(x => x.Messages)));

                    // ReSharper disable once PossibleInvalidOperationException
                    insertedIds.Add(insertResult.Uid.Value);
                }

                var searchResult = await classifierRepositoryFactory.GetNamedOrDefaultService(generator.TypeCode)
                                   .Search(new ClassifierSearchRequest {
                    TypeCode = generator.TypeCode
                }, cancellationToken);

                // assert
                Assert.IsNotNull(searchResult);
                Assert.AreEqual(insertedIds.Count, searchResult.Rows.Count);

                // act - update
                foreach (var item in searchResult.Rows.Cast <Role>())
                {
                    item.Name = item.Name.Replace("Test", "Updated");

                    var updateCommand = new UpdateClassifier
                    {
                        UserUid = generator.UserUid,
                        Item    = item
                    };

                    var updateResult = await updateHandler.Handle(updateCommand, cancellationToken);

                    Assert.IsNotNull(updateResult);
                    Assert.IsTrue(updateResult.Success, string.Join(",", updateResult.Errors.SelectMany(x => x.Messages)));
                }

                searchResult = await classifierRepositoryFactory.GetNamedOrDefaultService(generator.TypeCode)
                               .Search(new ClassifierSearchRequest {
                    TypeCode = generator.TypeCode
                }, cancellationToken);

                // assert
                Assert.IsNotNull(searchResult);
                Assert.AreEqual(insertedIds.Count, searchResult.Rows.Count);
                Assert.AreEqual(0, searchResult.Rows.Count(x => x.Name.Contains("Test")));
                Assert.AreEqual(insertedIds.Count, searchResult.Rows.Count(x => x.Name.Contains("Updated")));

                // act - delete
                var command = new DeleteClassifier
                {
                    UserUid  = generator.UserUid,
                    TypeCode = generator.TypeCode,
                    Uids     = insertedIds.ToArray()
                };

                var deleteResult = await deleteHandler.Handle(command, cancellationToken);

                // assert
                Assert.IsNotNull(deleteResult);
                Assert.IsTrue(deleteResult.Success, string.Join(",", deleteResult.Errors?.SelectMany(x => x.Messages) ?? Array.Empty <string>()));
                Assert.AreEqual(insertedIds.Count, deleteResult.AffectedRows);

                searchResult = await classifierRepositoryFactory.GetNamedOrDefaultService(generator.TypeCode)
                               .Search(new ClassifierSearchRequest {
                    TypeCode = generator.TypeCode
                }, cancellationToken);

                // assert
                Assert.IsNotNull(searchResult);
                Assert.AreEqual(0, searchResult.Rows.Count);
            }
        }