public void CreateAction_Returns_IndexViewWhenModelStateIsValid()
        {
            _uut.ModelState.Clear();

            RedirectToRouteResult result = _uut.Create(new Printer()) as RedirectToRouteResult;

            result.RouteValues["Action"].Equals("Index");
            Assert.AreEqual("Action", result.RouteValues["Index"]);
        }
        public async Task GivenPrinter_WhenCreate_ThenQuerySent_AndResponseReturned()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new PrintersController(
                new PrinterIdValidator(),
                mockMediator.Object);
            var printer  = new Dto.Request.Printer();
            var response = new CreatePrinterCommandResponse
            {
                Printer = new Dto.Response.Printer
                {
                    Id = "HelloWorld"
                }
            };

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

            var cancellationTokenSource = new CancellationTokenSource();

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

            // Assert
            mockMediator.Verify(x => x.Send(
                                    It.Is <CreatePrinterCommand>(y => y.Printer == printer),
                                    It.Is <CancellationToken>(y => y == cancellationTokenSource.Token)), Times.Once);
            Assert.Equal(response.Printer.Id, result.Value.Id);
        }
        public async Task GivenModelStateError_WhenCreate_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.Create(
                new Dto.Request.Printer(),
                cancellationTokenSource.Token);

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