public async Task AddFaceAsync_WithCorrectInput_ReturnsOk()
        {
            var mockLogger            = Mock.Of <ILogger <MaintenanceController> >();
            var mockFaceClientService = new Mock <IFaceClientService>();

            mockFaceClientService
            .Setup(service => service.AddFaceAsync(It.IsNotNull <string>(), It.IsNotNull <string>()))
            .Returns(() => Task.FromResult(new Cloud.Models.Face {
                FaceId = $"{Guid.NewGuid()}"
            }));

            var dto = new FaceDto
            {
                FaceUrl = $"http://www.google.com"
            };

            var controller   = new MaintenanceController(mockFaceClientService.Object, mockLogger);
            var actionResult = await controller.AddFaceAsync($"{Guid.NewGuid()}", dto);

            Assert.NotNull(actionResult);

            var okObjectResult = Assert.IsAssignableFrom <OkObjectResult>(actionResult);
            var face           = Assert.IsAssignableFrom <Cloud.Models.Face>(okObjectResult.Value);

            face.Should().NotBeNull();
            face.FaceId.Should().NotBeNullOrWhiteSpace();
        }
        public async Task AddFaceAsync_WithMissingDto_ReturnsBadRequest()
        {
            var mockLogger            = Mock.Of <ILogger <MaintenanceController> >();
            var mockFaceClientService = Mock.Of <IFaceClientService>();

            var controller   = new MaintenanceController(mockFaceClientService, mockLogger);
            var actionResult = await controller.AddFaceAsync($"{Guid.NewGuid()}", default);

            Assert.NotNull(actionResult);
            Assert.IsAssignableFrom <BadRequestObjectResult>(actionResult);
        }
        public async Task AddFaceAsync_WithMissingPersonId_ReturnsBadRequest()
        {
            var mockLogger            = Mock.Of <ILogger <MaintenanceController> >();
            var mockFaceClientService = Mock.Of <IFaceClientService>();

            var controller   = new MaintenanceController(mockFaceClientService, mockLogger);
            var actionResult = await controller.AddFaceAsync(null, new FaceDto());

            Assert.NotNull(actionResult);
            Assert.IsAssignableFrom <BadRequestResult>(actionResult);
        }
        public async Task AddFaceAsync_WithFaceClientServiceFault_ThrowsException()
        {
            var mockLogger            = Mock.Of <ILogger <MaintenanceController> >();
            var mockFaceClientService = new Mock <IFaceClientService>();

            mockFaceClientService
            .Setup(service => service.AddFaceAsync(It.IsNotNull <string>(), It.IsNotNull <string>()))
            .Throws <NotImplementedException>();

            var dto = new FaceDto
            {
                FaceUrl = $"http://www.google.com"
            };

            var controller = new MaintenanceController(mockFaceClientService.Object, mockLogger);
            await Assert.ThrowsAsync <NotImplementedException>(async() =>
            {
                await controller.AddFaceAsync($"{Guid.NewGuid()}", dto);
            });
        }