public void Signup_NullPassword_ThrowsException()
        {
            // prepare
            string validEmail      = "*****@*****.**";
            string invalidPassword = null;
            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.Signup(validEmail, invalidPassword);
        }
        public void Signup_InvalidEmailAddress_ThrowsException()
        {
            // prepare
            string invalidEmail  = "email@hello";
            string validPassword = "******";
            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.Signup(invalidEmail, validPassword);
        }
        public void IsEmailAddressAlreadyUsed_ThrowsException() // why the name is voilating convension
        {
            //prepare
            string usedEmail = "*****@*****.**";

            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.IsEmailAddressAlreadyUsed(usedEmail); // no mocking is used, you need to check in database to confirm email already used or not
        }
        [ExpectedException(typeof(ArgumentException))]                              // wrong exception type used
        public void VerifySignupEmailAddress_NullVerificationCode_ThrowsException() // name having ending underscore, why
        {
            //prepare
            string validEmail = "*****@*****.**";
            string invalidVerificationCode = null;

            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.VerifySignupEmailAddress(validEmail, invalidVerificationCode);
        }
        [ExpectedException(typeof(ArgumentException))] // wrong exception type used
        public void VerifySignupEmailAddress_EmptyVerificationCode_ThrowsException()
        {
            //prepare
            string validEmail = "*****@*****.**";
            string invalidVerificationCode = string.Empty;

            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.VerifySignupEmailAddress(validEmail, invalidVerificationCode);
        }
        public void VerifySignupEmailAddress_ValidVerificationCode() // name format violation
        {
            //prepare
            string validEmail            = "*****@*****.**";
            string validVerificationCode = "123";

            var repositoryMock = _kernel.GetMock <IMembershipRepository>();

            _kernel.GetMock <IMembershipRepositoryFactory>().Setup(x => x.CreateMembershipRepository(UserTypeOptions.ShopOwner))
            .Returns(repositoryMock.Object);

            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();


            // act
            shopOwnerRegistrationService.VerifySignupEmailAddress(validEmail, validVerificationCode);

            // assert
            repositoryMock.VerifyAll();
        }
        public void Signup_ValidEmailAndPassword_CallsRepositoryAddMethod()
        {
            // prepare
            string validEmail    = "*****@*****.**";
            string validPassword = "******";

            var repositoryMock = _kernel.GetMock <IMembershipRepository>();

            repositoryMock.Setup(x => x.Add(It.Is <ShopOwner>(y => y.EmailAddress == validEmail &&
                                                              !String.IsNullOrWhiteSpace(y.EncryptedPassword)))).Verifiable();

            _kernel.GetMock <IMembershipRepositoryFactory>().Setup(x => x.CreateMembershipRepository(UserTypeOptions.ShopOwner))
            .Returns(repositoryMock.Object);

            IShopOwnerRegistrationService shopOwnerRegistrationService = _kernel.Get <IShopOwnerRegistrationService>();

            // act
            shopOwnerRegistrationService.Signup(validEmail, validPassword);

            // assert
            repositoryMock.VerifyAll();
        }