public void Validate(ProductGroupAddDTO productGroup) { if (String.IsNullOrWhiteSpace(productGroup.Name)) { throw new ArgumentNullException("Name", "Please fill Product Group's Name"); } }
public async Task Edit_ProductIdIsLessOrEqualZero_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); // Build API & Client var factory = BuildWebApplicationFactory(dbName); var client = factory.CreateClient(); var newProductGroup = new ProductGroupAddDTO { Name = "Test Product Group Edit 1", Status = true }; var httpContent = await ObjectToJsonContent(newProductGroup); var url = "/api/Products/groups/-11"; // ===== Act ===== var response = await client.PutAsync(url, httpContent); // ===== Assert ===== if (response.Content == null) { Assert.Fail(); } //Console.WriteLine(await response.Content.ReadAsStringAsync()); response.EnsureSuccessStatusCode(); var productGroup = JsonConvert.DeserializeObject <ServiceResponse <ProductGroupDTO> >(await response.Content.ReadAsStringAsync()); Console.WriteLine(ClassToJsonString(productGroup)); Assert.IsNull(productGroup.Data); Assert.IsFalse(productGroup.IsSuccess); Assert.IsTrue(productGroup.Message.Contains("Id must be greater than 0")); }
public async Task Edit_NoData_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var editProductGroup = new ProductGroupAddDTO { Name = "Test Product Group" }; // ===== Act ===== var service = new ProductGroupServices(context, mapper, httpContext.Object); var result = await service.Edit(1, editProductGroup); // ===== Assert ===== // No data in database must return an error message // Expected Exception }
public async Task Edit_SentBlankProductGroupName_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var productGroupId = 1; var editProductGroup = new ProductGroupAddDTO { }; // ===== Act ===== var service = new ProductGroupServices(context, mapper, httpContext.Object); var result = await service.Edit(productGroupId, editProductGroup); // ===== Assert ===== // Except Exception }
public async Task <ServiceResponse <ProductGroupDTO> > Add(ProductGroupAddDTO addProductGroup) { // Validation Validate(addProductGroup); // User must be presented to perform this method if (String.IsNullOrEmpty(GetUserId())) { throw new UnauthorizedAccessException("User must be presented to perform this method"); } // Create & set data ProductGroup data = _mapper.Map <ProductGroup>(addProductGroup); data.CreatedByUserId = Guid.Parse(GetUserId()); data.CreatedDate = Now(); data.Status = true; // Add data await _dbContext.ProductGroup.AddAsync(data); await _dbContext.SaveChangesAsync(); // Mapping var dto = _mapper.Map <ProductGroupDTO>(data); // Add User Detail dto.CreatedByUserName = GetUsername(); // Return result return(ResponseResult.Success <ProductGroupDTO>(dto, $"Product Group ({data.Name}) have been added successfully")); }
public async Task Edit_WithData_ReturnEditedResult() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); // Generate Data var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); await Generate_ProductGroup_Data(context, mapper, httpContext.Object); var productGroupId = 1; var dataProductGroup = await context.ProductGroup .Where(x => x.Id == productGroupId) .FirstOrDefaultAsync(); // Build API & Client var factory = BuildWebApplicationFactory(dbName); var client = factory.CreateClient(); var newProductGroup = new ProductGroupAddDTO { Name = "Test Product Group Edit 1", Status = true }; var httpContent = await ObjectToJsonContent(newProductGroup); var url = $"/api/Products/groups/{productGroupId}"; // ===== Act ===== var response = await client.PutAsync(url, httpContent); // ===== Assert ===== if (response.Content == null) { Assert.Fail(); } //Console.WriteLine(await response.Content.ReadAsStringAsync()); response.EnsureSuccessStatusCode(); var productGroup = JsonConvert.DeserializeObject <ServiceResponse <ProductGroupDTO> >(await response.Content.ReadAsStringAsync()); Console.WriteLine(ClassToJsonString(productGroup)); Assert.IsNotNull(productGroup.Data); Assert.IsTrue(productGroup.IsSuccess); Assert.AreEqual(newProductGroup.Name, productGroup.Data.Name); var count = await context.ProductGroup .Where(x => x.Name.Contains(newProductGroup.Name)) .CountAsync(); Assert.AreEqual(1, count); }
public async Task Add_WithData_ReturnAddedResult() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); // Generate Data var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var user = await SetupUser(context, mapper, httpContext.Object, new UserRegisterDto { Username = "******", Password = "******" }); // Build API & Client var factory = BuildWebApplicationFactory(dbName); var client = factory.CreateClient(); // Login var bearer = await SimulateLogin(client); //Console.WriteLine(ClassToJsonString(baerer)); var newProductGroup = new ProductGroupAddDTO { Name = "New Product Group 1", Status = true }; var httpContent = await ObjectToJsonContent(newProductGroup); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", $"{bearer}"); var url = $"api/products/groups"; // ===== Act ===== var response = await client.PostAsync(url, httpContent); // ===== Assert ===== if (response.Content == null) { Assert.Fail(); } response.EnsureSuccessStatusCode(); var productGroup = JsonConvert.DeserializeObject <ServiceResponse <ProductGroupDTO> >(await response.Content.ReadAsStringAsync()); Console.WriteLine(ClassToJsonString(productGroup)); Assert.IsNotNull(productGroup.Data); Assert.IsTrue(productGroup.IsSuccess); Assert.AreEqual(newProductGroup.Name, productGroup.Data.Name); }
public async Task <IActionResult> Edit(int id, [FromBody] ProductGroupAddDTO addProduct) { try { var result = await _ProductGroupService.Edit(id, addProduct); return(Ok(result)); } catch (Exception ex) { return(Ok(ResponseResult.Failure <ProductGroupDTO>(ex.Message))); } }
public async Task Edit_ProductIdIsLessOrEqualZero_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var editProductGroup = new ProductGroupAddDTO { }; bool expectEx1 = false; bool expectEx2 = false; // ===== Act ===== var service = new ProductGroupServices(context, mapper, httpContext.Object); try { await service.Edit(0, editProductGroup); } catch (ArgumentOutOfRangeException) { expectEx1 = true; } try { await service.Edit(-10, editProductGroup); } catch (ArgumentOutOfRangeException) { expectEx2 = true; } // ===== Assert ===== // Result 1 : When Id = 0 Assert.IsTrue(expectEx1); // Result 1 : When Id = -10 Assert.IsTrue(expectEx2); }
public async Task Add_WithData_ReturnAddedResult() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var addProductGroup = new ProductGroupAddDTO { Name = "Test" }; var user = await SetupUser(context, mapper, httpContext.Object, new UserRegisterDto { Username = "******", Password = "******" }); List <Claim> claims = new List <Claim> { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Name, user.Username) }; var loginHttpContext = new Mock <IHttpContextAccessor>(); var loginHttp = new DefaultHttpContext(); loginHttp.User.AddIdentity(new ClaimsIdentity(claims)); loginHttpContext.Setup(_ => _.HttpContext).Returns(loginHttp); // ===== Act ===== var service = new ProductGroupServices(context, mapper, loginHttpContext.Object); var result = await service.Add(addProductGroup); // ===== Assert ===== // Check that database has new record var resultContext = BuildContext(dbName); var recordCount = await resultContext.ProductGroup.CountAsync(); Assert.AreEqual(recordCount, 1); // Result : Return an error message Assert.IsTrue(result.IsSuccess); Assert.AreEqual(result.Message, $"Product Group ({addProductGroup.Name}) have been added successfully"); }
public async Task Add_SentBlankProductGroupName_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); var addProductGroup = new ProductGroupAddDTO { Name = "" }; bool expectEx = false; // ===== Act ===== var service = new ProductGroupServices(context, mapper, httpContext.Object); try { var result = await service.Add(addProductGroup); } catch (ArgumentNullException) { expectEx = true; } // ===== Assert ===== // Check that database has no new record var resultContext = BuildContext(dbName); var recordCount = await resultContext.ProductGroup.CountAsync(); Assert.AreEqual(recordCount, 0); // Result : Return an error message Assert.IsTrue(expectEx); }
public async Task Add_NoLoginUser_ReturnErrorMessage() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); // Build API & Client var factory = BuildWebApplicationFactory(dbName); var client = factory.CreateClient(); var url = $"api/products/groups"; var newProductGroup = new ProductGroupAddDTO { Name = "New Product Group 1", Status = true }; var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(newProductGroup)); var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json"); // ===== Act ===== var response = await client.PostAsync(url, httpContent); // ===== Assert ===== if (response.Content == null) { Assert.Fail(); } response.EnsureSuccessStatusCode(); var productGroup = JsonConvert.DeserializeObject <ServiceResponse <ProductGroupDTO> >(await response.Content.ReadAsStringAsync()); //Console.WriteLine(ClassToJsonString(productGroup)); Assert.IsNull(productGroup.Data); Assert.IsFalse(productGroup.IsSuccess); Assert.AreEqual("User must be presented to perform this method", productGroup.Message); }
public async Task Edit_WithData_ReturnEditedResult() { // ===== Arrange ===== var dbName = Guid.NewGuid().ToString(); var context = BuildContext(dbName); var mapper = BuildMap(); var httpContext = new Mock <IHttpContextAccessor>(); var http = new DefaultHttpContext(); httpContext.Setup(_ => _.HttpContext).Returns(http); await Generate_ProductGroup_Data(context, mapper, httpContext.Object); var productGroupId1 = 1; var productGroupId2 = 3; var productGroupId3 = 99; var editProductGroup1 = new ProductGroupAddDTO { Name = "Test Product Group Edit 1" }; var editProductGroup2 = new ProductGroupAddDTO { Name = "Test Product Group Edit 2" }; var editProductGroup3 = new ProductGroupAddDTO { Name = "Test Product Group Edit 3" }; bool expectEx1 = false; bool expectEx2 = false; bool expectEx3 = false; var result1 = new ServiceResponse <ProductGroupDTO>(); var result2 = new ServiceResponse <ProductGroupDTO>(); var result3 = new ServiceResponse <ProductGroupDTO>(); // Arrange data for later comparison. var dataProductGroup1 = await context.ProductGroup .Where(x => x.Id == productGroupId1) .FirstOrDefaultAsync(); var dataProductGroup2 = await context.ProductGroup .Where(x => x.Id == productGroupId2) .FirstOrDefaultAsync(); var dataProductGroup3 = await context.ProductGroup .Where(x => x.Id == productGroupId3) .FirstOrDefaultAsync(); // ===== Act ===== var actContext = BuildContext(dbName); var service = new ProductGroupServices(actContext, mapper, httpContext.Object); try { result1 = await service.Edit(productGroupId1, editProductGroup1); } catch (Exception) { expectEx1 = true; throw; } try { result2 = await service.Edit(productGroupId2, editProductGroup2); } catch (Exception) { expectEx2 = true; throw; } try { result3 = await service.Edit(productGroupId3, editProductGroup3); } catch (InvalidOperationException) { expectEx3 = true; } // ===== Assert ===== var assContext = BuildContext(dbName); var chkProductGroup1 = await assContext.ProductGroup .Where(x => x.Id == productGroupId1) .FirstOrDefaultAsync(); var chkProductGroup2 = await assContext.ProductGroup .Where(x => x.Id == productGroupId2) .FirstOrDefaultAsync(); var chkProductGroup3 = await assContext.ProductGroup .Where(x => x.Id == productGroupId3) .FirstOrDefaultAsync(); // Result 1 : Edit ProductGroup (ID 1) Must be changed Assert.IsTrue(result1.IsSuccess); Assert.AreEqual(result1.Message, $"Product Group ({editProductGroup1.Name}) have been edited successfully"); Assert.IsNotNull(chkProductGroup1); Assert.AreEqual(result1.Data.Id, productGroupId1); Assert.AreEqual(result1.Data.Id, chkProductGroup1.Id); Assert.AreNotEqual(result1.Data.Name, dataProductGroup1.Name); Assert.AreEqual(result1.Data.Name, chkProductGroup1.Name); Assert.IsFalse(expectEx1); // Result 2 : Edit ProductGroup (ID 3) Must be changed Assert.IsTrue(result2.IsSuccess); Assert.AreEqual(result2.Message, $"Product Group ({editProductGroup2.Name}) have been edited successfully"); Assert.IsNotNull(chkProductGroup2); Assert.AreEqual(result2.Data.Id, productGroupId2); Assert.AreEqual(result2.Data.Id, chkProductGroup2.Id); Assert.AreNotEqual(result2.Data.Name, dataProductGroup2.Name); Assert.AreEqual(result2.Data.Name, chkProductGroup2.Name); Assert.IsFalse(expectEx2); // Result 3 : Edit ProductGroup (ID 99) Must be return an error message Assert.IsNull(result3.Data); Assert.IsTrue(expectEx3); Assert.IsNull(dataProductGroup3); Assert.IsNull(chkProductGroup3); }
public async Task <ServiceResponse <ProductGroupDTO> > Edit(int productGroupId, ProductGroupAddDTO addProductGroup) { // Validation if (productGroupId <= 0) { throw new ArgumentOutOfRangeException("Product Group Id", "Id must be greater than 0"); } Validate(addProductGroup); // Gettering data var data = await _dbContext.ProductGroup .Include(entity => entity.CreatedByUser) .Where(x => x.Id == productGroupId) .FirstOrDefaultAsync(); // If no data return error if (data is null) { throw new InvalidOperationException("Product Group is not Exist"); } // Set data _mapper.Map(addProductGroup, data); _dbContext.ProductGroup.Update(data); await _dbContext.SaveChangesAsync(); // Mapping var dto = _mapper.Map <ProductGroupDTO>(data); // Return result return(ResponseResult.Success <ProductGroupDTO>(dto, $"Product Group ({data.Name}) have been edited successfully")); }