public async Task ImageProcessController_AddByVideoCameraAsync_Successfully()
        {
            //Arrange
            var imageProcess = new ImageProcessViewModel()
            {
                IdVideoCameras = 1,
                IdReference    = Guid.NewGuid(),
                ImageName      = "out000090.png",
                IpUserRequest  = "200.111.222.33",
                VideoPath      = "/user/danieldangeloresendebarros/opt",
                SecondsToStart = 15,
                DtProcess      = DateTime.Now
            };

            using (var sc = new StreamContent(File.OpenRead($"Img/Thumbnail/{imageProcess.ImageName}")))
                using (var ms = new MemoryStream())
                {
                    await sc.CopyToAsync(ms);

                    imageProcess.ImageFile = ms.ToArray();
                }

            //Act
            using (var postContent = new StringContent(JsonConvert.SerializeObject(imageProcess), Encoding.UTF8, "application/json"))
                using (var response = await Environment.ServerApiSecurity
                                      .CreateRequest("ImageProcess/AddByVideoCameraAsync")
                                      .AddHeader("Authorization", "Bearer " + _loginAdm.access_token)
                                      .And(request => request.Content = postContent)
                                      .And(request => request.Method = HttpMethod.Post)
                                      .PostAsync())
                {
                    //Assert
                    response.EnsureSuccessStatusCode();
                }
        }
        public async Task ImageProcessController_AddByVideoCameraAsync_Unauthorized()
        {
            //Arrange
            var imageProcess = new ImageProcessViewModel()
            {
                IdVideoCameras = 1,
                IdReference    = Guid.NewGuid(),
                ImageFile      = null,
                ImageName      = "",
                IpUserRequest  = "200.111.222.33",
                VideoPath      = "/user/danieldangeloresendebarros/opt",
                SecondsToStart = 15,
                DtProcess      = DateTime.Now
            };

            //Act
            using (var postContent = new StringContent(JsonConvert.SerializeObject(imageProcess), Encoding.UTF8, "application/json"))
                using (var response = await Environment.ServerApiSecurity
                                      .CreateRequest("ImageProcess/AddByVideoCameraAsync")
                                      .And(request => request.Content = postContent)
                                      .And(request => request.Method = HttpMethod.Post)
                                      .PostAsync())
                {
                    //Assert
                    Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
                }
        }
        //[Authorize(Policy = "ImageProcess.AddByVideoCamera")]
        public async Task <IActionResult> AddByVideoCameraAsync([FromBody] ImageProcessViewModel viewModel)
        {
            if (!IsModelStateValid())
            {
                return(Response());
            }

            var videoCamera = await _videoCameraRepository.GetByIdAsync(viewModel.IdVideoCameras);

            if (videoCamera == null)
            {
                NotifyError("", "VideoCamera not found");
                return(Response());
            }

            var userLoggedInDB = await GetUserDbByIdentityAsync(HttpContext);

            if (userLoggedInDB == null)
            {
                return(Response());
            }
            var userLoggedIn = Mapper.Map <UserViewModel, User>(userLoggedInDB);

            var imageProcess = await AddAsync(viewModel, userLoggedIn);

            if (imageProcess == null)
            {
                NotifyError("", "ImageProcess not inserted or found");
                return(Response());
            }

            foreach (var analyzeRequestVideoCamera in videoCamera.AnalyzesRequests)
            {
                var imageProcessAnalyze = await AddAnalyzeAsync(userLoggedIn, imageProcess, analyzeRequestVideoCamera);

                if (imageProcessAnalyze == null)
                {
                    NotifyError("", "ImageProcessAnalyze not inserted or found");
                    return(Response());
                }

                var adapterReturnResponse = await _imageProcessAdapter.AnalyzeImageProcessAsync(videoCamera, imageProcess, analyzeRequestVideoCamera);

                if (adapterReturnResponse == null)
                {
                    NotifyError("", "ImageProcessAdapter.AnalyzeImage Error");
                }

                await UpdateAnalyzeAsync(userLoggedIn, imageProcessAnalyze, adapterReturnResponse);
            }

            return(Response());
        }
        private async Task <ImageProcess> AddAsync(ImageProcessViewModel viewModel, User userLoggedIn)
        {
            var idReference = Guid.NewGuid().ToString();
            var domainModel = Mapper.Map <ImageProcessModel>(viewModel);

            domainModel.IpUserRequest = GetClientIPAddress();
            domainModel.IdReference   = new Guid(idReference);
            var cmd = new AddImageProcessCommand(userLoggedIn, domainModel);
            await _mediator.SendCommand(cmd);

            return(await _imageProcessRepository.GetByIdReferenceAsync(idReference));
        }