public async Task SetUp() { _settingService = GetService <ISettingService>(); _shippingSettings = GetService <ShippingSettings>(); _rewardPointsSettings = GetService <RewardPointsSettings>(); _commonSettings = GetService <CommonSettings>(); _shippingSettings.ActiveShippingRateComputationMethodSystemNames.Add("FixedRateTestShippingRateComputationMethod"); await _settingService.SaveSettingAsync(_shippingSettings); _paymentSettings = GetService <PaymentSettings>(); _paymentSettings.ActivePaymentMethodSystemNames.Add("Payments.TestMethod"); await _settingService.SaveSettingAsync(_paymentSettings); _customer = await GetService <IWorkContext>().GetCurrentCustomerAsync(); _rewardPointService = GetService <IRewardPointService>(); await _rewardPointService.AddRewardPointsHistoryEntryAsync(_customer, 10000, 1); _shoppingCartService = GetService <IShoppingCartService>(); _productService = GetService <IProductService>(); _addressService = GetService <IAddressService>(); _address = new Address(); await _addressService.InsertAddressAsync(_address); await GetService <ICustomerService>().InsertCustomerAddressAsync(_customer, _address); _orderSettings = GetService <OrderSettings>(); await _shoppingCartService.AddToCartAsync(_customer, await _productService.GetProductByIdAsync(1), ShoppingCartType.ShoppingCart, 1); await _shoppingCartService.AddToCartAsync(_customer, await _productService.GetProductByIdAsync(2), ShoppingCartType.ShoppingCart, 1); await _shoppingCartService.AddToCartAsync(_customer, await _productService.GetProductByIdAsync(3), ShoppingCartType.ShoppingCart, 1); _cart = await _shoppingCartService.GetShoppingCartAsync(_customer, ShoppingCartType.ShoppingCart); _paymentMethod = (await GetService <IPaymentPluginManager>().LoadActivePluginsAsync(new List <string> { "Payments.TestMethod" })).FirstOrDefault(); _orderService = GetService <IOrderService>(); _checkoutModelFactory = GetService <ICheckoutModelFactory>(); }
/// <summary> /// Register customer /// </summary> /// <param name="request">Request</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the result /// </returns> public virtual async Task <CustomerRegistrationResult> RegisterCustomerAsync(CustomerRegistrationRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (request.Customer == null) { throw new ArgumentException("Can't load current customer"); } var result = new CustomerRegistrationResult(); if (request.Customer.IsSearchEngineAccount()) { result.AddError("Search engine can't be registered"); return(result); } if (request.Customer.IsBackgroundTaskAccount()) { result.AddError("Background task account can't be registered"); return(result); } if (await _customerService.IsRegisteredAsync(request.Customer)) { result.AddError("Current customer is already registered"); return(result); } if (string.IsNullOrEmpty(request.Email)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.EmailIsNotProvided")); return(result); } if (!CommonHelper.IsValidEmail(request.Email)) { result.AddError(await _localizationService.GetResourceAsync("Common.WrongEmail")); return(result); } if (string.IsNullOrWhiteSpace(request.Password)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.PasswordIsNotProvided")); return(result); } if (_customerSettings.UsernamesEnabled && string.IsNullOrEmpty(request.Username)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.UsernameIsNotProvided")); return(result); } //validate unique user if (await _customerService.GetCustomerByEmailAsync(request.Email) != null) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.EmailAlreadyExists")); return(result); } if (_customerSettings.UsernamesEnabled && await _customerService.GetCustomerByUsernameAsync(request.Username) != null) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.UsernameAlreadyExists")); return(result); } //at this point request is valid request.Customer.Username = request.Username; request.Customer.Email = request.Email; var customerPassword = new CustomerPassword { CustomerId = request.Customer.Id, PasswordFormat = request.PasswordFormat, CreatedOnUtc = DateTime.UtcNow }; switch (request.PasswordFormat) { case PasswordFormat.Clear: customerPassword.Password = request.Password; break; case PasswordFormat.Encrypted: customerPassword.Password = _encryptionService.EncryptText(request.Password); break; case PasswordFormat.Hashed: var saltKey = _encryptionService.CreateSaltKey(NopCustomerServicesDefaults.PasswordSaltKeySize); customerPassword.PasswordSalt = saltKey; customerPassword.Password = _encryptionService.CreatePasswordHash(request.Password, saltKey, _customerSettings.HashedPasswordFormat); break; } await _customerService.InsertCustomerPasswordAsync(customerPassword); request.Customer.Active = request.IsApproved; //add to 'Registered' role var registeredRole = await _customerService.GetCustomerRoleBySystemNameAsync(NopCustomerDefaults.RegisteredRoleName); if (registeredRole == null) { throw new NopException("'Registered' role could not be loaded"); } await _customerService.AddCustomerRoleMappingAsync(new CustomerCustomerRoleMapping { CustomerId = request.Customer.Id, CustomerRoleId = registeredRole.Id }); //remove from 'Guests' role if (await _customerService.IsGuestAsync(request.Customer)) { var guestRole = await _customerService.GetCustomerRoleBySystemNameAsync(NopCustomerDefaults.GuestsRoleName); await _customerService.RemoveCustomerRoleMappingAsync(request.Customer, guestRole); } //add reward points for customer registration (if enabled) if (_rewardPointsSettings.Enabled && _rewardPointsSettings.PointsForRegistration > 0) { var endDate = _rewardPointsSettings.RegistrationPointsValidity > 0 ? (DateTime?)DateTime.UtcNow.AddDays(_rewardPointsSettings.RegistrationPointsValidity.Value) : null; await _rewardPointService.AddRewardPointsHistoryEntryAsync(request.Customer, _rewardPointsSettings.PointsForRegistration, request.StoreId, await _localizationService.GetResourceAsync("RewardPoints.Message.EarnedForRegistration"), endDate : endDate); } await _customerService.UpdateCustomerAsync(request.Customer); return(result); }