Ejemplo n.º 1
0
 public void Validate(ProductGroupAddDTO productGroup)
 {
     if (String.IsNullOrWhiteSpace(productGroup.Name))
     {
         throw new ArgumentNullException("Name", "Please fill Product Group's Name");
     }
 }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 5
0
        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"));
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 14
0
        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"));
        }