コード例 #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
ファイル: RegisterHandlerTests.cs プロジェクト: montr/montr
        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 void RegistrationTest()
        {
            // Arrange

            var service = IdentityServiceFactory.CreateFromMemory(new List <string> {
                "janeSmith"
            }, new List <string> {
                "john123."
            });

            var customProperties = new Dictionary <string, string>
            {
                { "Prop1", "Val1" },
                { "Prop2", "Val2" }
            };

            // Act

            var result1 = service.Authenticate("jsmith", "jane123.");
            var result2 = service.Register("jSmith", "jane123.", customProperties);
            var result3 = service.Authenticate("jsmith", "jane123.");
            var result4 = service.Authenticate("jSmith", "jane123.");
            var result5 = service.Register("jsmith", "jane123.");

            var result6 = service.Register("JaneSmith", "john123.");

            // Assert

            Assert.IsFalse(result1.IsSuccessful);
            Assert.AreEqual(AuthenticationError.UserNotFound, result1.Error);

            Assert.IsTrue(result2.IsSuccessful);
            Assert.IsNull(result2.Error);


            Assert.IsTrue(result3.IsSuccessful);
            Assert.IsNull(result3.Error);
            Assert.AreEqual("jSmith", result3.OriginalUserName);
            Assert.AreEqual(2, result3.Properties.Count);
            Assert.AreEqual(customProperties["Prop1"], result3.Properties["Prop1"]);
            Assert.AreEqual(customProperties["Prop2"], result3.Properties["Prop2"]);


            Assert.IsTrue(result4.IsSuccessful);
            Assert.IsNull(result4.Error);

            Assert.IsFalse(result5.IsSuccessful);
            Assert.AreEqual(RegistrationError.UserAlreadyExists, result5.Error);

            Assert.IsFalse(result6.IsSuccessful);
            Assert.AreEqual(RegistrationError.UserAlreadyExists, result6.Error);
        }
コード例 #5
0
        public void AuthenticationTest()
        {
            // Arrange

            var service = IdentityServiceFactory.CreateFromMemory(new List <string> {
                "jsmith"
            }, new List <string> {
                "jane123."
            });

            // Act

            var result1 = service.Authenticate("jsmitch", "jane123.");
            var result2 = service.Authenticate("jsmith", "jane123");
            var result3 = service.Authenticate("jsmith", "jane123.");
            var result4 = service.Authenticate("jSmith", "jane123.");
            var result5 = service.Authenticate("jSmith", "Jane123.");

            // Assert

            Assert.IsFalse(result1.IsSuccessful);
            Assert.AreEqual(AuthenticationError.UserNotFound, result1.Error);
            Assert.IsNull(result1.Properties);
            Assert.IsNull(result1.OriginalUserName);

            Assert.IsFalse(result2.IsSuccessful);
            Assert.AreEqual(AuthenticationError.InvalidPassword, result2.Error);

            Assert.IsTrue(result3.IsSuccessful);
            Assert.IsNull(result3.Error);
            Assert.IsFalse(result3.Properties.Any());

            Assert.IsTrue(result4.IsSuccessful);
            Assert.IsNull(result4.Error);

            Assert.IsFalse(result5.IsSuccessful);
            Assert.AreEqual(AuthenticationError.InvalidPassword, result5.Error);
        }
コード例 #6
0
        public void SavingToFileTest()
        {
            // Arrange

            var filePath         = $"{Guid.NewGuid()}.json";
            var customProperties = new Dictionary <string, string>
            {
                { "Prop1", "Val1" },
                { "Prop2", "Val2" }
            };

            var service1 = IdentityServiceFactory.CreateFromMemory(new List <string> {
                "jsmith"
            }, new List <string> {
                "jane123."
            });

            // Act

            var result1 = service1.Authenticate("JaneSmith", "john123.");
            var result2 = service1.Register("JaneSmith", "john123.");
            var result3 = service1.Register("JaneSmithX", "john123.X", customProperties);

            service1.SaveToJson(filePath);

            var fileContents = File.ReadAllText(filePath);

            var service2 = IdentityServiceFactory.CreateFromJson(filePath);

            var result4 = service2.Authenticate("jsmiTh", "jane123.");
            var result5 = service2.Authenticate("janESmith", "john123.");
            var result6 = service2.Authenticate("janeSmithX", "john123.X");

            // Assert

            Assert.IsFalse(result1.IsSuccessful);
            Assert.IsTrue(result2.IsSuccessful);
            Assert.IsTrue(result3.IsSuccessful);

            Assert.IsTrue(result4.IsSuccessful);
            Assert.IsTrue(result5.IsSuccessful);
            Assert.AreEqual("JaneSmith", result5.OriginalUserName);
            Assert.IsFalse(result5.Properties.Any());

            Assert.IsTrue(result6.IsSuccessful);
            Assert.AreEqual("JaneSmithX", result6.OriginalUserName);
            Assert.AreEqual(2, result6.Properties.Count);
            Assert.AreEqual(customProperties["Prop1"], result6.Properties["Prop1"]);
            Assert.AreEqual(customProperties["Prop2"], result6.Properties["Prop2"]);

            try
            {
                var fileJson = JToken.Parse(fileContents);

                AssertCamelCaseJson(fileJson);
            }
            catch (JsonException ex)
            {
                Assert.Fail($"Invalid JSON format: {ex.Message}");
            }


            Assert.ThrowsException <ArgumentException>(() => service1.SaveToJson(filePath));

            // Cleanup in case of success

            File.Delete(filePath);
        }
コード例 #7
0
 public GetTicketsForUserTests()
 {
     _context = DBContextFactory.Create();
     _identityServiceFactory = new IdentityServiceFactory();
 }
コード例 #8
0
 public CreateTicketTests()
 {
     _context            = DBContextFactory.Create();
     _userServiceFactory = new IdentityServiceFactory();
 }
コード例 #9
0
 public AddMessageTests()
 {
     _context            = DBContextFactory.Create();
     _userServiceFactory = new IdentityServiceFactory();
 }