public void GivenThereIsAccountWithPasswordInRoleWithFullnameAnd( string email, string password, string roleName, string firstName, string lastName) { Mapper.AssertConfigurationIsValid(); using (var context = new ShopAnyWareSql()) { var user = context.Users.Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email); if (user != null) { context.Users.Remove(user); context.SaveChanges(); } var role = context.Roles.SingleOrDefault(r => r.Name == roleName) ?? context.Roles.Add(new Role { Name = roleName }); var profile = new Profile { FirstName = firstName, LastName = lastName }; context.Profiles.Add(profile); user = new User { Email = email, Password = password, Profile = profile, Wallet = new Wallet { Amount = 0m }, Roles = new List<Role> { role } }; context.Users.Add(user); context.SaveChanges(); ScenarioContext.Current.Set(user); } }
/// <summary> /// Populate DB with currencies. /// </summary> /// <param name="context"> /// The context. /// </param> public static void Populate(ShopAnyWareSql context) { context.Currencies.Add( new Currency { AlphabeticCode = "USD", Entity = "UNITED STATES", Name = "US Dollar", NumericCode = "840", MinorUnit = 2 }); context.Currencies.Add( new Currency { AlphabeticCode = "EUR", Entity = "Europa", Name = "Euro", NumericCode = "978", MinorUnit = 2 }); context.Currencies.Add( new Currency { AlphabeticCode = "RUB", Entity = "RUSSIAN FEDERATION", Name = "Russian Ruble", NumericCode = "643", MinorUnit = 2 }); context.SaveChanges(); }
/// <summary> /// Populate DB with retailers. /// </summary> /// <param name="context"> /// The context. /// </param> /// <param name="fileStorage"> /// The file storage. /// </param> public static void Populate(ShopAnyWareSql context, IFileStorage fileStorage) { var path = fileStorage.MapPath("~/App_Data/retailers.xls"); var retailersExcel = ExcelHelper.LoadRetailersFromExcelFile(path); var retailers = retailersExcel.Select(r => new Retailer(r.Url)).ToList(); var retailers2 = retailers.Where(r => string.IsNullOrWhiteSpace(r.Url) == false).ToList(); retailers2.ForEach(r => context.Retailers.Add(r)); context.SaveChanges(); }
/// <summary> /// The add transaction. /// </summary> /// <param name="transaction"> /// The transaction. /// </param> /// <returns> /// The <see cref="Transaction"/>. /// </returns> public Transaction AddTransaction(Transaction transaction) { using (var context = new ShopAnyWareSql()) { var result = context.Transactions.Add(transaction); context.SaveChanges(); return result; } }
/// <summary> /// Confirms transaction. /// </summary> /// <param name="token">token from PP API</param> /// <param name="payerId">payerId from PP API</param> public void ConfirmTransaction(string token, string payerId) { using (var context = new ShopAnyWareSql()) { var tran = context.Transactions.SingleOrDefault(t => t.Token.Equals(token)); if (tran == null) { throw new InvalidOperationException("Transaction Not Found"); } tran.TransactionStatus = TransactionStatus.Approved; tran.PayerId = payerId; context.Wallets.Find(tran.WalletId).Amount += tran.OperationAmount; context.SaveChanges(); } }
/// <summary> /// Populate database with few orders. /// </summary> /// <param name="context"> /// Shop any ware context. /// </param> public static void Populate(ShopAnyWareSql context) { var user = context.Users.SingleOrDefault(u => u.Email == "*****@*****.**"); var retailer = context.Retailers.Find(1); if (user != null) { user.Orders = new List<Order> { new Order(OrderStatus.New) { Retailer = retailer, CreatedDate = DateTime.UtcNow }, new Order(OrderStatus.Received) { Retailer = retailer, CreatedDate = DateTime.UtcNow.AddDays(-5), ReceivedDate = DateTime.UtcNow.AddHours(-3) } }; } context.SaveChanges(); }
/// <summary> /// Update item. /// </summary> /// <param name="item"> /// The item. /// </param> public void UpdateItem(Item item) { using (var context = new ShopAnyWareSql()) { context.Entry(item).State = EntityState.Modified; context.SaveChanges(); } }
/// <summary> /// Detach item from package. /// </summary> /// <param name="packageId"> /// The package Id. /// </param> /// <param name="itemId"> /// The item Id. /// </param> public void DetachItemFromPackage(int packageId, int itemId) { using (var context = new ShopAnyWareSql()) { var package = context.PackagesWithItems().SingleOrDefault(p => p.Id == packageId); if (package != null) { var itemToDetach = package.Items.SingleOrDefault(i => i.Id == itemId); if (itemToDetach != null) { package.Items.Remove(itemToDetach); context.SaveChanges(); } } } }
/// <summary> /// Attach item to package. /// </summary> /// <param name="packageId"> /// The package id. /// </param> /// <param name="itemId"> /// The item id to attach. /// </param> public void AttachItemToPackage(int packageId, int itemId) { using (var context = new ShopAnyWareSql()) { var item = context.Items.Find(itemId); var package = context.PackagesWithItems().SingleOrDefault(p => p.Id == packageId); if (package != null) { package.Items.Add(item); context.SaveChanges(); } } }
/// <summary> /// Adds image to item /// </summary> /// <param name="itemId"> /// The item Id. /// </param> /// <param name="image"> /// The image. /// </param> public void AddImageToItem(int itemId, ItemImage image) { using (var context = new ShopAnyWareSql()) { var item = context.ItemsWithImages().SingleOrDefault(i => i.Id.Equals(itemId)); if (item != null) { item.Images.Add(image); } context.SaveChanges(); } }
public void GivenIHaveTheFollowingOrders(Table table) { var user = ScenarioContext.Current.Get<User>(); using (var context = new ShopAnyWareSql()) { var orders = table.CreateSet<Order>().Select(o => { context.Entry(o).State = EntityState.Added; return o; }); if (user.Orders == null) { user.Orders = new List<Order>(); } user.Orders.AddRange(orders); context.Entry(user).State = EntityState.Modified; context.SaveChanges(); ScenarioContext.Current.Set(user); } }
/// <summary> /// The add package payment transaction. /// </summary> /// <param name="packageId"> /// The package id. /// </param> /// <returns> /// The <see cref="Tuple"/>. /// </returns> /// <exception cref="InvalidOperationException"> /// Balance cannot be negative. /// </exception> public Tuple<Package, decimal> AddPackagePaymentTransaction(int packageId) { using (var context = new ShopAnyWareSql()) { var package = context.PackagesWithUserAndWallet().Single(p => p.Id.Equals(packageId)); var newTransaction = Transaction.CreatePackagePaymentTransaction(package); var wallet = package.User.Wallet; wallet.PackagePayment(newTransaction.OperationAmount); var brokenRules = wallet.GetBrokenRules(); if (brokenRules.Any()) { throw new InvalidOperationException("Wallet amount can't be negative"); } package.ChangePackageStatus(PackageStatus.Paid); context.Packages.Attach(package); context.Entry(package).State = System.Data.EntityState.Modified; context.Transactions.Add(newTransaction); context.SaveChanges(); return new Tuple<Package, decimal>(package, wallet.Amount); } }
/// <summary> /// Populate users. /// </summary> /// <param name="context"> /// The context. /// </param> public static void Populate(ShopAnyWareSql context) { var adminRole = new Role { Name = "Admin", Description = "System Administrator" }; var shopperRole = new Role { Name = "Shopper", Description = "Main user of the system" }; var operatorRole = new Role { Name = "Operator", Description = "Person who process orders" }; var consultantRole = new Role { Name = "Consultant", Description = "Person who help user to solve service issues" }; context.Roles.Add(adminRole); context.Roles.Add(shopperRole); context.Roles.Add(operatorRole); context.Roles.Add(consultantRole); context.SaveChanges(); // vitali var profile = new Profile { FirstName = "Vitali", LastName = "Hatalski", UserCulture = "en", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profile); context.SaveChanges(); var user = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("ruinruin"), Profile = profile, Roles = new List<Role> { adminRole, shopperRole, operatorRole }, Wallet = new Wallet { Amount = 0.00m }, Activated = true }; context.Users.Add(user); context.SaveChanges(); // oleg var profileOleg = new Profile { FirstName = "Oleg", LastName = "Voronin", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profileOleg); context.SaveChanges(); var userOleg = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("1234567"), Roles = new List<Role> { adminRole }, Wallet = new Wallet { Amount = 0.00m }, Profile = profileOleg, ActivationCode = Guid.NewGuid(), Activated = true }; context.Users.Add(userOleg); context.SaveChanges(); // shopper var profileShopper = new Profile { FirstName = "Shopper First name", LastName = "Shopper Last name", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profileShopper); context.SaveChanges(); var shopper = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("1111111111"), Profile = profileShopper, Roles = new List<Role> { shopperRole }, Wallet = new Wallet { Amount = 0.00m }, ActivationCode = Guid.NewGuid(), Activated = true }; context.Users.Add(shopper); context.SaveChanges(); // operator var profileOperator = new Profile { FirstName = "Operator First name", LastName = "Operator Last name", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profileOperator); context.SaveChanges(); var operatorUser = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("1111111111"), Profile = profileOperator, Roles = new List<Role> { operatorRole }, Wallet = new Wallet { Amount = 0.00m }, ActivationCode = Guid.NewGuid(), Activated = true }; context.Users.Add(operatorUser); context.SaveChanges(); // consultant var profileConsultant = new Profile { FirstName = "Consultant First name", LastName = "Consultant Last name", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profileConsultant); context.SaveChanges(); var consultant = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("1111111111"), Profile = profileConsultant, Roles = new List<Role> { consultantRole }, Wallet = new Wallet { Amount = 0.00m }, ActivationCode = Guid.NewGuid(), Activated = true }; context.Users.Add(consultant); context.SaveChanges(); // consultant var profileKotg = new Profile { FirstName = "Kotg First name", LastName = "Kotg Last name", NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(profileKotg); context.SaveChanges(); var kotg = new User { Email = "*****@*****.**", Password = PasswordHash.CreateHash("2320244"), Profile = profileKotg, Roles = new List<Role> { adminRole, shopperRole, operatorRole }, Wallet = new Wallet { Amount = 0 }, Activated = true }; context.Users.Add(kotg); context.SaveChanges(); for (var i = 0; i < 100; i++) { var pwd = PasswordHash.CreateHash("111111"); var s = i.ToString(CultureInfo.InvariantCulture); var bulkProfile = new Profile { FirstName = "First Name " + s, LastName = "Last name " + s, NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }; context.Profiles.Add(bulkProfile); context.SaveChanges(); var bulkUser = new User { Email = string.Format("user{0}@gmail.com", s), Password = pwd, Profile = bulkProfile, Roles = new List<Role> { shopperRole }, Wallet = new Wallet { Amount = 500 }, Activated = true }; context.Users.Add(bulkUser); context.SaveChanges(); } }
/// <summary> /// Add or update delivery address. /// </summary> /// <param name="email"> /// The email. /// </param> /// <param name="address"> /// The address. /// </param> /// <returns> /// The TdService.Model.Addresses.DeliveryAddress. /// </returns> public DeliveryAddress AddOrUpdateDeliveryAddress(string email, DeliveryAddress address) { if (email == null) { throw new ArgumentNullException("email"); } if (address == null) { throw new ArgumentNullException("address"); } using (var context = new ShopAnyWareSql()) { var user = context.Users.Include("DeliveryAddresses").Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email); if (user == null) { throw new InvalidUserException(ErrorCode.UserNotFound.ToString()); } address.UserId = user.Id; var addressInDb = address.Id == 0 ? null : context.DeliveryAddresses.Find(address.Id); if (addressInDb == null) { addressInDb = context.DeliveryAddresses.Add(address); context.SaveChanges(); if (user.DeliveryAddresses == null) { user.DeliveryAddresses = new List<DeliveryAddress>(); } } else { addressInDb.AddressName = address.AddressName; addressInDb.FirstName = address.FirstName; addressInDb.LastName = address.LastName; addressInDb.Phone = address.Phone; addressInDb.Region = address.Region; addressInDb.State = address.State; addressInDb.ZipCode = address.ZipCode; addressInDb.AddressLine1 = address.AddressLine1; addressInDb.AddressLine2 = address.AddressLine2; addressInDb.AddressLine3 = address.AddressLine3; addressInDb.CountryId = address.CountryId; context.Entry(addressInDb).State = EntityState.Modified; context.SaveChanges(); } addressInDb.Country = context.Countries.Single(c => c.Id.Equals(addressInDb.CountryId)); return addressInDb; } }
/// <summary> /// Remove delivery address. /// </summary> /// <param name="email"> /// The email. /// </param> /// <param name="address"> /// The address. /// </param> /// <returns> /// The TdService.Model.Addresses.DeliveryAddress. /// </returns> public DeliveryAddress RemoveDeliveryAddress(string email, DeliveryAddress address) { if (email == null) { throw new ArgumentNullException("email"); } if (address == null) { throw new ArgumentNullException("address"); } using (var context = new ShopAnyWareSql()) { var user = context.Users.Include("DeliveryAddresses").Include("Profile").Include("Wallet").Include("Roles").SingleOrDefault(u => u.Email == email); if (user == null) { throw new InvalidUserException(ErrorCode.UserNotFound.ToString()); } var addressToRemove = user.DeliveryAddresses.Find(a => a.Id == address.Id); if (addressToRemove != null) { user.DeliveryAddresses.Remove(addressToRemove); } var removedAddress = context.DeliveryAddresses.Remove(addressToRemove); context.SaveChanges(); return removedAddress; } }
public void GivenThereAreFollowingItemsForPackageInDatabase(string packageName, Table table) { var user = ScenarioContext.Current.Get<User>(); var packageId = user.Packages.SingleOrDefault(p => p.Name.Equals(packageName)).Id; ScenarioContext.Current.Set(packageId, "PackageId"); var items = table.CreateSet<Item>().Select(i => { i.Dimensions = new Dimensions(); i.Weight = new Weight(); return i; }); using (var context = new ShopAnyWareSql()) { var package = context.Packages.Find(packageId); if (package.Items == null) { package.Items = new List<Item>(); } context.Packages.Attach(package); package.Items.AddRange(items); context.SaveChanges(); ScenarioContext.Current.Set(package.Items); } }
public void GivenThereAreFollowingItemsForOrderInDatabase(string orderNumber, Table table) { var user = ScenarioContext.Current.Get<User>(); var orderId = user.Orders.SingleOrDefault(o => o.OrderNumber.Equals(orderNumber)).Id; var items = table.CreateSet<Item>().Select(i => { i.Dimensions = new Dimensions(); i.Weight = new Weight(); return i; }); ScenarioContext.Current.Set(orderId, "OrderId"); using (var context = new ShopAnyWareSql()) { var order = context.Orders.Find(orderId); if (order.Items == null) { order.Items = new List<Item>(); } order.Items.AddRange(items); context.Orders.Attach(order); context.SaveChanges(); ScenarioContext.Current.Set(order.Items); } }
public void GivenThereAreFollowingOrdersInDatabase(Table table) { var orders = this.OrdersTransform(table); using (var context = new ShopAnyWareSql()) { var addedOrders = orders.Select(order => context.Orders.Add(order)).ToList(); context.SaveChanges(); ScenarioContext.Current.Set(addedOrders); } }
public void GivenIHaveTheFollowingPackages(Table table) { var packages = table.CreateSet<Package>(); var user = ScenarioContext.Current.Get<User>(); using (var context = new ShopAnyWareSql()) { if (user.Packages == null) { user.Packages = new List<Package>(); } var addedPackages = packages.Select(p => { p.CreatedDate = DateTime.Now; p.Dimensions = new Dimensions(); return context.Packages.Add(p); }); user.Packages.AddRange(addedPackages); context.SaveChanges(); ScenarioContext.Current.Set(user); } }
/// <summary> /// Remove item completely. /// </summary> /// <param name="itemId"> /// The item id. /// </param> /// <returns> /// The <see cref="Item"/>. /// </returns> public Item RemoveItem(int itemId) { using (var context = new ShopAnyWareSql()) { var item = context.Items.Find(itemId); var removedItem = context.Items.Remove(item); context.SaveChanges(); return removedItem; } }
/// <summary> /// Add item to an order. /// </summary> /// <param name="orderId"> /// The order id. /// </param> /// <param name="item"> /// The item. /// </param> /// <returns> /// The TdService.Model.Items.Item. /// </returns> public Item AddItemToOrder(int orderId, Item item) { using (var context = new ShopAnyWareSql()) { var newItem = context.Items.Add(item); var order = context.OrdersWithItems().SingleOrDefault(o => o.Id == orderId); if (order != null) { if (order.Items == null) { order.Items = new List<Item>(); } order.Items.Add(newItem); context.SaveChanges(); } return newItem; } }
/// <summary> /// Update the order. /// </summary> /// <param name="order"> /// The order to update. /// </param> /// <returns> /// The TdService.Model.Orders.Order. /// </returns> public Order UpdateOrder(Order order) { using (var context = new ShopAnyWareSql()) { context.Orders.Attach(order); context.Entry(order).State = EntityState.Modified; context.SaveChanges(); return order; } }
/// <summary> /// Remove an order. /// </summary> /// <param name="email"> /// The email. /// </param> /// <param name="orderId"> /// The order ID to remove. /// </param> /// <returns> /// The TdService.Model.Orders.Order. /// </returns> public Order RemoveOrder(string email, int orderId) { using (var context = new ShopAnyWareSql()) { var user = context.Users.Include("Profile").Include("Wallet").Include("Orders").Include("Roles").SingleOrDefault(u => u.Email == email); if (user == null) { throw new ArgumentNullException(ErrorCode.UserNotFound.ToString()); } var order = user.RemoveOrder(orderId); context.Orders.Attach(order); //// TODO : make a cascading delete in the database context.Entry(order).Collection(o => o.Items).Load(); context.Orders.Remove(order); context.SaveChanges(); return order; } }
/// <summary> /// Removes a role from the data source for the configured applicationName. /// </summary> /// <returns> /// true if the role was successfully deleted; otherwise, false. /// </returns> /// <param name="roleName">The name of the role to delete.</param><param name="throwOnPopulatedRole">If true, throw an exception if <paramref name="roleName"/> has one or more members and do not delete <paramref name="roleName"/>.</param> public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) { using (var context = new ShopAnyWareSql()) { var role = context.Roles.SingleOrDefault(r => r.Name == roleName); context.Roles.Remove(role); context.SaveChanges(); } return true; }
/// <summary> /// Adds a new role to the data source for the configured applicationName. /// </summary> /// <param name="roleName">The name of the role to create.</param> public override void CreateRole(string roleName) { using (var context = new ShopAnyWareSql()) { var role = new Role { Name = roleName, Description = string.Empty }; context.Roles.Add(role); context.SaveChanges(); } }
public void GivenIHaveTheFollowingDeliveryAddresses(Table table) { var addresses = table.CreateSet<DeliveryAddress>(); var user = ScenarioContext.Current.Get<User>(); using (var context = new ShopAnyWareSql()) { context.Wallets.Attach(user.Wallet); context.Profiles.Attach(user.Profile); context.Users.Attach(user); if (user.DeliveryAddresses == null) { user.DeliveryAddresses = new List<DeliveryAddress>(); } var addedAddresses = addresses.Select(deliveryAddress => context.DeliveryAddresses.Add(deliveryAddress)).ToList(); context.SaveChanges(); user.DeliveryAddresses.AddRange(addedAddresses.ToList()); context.Entry(user).State = EntityState.Modified; context.SaveChanges(); ScenarioContext.Current.Set(user); } }
/// <summary> /// The cancel transaction. /// </summary> /// <param name="token"> /// The token. /// </param> /// <exception cref="InvalidOperationException"> /// Transaction can not be found. /// </exception> public void CancelTransaction(string token) { using (var context = new ShopAnyWareSql()) { var tran = context.Transactions.SingleOrDefault(t => t.Token.Equals(token)); if (tran == null) { throw new InvalidOperationException("Transaction Not Found"); } tran.TransactionStatus = TransactionStatus.Canceled; context.SaveChanges(); } }
/// <summary> /// Add order. /// </summary> /// <param name="email"> /// The email. /// </param> /// <param name="order"> /// The order to add. /// </param> /// <returns> /// The TdService.Model.Orders.Order. /// </returns> public Order AddOrder(string email, Order order) { using (var context = new ShopAnyWareSql()) { var user = context.Users.Include("Profile").Include("Wallet").Include("Roles").Include("Orders") .SingleOrDefault(u => u.Email == email); if (user == null) { throw new ArgumentNullException(ErrorCode.UserNotFound.ToString()); } order.Retailer = context.Retailers.SingleOrDefault(r => r.Url == order.Retailer.Url) ?? context.Retailers.Add(order.Retailer); context.Orders.Add(order); if (user.Orders == null) { user.Orders = new List<Order>(); } user.AddOrder(order); context.Entry(user).State = EntityState.Modified; context.SaveChanges(); return order; } }