public async Task Create_Unhandled_Exception_From_Command_Is_Catched_And_Logged()
        {
            // Arrange
            var loggerMock = new Mock <ILogger>();
            ShortTokenController shortTokenController = new ShortTokenController(loggerMock.Object);
            var generateShortTokenCommandMock         = new Mock <IGenerateShortTokenCommand>();
            var exFromCommand = new Exception();

            generateShortTokenCommandMock.Setup(x => x.Execute(It.IsAny <string>())).ThrowsAsync(exFromCommand);
            CreateSTokenModel model = new CreateSTokenModel()
            {
                RToken = "some refresh token"
            };

            // Act
            var result = await shortTokenController.Create(model, generateShortTokenCommandMock.Object);

            // Assert
            loggerMock.Verify(x => x.LogAsync(It.Is <Log>(l => l.Type == LogType.Error && l.Context == "ShortTokenController.Create"), default), Times.Once);
            Assert.IsInstanceOf <BadRequestObjectResult>(result);
            var badRequestResult = (BadRequestObjectResult)result;

            Assert.AreEqual(400, badRequestResult.StatusCode);
            Assert.IsInstanceOf <Message>(badRequestResult.Value);
        }
        public async Task <IActionResult> Create([FromBody] CreateSTokenModel model, [FromServices] IGenerateShortTokenCommand generateShortTokenCommand)
        {
            try
            {
                if (model == null || model.RToken == null)
                {
                    return(BadRequest(new Message("Invalid refresh token provided.")));
                }

                TokenResult sTokenRes = await generateShortTokenCommand.Execute(model.RToken);

                return(Created("", sTokenRes));
            }
            catch (Exception ex)
            {
                //Log error
                await _logger.LogErrorAsync("ShortTokenController.Create", "Exception was thrown", new
                {
                    CreateSTokenModel = model,
                    Exception         = ex
                });

                return(BadRequest(new Message("Something went wrong.")));
            }
        }
        public async Task Create_When_Called_Returns_Short_Token()
        {
            // Arrange
            ILogger logger = new Mock <ILogger>().Object;
            ShortTokenController shortTokenController = new ShortTokenController(logger);
            CreateSTokenModel    model = new CreateSTokenModel()
            {
                RToken = "some refresh token"
            };
            var         generateShortTokenCommandMock = new Mock <IGenerateShortTokenCommand>();
            TokenResult tokenResult = new TokenResult("", "", DateTime.Now);

            generateShortTokenCommandMock.Setup(x => x.Execute(It.IsAny <string>())).ReturnsAsync(tokenResult);

            // Act
            var result = await shortTokenController.Create(model, generateShortTokenCommandMock.Object);

            // Assert
            Assert.IsInstanceOf <CreatedResult>(result);
            var createdResult = (CreatedResult)result;

            Assert.AreEqual(201, createdResult.StatusCode);
            Assert.AreEqual(tokenResult, createdResult.Value);
        }