public async Task GivenId_AndPrinter_WhenUpdate_ThenQuerySent_AndResponseReturned()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new PrintersController(
                new PrinterIdValidator(),
                mockMediator.Object);
            var id       = ObjectId.GenerateNewId().ToString();
            var printer  = new Dto.Request.Printer();
            var response = new UpdatePrinterCommandResponse();

            mockMediator.Setup(x => x.Send(
                                   It.IsAny <UpdatePrinterCommand>(),
                                   It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            var cancellationTokenSource = new CancellationTokenSource();

            // Act
            var result = await sut.Update(
                id,
                printer,
                cancellationTokenSource.Token);

            // Assert
            mockMediator.Verify(x => x.Send(
                                    It.Is <UpdatePrinterCommand>(y => y.Id == id && y.Printer == printer),
                                    It.Is <CancellationToken>(y => y == cancellationTokenSource.Token)), Times.Once);
            Assert.Null(result.Error);
        }
        public async Task GivenInvalidId_AndPrinter_WhenUpdate_ThenQuerySent_AndResponseReturned()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new PrintersController(
                new PrinterIdValidator(),
                mockMediator.Object);
            var cancellationTokenSource = new CancellationTokenSource();

            // Act
            var result = await sut.Update(
                "HelloWorld",
                new Dto.Request.Printer(),
                cancellationTokenSource.Token);

            // Assert
            Assert.False(result.Success);
            Assert.Equal(HttpStatusCode.BadRequest, result.Error.HttpStatusCode);
        }
        public async Task GivenModelStateError_WhenUpdate_ThenBadRequestResponseReturned()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new PrintersController(
                new PrinterIdValidator(),
                mockMediator.Object);

            sut.ModelState.AddModelError("error", "Something bad went down!");
            var cancellationTokenSource = new CancellationTokenSource();

            // Act
            var result = await sut.Update(
                ObjectId.GenerateNewId().ToString(),
                new Dto.Request.Printer(),
                cancellationTokenSource.Token);

            // Assert
            Assert.False(result.Success);
            Assert.Equal(HttpStatusCode.BadRequest, result.Error.HttpStatusCode);
        }