public async Task CreateIdentityRequestHandler_Handle_Returns_InvalidUserKey()
        {
            AuthenticationContext.OpenInMemoryConnection();
            try
            {
                CreateIdentityResponse response;
                var request = new CreateIdentityRequest();

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    var handler = new CreateIdentityRequestHandler(context);
                    response = await handler.Handle(request);
                }

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    Assert.IsFalse(context.Users.Any());
                    Assert.IsNull(response.ActivationToken);
                    Assert.IsFalse(response.IsSuccess);
                    Assert.AreEqual(ErrorType.InvalidKey, response.ErrorType);
                }
            }
            finally
            {
                AuthenticationContext.CloseInMemoryConnection();
            }
        }
        public async Task CreateIdentityRequestHandler_Handle_Returns_EmailExists()
        {
            AuthenticationContext.OpenInMemoryConnection();
            try
            {
                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    var user = new User
                    {
                        Id   = Guid.NewGuid(),
                        Name = "John Doe"
                    };
                    context.Credentials.Add(new Credential
                    {
                        Id             = Guid.NewGuid(),
                        CredentialType = CredentialType.Email,
                        Identifier     = "*****@*****.**",
                        User           = user
                    });
                    context.Users.Add(user);

                    context.SaveChanges();
                }

                CreateIdentityResponse response;
                var request = new CreateIdentityRequest
                {
                    UserKey        = Guid.NewGuid(),
                    Identifier     = "*****@*****.**",
                    CredentialType = CredentialType.Email
                };

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    var handler = new CreateIdentityRequestHandler(context);
                    response = await handler.Handle(request);
                }

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    Assert.IsTrue(context.Users.Count() == 1);
                    Assert.IsNull(response.ActivationToken);
                    Assert.IsFalse(response.IsSuccess);
                    Assert.AreEqual(ErrorType.EmailExists, response.ErrorType);
                }
            }
            finally
            {
                AuthenticationContext.CloseInMemoryConnection();
            }
        }
        public async Task CreateIdentityRequestHandler_Handle_Returns_ActivationCode()
        {
            AuthenticationContext.OpenInMemoryConnection();
            try
            {
                CreateIdentityResponse response;
                var request = new CreateIdentityRequest
                {
                    CredentialType = CredentialType.Email,
                    Identifier     = "*****@*****.**",
                    Role           = Role.Donator,
                    Secret         = "password",
                    UserKey        = Guid.NewGuid(),
                    UserName       = "******"
                };

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    var handler = new CreateIdentityRequestHandler(context);
                    response = await handler.Handle(request);
                }

                using (var context = AuthenticationContext.GetInMemoryContext())
                {
                    Assert.IsNotNull(response.ActivationToken);
                    Assert.IsTrue(response.IsSuccess);
                    Assert.IsTrue(context.Users.Count() == 1);
                    Assert.AreEqual(request.UserName, context.Users.Single().Name);
                    Assert.AreEqual(request.UserKey, context.Users.Single().UserKey);
                    Assert.AreEqual(request.Role, context.Users.Single().Role);

                    Assert.IsTrue(context.Credentials.Count() == 1);
                    Assert.AreEqual(request.CredentialType, context.Credentials.Single().CredentialType);
                    Assert.AreEqual(request.Identifier, context.Credentials.Single().Identifier);
                    Assert.AreEqual(request.Secret, context.Credentials.Single().Secret);
                }
            }
            finally
            {
                AuthenticationContext.CloseInMemoryConnection();
            }
        }