public void Create_NewIdentityUser_HasIdAssigned()
		{
			var user = new IdentityUser();

			var parsed = user.Id.SafeParseObjectId();
			Expect(parsed, Is.Not.Null);
			Expect(parsed, Is.Not.EqualTo(ObjectId.Empty));
		}
		public void ToBsonDocument_IdAssigned_MapsToBsonObjectId()
		{
			var user = new IdentityUser();
			user.SetId(ObjectId.GenerateNewId().ToString());

			var document = user.ToBsonDocument();

			Expect(document["_id"], Is.TypeOf<BsonObjectId>());
		}
		public void IncrementAccessFailedCount_ReturnsNewCount()
		{
			var store = new UserStore<IdentityUser>(null);
			var user = new IdentityUser {UserName = "******"};

			var count = store.IncrementAccessFailedCountAsync(user);

			Expect(count.Result, Is.EqualTo(1));
		}
		public void Create_NewUser_HasNoClaims()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			var claims = manager.GetClaims(user.Id);

			Expect(claims, Is.Empty);
		}
		public void GetSecurityStamp_NewUser_ReturnsStamp()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);

			var stamp = manager.GetSecurityStamp(user.Id);

			Expect(stamp, Is.Not.Null);
		}
		public void HasPassword_NoPassword_ReturnsFalse()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			var hasPassword = manager.HasPassword(user.Id);

			Expect(hasPassword, Is.False);
		}
		public void SetEmail_SetsEmail()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			manager.SetEmail(user.Id, "email");

			Expect(manager.GetEmail(user.Id), Is.EqualTo("email"));
		}
		public void SetPhoneNumber_StoresPhoneNumber()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			manager.SetPhoneNumber(user.Id, PhoneNumber);

			Expect(manager.GetPhoneNumber(user.Id), Is.EqualTo(PhoneNumber));
		}
		public void Create_NewUser_HasNoEmail()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			var email = manager.GetEmail(user.Id);

			Expect(email, Is.Null);
		}
		public void Create_NewUser_HasSecurityStamp()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};

			manager.Create(user);

			var savedUser = Users.FindAll().Single();
			Expect(savedUser.SecurityStamp, Is.Not.Null);
		}
		public void SetTwoFactorEnabled()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			manager.SetTwoFactorEnabled(user.Id, true);

			Expect(manager.GetTwoFactorEnabled(user.Id));
		}
		public void GetRoles_UserHasNoRoles_ReturnsNoRoles()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);

			var roles = manager.GetRoles(user.Id);

			Expect(roles, Is.Empty);
		}
		public void Create_NewUser_IsNotEmailConfirmed()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);

			var isConfirmed = manager.IsEmailConfirmed(user.Id);

			Expect(isConfirmed, Is.False);
		}
		public void Create_NullLogins_DoesNotSerializeLogins()
		{
			// serialized nulls can cause havoc in deserialization, overwriting the constructor's initial empty list 
			var user = new IdentityUser();
			user.Logins = null;

			var document = user.ToBsonDocument();

			Expect(document.Contains("Logins"), Is.False);
		}
		public void Create_NoPassword_DoesNotSerializePasswordField()
		{
			// if a particular consuming application doesn't intend to use passwords, there's no reason to store a null entry except for padding concerns, if that is the case then the consumer may want to create a custom class map to serialize as desired.

			var user = new IdentityUser();

			var document = user.ToBsonDocument();

			Expect(document.Contains("PasswordHash"), Is.False);
		}
		public void FindUserByEmail_ReturnsUser()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			Expect(manager.FindByEmail("email"), Is.Null);

			manager.SetEmail(user.Id, "email");

			Expect(manager.FindByEmail("email"), Is.Not.Null);
		}
		public void RemoveClaim_RemovesExistingClaim()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			manager.AddClaim(user.Id, new Claim("type", "value"));

			manager.RemoveClaim(user.Id, new Claim("type", "value"));

			Expect(manager.GetClaims(user.Id), Is.Empty);
		}
		public void AddPassword_NewPassword_CanFindUserByPassword()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);

			manager.AddPassword(user.Id, "testtest");

			var findUserByPassword = manager.Find("bob", "testtest");
			Expect(findUserByPassword, Is.Not.Null);
		}
		public void RemoveClaim_DifferentValue_DoesNotRemoveClaim()
		{
			var user = new IdentityUser { UserName = "******" };
			var manager = GetUserManager();
			manager.Create(user);
			manager.AddClaim(user.Id, new Claim("type", "value"));

			manager.RemoveClaim(user.Id, new Claim("type", "otherValue"));

			Expect(manager.GetClaims(user.Id), Is.Not.Empty);
		}
		public void Create_NewUser_Saves()
		{
			var userName = "******";
			var user = new IdentityUser {UserName = userName};
			var manager = GetUserManager();

			manager.Create(user);

			var savedUser = Users.FindAll().Single();
			Expect(savedUser.UserName, Is.EqualTo(user.UserName));
		}
		public void ClearTwoFactorEnabled_PreviouslyEnabled_NotEnabled()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			manager.SetTwoFactorEnabled(user.Id, true);

			manager.SetTwoFactorEnabled(user.Id, false);

			Expect(manager.GetTwoFactorEnabled(user.Id), Is.False);
		}
		public void AccessFailed_IncrementsAccessFailedCount()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);
			manager.MaxFailedAccessAttemptsBeforeLockout = 3;

			manager.AccessFailed(user.Id);

			Expect(manager.GetAccessFailedCount(user.Id), Is.EqualTo(1));
		}
		public void AccessFailed_NotOverMaxFailures_NoLockoutEndDate()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);
			manager.MaxFailedAccessAttemptsBeforeLockout = 3;

			manager.AccessFailed(user.Id);

			Expect(manager.GetLockoutEndDate(user.Id), Is.EqualTo(DateTimeOffset.MinValue));
		}
		public void Delete_ExistingUser_Removes()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			Expect(Users.FindAll(), Is.Not.Empty);

			manager.Delete(user);

			Expect(Users.FindAll(), Is.Empty);
		}
		public void ConfirmPhoneNumber_StoresPhoneNumberConfirmed()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			var token = manager.GenerateChangePhoneNumberToken(user.Id, PhoneNumber);

			manager.ChangePhoneNumber(user.Id, PhoneNumber, token);

			Expect(manager.IsPhoneNumberConfirmed(user.Id));
		}
		public void ChangePhoneNumber_OriginalPhoneNumberWasConfirmed_NotPhoneNumberConfirmed()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			var token = manager.GenerateChangePhoneNumberToken(user.Id, PhoneNumber);
			manager.ChangePhoneNumber(user.Id, PhoneNumber, token);

			manager.SetPhoneNumber(user.Id, PhoneNumber);

			Expect(manager.IsPhoneNumberConfirmed(user.Id), Is.False);
		}
		public void SetLockoutEnabled()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);

			manager.SetLockoutEnabled(user.Id, true);
			Expect(manager.GetLockoutEnabled(user.Id));

			manager.SetLockoutEnabled(user.Id, false);
			Expect(manager.GetLockoutEnabled(user.Id), Is.False);
		}
		public void RemovePassword_UserWithPassword_SetsPasswordNull()
		{
			var user = new IdentityUser {UserName = "******"};
			var manager = GetUserManager();
			manager.Create(user);
			manager.AddPassword(user.Id, "testtest");

			manager.RemovePassword(user.Id);

			var savedUser = Users.FindAll().Single();
			Expect(savedUser.PasswordHash, Is.Null);
		}
		public void AddRole_Adds()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);

			manager.AddToRole(user.Id, "role");

			var savedUser = Users.FindAll().Single();
			Expect(savedUser.Roles, Is.EquivalentTo(new[] {"role"}));
			Expect(manager.IsInRole(user.Id, "role"), Is.True);
		}
		public void ResetAccessFailed_AfterAnAccessFailed_SetsToZero()
		{
			var manager = GetUserManager();
			var user = new IdentityUser {UserName = "******"};
			manager.Create(user);
			manager.MaxFailedAccessAttemptsBeforeLockout = 3;
			manager.AccessFailed(user.Id);

			manager.ResetAccessFailedCount(user.Id);

			Expect(manager.GetAccessFailedCount(user.Id), Is.EqualTo(0));
		}