diff --git a/LuminousSales/Business/Business/Sales/DealController.cs b/LuminousSales/Business/Business/Sales/DealController.cs index 4b7766a..1d6eb6c 100644 --- a/LuminousSales/Business/Business/Sales/DealController.cs +++ b/LuminousSales/Business/Business/Sales/DealController.cs @@ -14,6 +14,7 @@ namespace Business.Business.Sales private ProductController productCtrl; public DealController(User currentUser) { + this.productCtrl = new ProductController(currentUser); this.currentUser = currentUser; } public void Add(int productId, double Amount, DateTime time) @@ -21,6 +22,7 @@ namespace Business.Business.Sales if (Amount > 0) { var deal = new Deal(currentUser.Id, productId, Amount, time); + productCtrl.RemoveAmount(productId, Amount); context.Deal.Add(deal); context.SaveChanges(); } @@ -37,6 +39,7 @@ namespace Business.Business.Sales productCtrl = new ProductController(currentUser); var productId = productCtrl.Get(productName).Id; var deal = new Deal(currentUser.Id, productId, Amount, time); + productCtrl.RemoveAmount(productId, Amount); context.Deal.Add(deal); context.SaveChanges(); } @@ -53,6 +56,7 @@ namespace Business.Business.Sales var deal = Get(id); if (deal != null) { + productCtrl.AddAmount(deal.ProductId, deal.Amount); context.Deal.Remove(deal); context.SaveChanges(); } diff --git a/LuminousSales/Business/Business/Sales/ProductController.cs b/LuminousSales/Business/Business/Sales/ProductController.cs index 69e951c..9cd3541 100644 --- a/LuminousSales/Business/Business/Sales/ProductController.cs +++ b/LuminousSales/Business/Business/Sales/ProductController.cs @@ -308,6 +308,46 @@ namespace Business.Business.Sales throw new ArgumentException("Insufficient Role!"); } } + public void AddAmount(int productId ,double Amount) + { + if (currentUser.RoleId > 1) + { + var product = Get(productId); + if (product != null) + { + product.AmountInStock += Amount; + context.SaveChanges(); + } + else + { + throw new ArgumentException("Product id not valid!"); + } + } + else + { + throw new ArgumentException("Insufficient Role!"); + } + } + public void RemoveAmount(int productId, double Amount) + { + if (currentUser.RoleId > 1) + { + var product = Get(productId); + if (product != null) + { + product.AmountInStock -= Amount; + context.SaveChanges(); + } + else + { + throw new ArgumentException("Product id not valid!"); + } + } + else + { + throw new ArgumentException("Insufficient Role!"); + } + } /// /// Deletes the given product @@ -318,6 +358,7 @@ namespace Business.Business.Sales /// Requires Admin role /// + public void Delete(int id) { if (currentUser.RoleId == 3) diff --git a/LuminousSales/Business/Business/Sales/StockController.cs b/LuminousSales/Business/Business/Sales/StockController.cs index 4cf2477..d0b4961 100644 --- a/LuminousSales/Business/Business/Sales/StockController.cs +++ b/LuminousSales/Business/Business/Sales/StockController.cs @@ -16,6 +16,7 @@ namespace Business.Business.Sales public StockController(User currentUser) { + this.productCtrl = new ProductController(currentUser); this.currentUser = currentUser; } @@ -63,8 +64,7 @@ namespace Business.Business.Sales if (Amount > 0) { var stock = new Stock(currentUser.Id, productId, Amount, time); - productCtrl = new ProductController(currentUser); - productCtrl.Get(productId).AmountInStock += Amount; + productCtrl.AddAmount(productId, Amount); context.Stock.Add(stock); context.SaveChanges(); } @@ -89,7 +89,7 @@ namespace Business.Business.Sales productCtrl = new ProductController(currentUser); var productId = productCtrl.Get(productName).Id; var stock = new Stock(currentUser.Id, productId, Amount, time); - productCtrl.Get(productId).AmountInStock += Amount; + productCtrl.AddAmount(productId, Amount); context.Stock.Add(stock); context.SaveChanges(); } @@ -110,15 +110,16 @@ namespace Business.Business.Sales { if (currentUser.RoleId == 3 ) { - var user = Get(id); - if (user != null) + var stock = Get(id); + if (stock != null) { - context.Stock.Remove(user); + productCtrl.RemoveAmount(stock.ProductId, stock.Amount); + context.Stock.Remove(stock); context.SaveChanges(); } else { - throw new ArgumentException("User not found"); + throw new ArgumentException("Stock Id not found!"); } } diff --git a/LuminousSales/Business/Business/UserManagment/Controllers/RoleController.cs b/LuminousSales/Business/Business/UserManagment/Controllers/RoleController.cs index 7e25ce0..1b5d9a3 100644 --- a/LuminousSales/Business/Business/UserManagment/Controllers/RoleController.cs +++ b/LuminousSales/Business/Business/UserManagment/Controllers/RoleController.cs @@ -25,6 +25,11 @@ namespace Business.Business.UserManagment.Controllers this.context = new LuminousContext(); } + public RoleController(LuminousContext context) + { + this.context = context; + } + /// /// Constructor that accepts a user object /// @@ -46,7 +51,7 @@ namespace Business.Business.UserManagment.Controllers /// User object is used for role checking /// - public RoleController(LuminousContext context, User currentUser) + public RoleController(User currentUser, LuminousContext context) { this.context = context; this.currentUser = currentUser; diff --git a/LuminousSales/LuminousTests/UnitTest1.cs b/LuminousSales/LuminousTests/UnitTest1.cs index 4adf9a9..25472e1 100644 --- a/LuminousSales/LuminousTests/UnitTest1.cs +++ b/LuminousSales/LuminousTests/UnitTest1.cs @@ -8,6 +8,7 @@ using System.Linq; using Models; using Business.Business.UserManagment; using Business.Business.UserManagment.Controllers; +using System; namespace LuminousUnitTests { @@ -15,26 +16,45 @@ namespace LuminousUnitTests { private UserController userctrl; private RoleController rolectrl; + private Mock testContext; + private Mock> UserMock; + private Mock> RoleMock; private IQueryable testUsers; + private IQueryable testRoles; [SetUp] public void Setup() { - var mock = new Mock>(); - var mocka = new Mock>(); + UserMock = new Mock>(); + RoleMock = new Mock>(); testUsers = new List { new User(){ Name = "Admin", Password = "adm123", RoleId = 1}, new User(){ Name = "Goso", Password = "goso123", RoleId = 2}, new User(){ Name = "Pesho", Password = "peso123", RoleId = 3}, }.AsQueryable(); - mock.As>().Setup(m => m.Provider).Returns(testUsers.Provider); - mock.As>().Setup(m => m.Expression).Returns(testUsers.Expression); - mock.As>().Setup(m => m.ElementType).Returns(testUsers.ElementType); - mock.As>().Setup(m => m.GetEnumerator()).Returns(testUsers.GetEnumerator()); - var testContext = new Mock(); - testContext.Setup(s => s.User).Returns(mock.Object); + testRoles = new List + { + new Role { Name = "Cashier"}, + new Role { Name = "Manager"}, + new Role { Name = "Admin" } + }.AsQueryable(); + + UserMock.As>().Setup(m => m.Provider).Returns(testUsers.Provider); + UserMock.As>().Setup(m => m.Expression).Returns(testUsers.Expression); + UserMock.As>().Setup(m => m.ElementType).Returns(testUsers.ElementType); + UserMock.As>().Setup(m => m.GetEnumerator()).Returns(testUsers.GetEnumerator()); + + RoleMock.As>().Setup(m => m.Provider).Returns(testUsers.Provider); + RoleMock.As>().Setup(m => m.Expression).Returns(testUsers.Expression); + RoleMock.As>().Setup(m => m.ElementType).Returns(testUsers.ElementType); + RoleMock.As>().Setup(m => m.GetEnumerator()).Returns(testUsers.GetEnumerator()); + + testContext = new Mock(); + testContext.Setup(s => s.User).Returns(UserMock.Object); + testContext.Setup(s => s.Role).Returns(RoleMock.Object); userctrl = new UserController(testUsers.ToList()[0], testContext.Object); + rolectrl = new RoleController(testContext.Object); } [Test] @@ -53,9 +73,17 @@ namespace LuminousUnitTests [Test] public void UserController_AddItem() { + rolectrl.CreateInitialRoles(); + RoleMock.Verify(m => m.AddRange(It.IsAny())); + testContext.Verify(m => m.SaveChanges()); userctrl.RegisterItem("Penka", "penka123", 3); - List users = userctrl.GetAll().ToList(); - Assert.AreEqual(users.Count, 4); + UserMock.Verify(m => m.Add(It.IsAny())); + testContext.Verify(m => m.SaveChanges()); + } + public void UserController_DeleteUser() + { + userctrl.Delete(1); + UserMock.Verify(m => m.Remove(It.IsAny())); } } } \ No newline at end of file