public async Task GetTokensInfoForAccount_When_Exception_Is_Thrown_Logs_Exception_And_Returns_BadRequest()
        {
            // Arrange
            var loggerMock = new Mock <ILogger>();
            RefreshTokenController controller = new RefreshTokenController(loggerMock.Object);
            // Query mock
            var queryMock = new Mock <IGetAllTokensForAccountQuery>();
            var exception = new Exception();

            queryMock.Setup(x => x.Execute(It.IsAny <string>())).ThrowsAsync(exception);

            // Act
            var actionResult = await controller.GetTokensInfoForAccount("some id", queryMock.Object);

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

            Assert.AreEqual(400, badRequestResult.StatusCode);
            Assert.IsInstanceOf <Message>(badRequestResult.Value);
            var errorMessage = (Message)badRequestResult.Value;

            Assert.AreEqual("Something went wrong.", errorMessage.Text);
        }
        public async Task GetTokensInfoForAccount_When_Called_Returns_Ok_With_List_Of_All_Tokens_For_Accound()
        {
            // Arrange
            ILogger logger = new Mock <ILogger>().Object;
            RefreshTokenController controller = new RefreshTokenController(logger);
            string accountId = "some id";
            // Query mock
            var queryMock     = new Mock <IGetAllTokensForAccountQuery>();
            var accountTokens = new List <AccountTokenModel>()
            {
                new AccountTokenModel()
                {
                }, new AccountTokenModel()
                {
                }
            };

            queryMock.Setup(x => x.Execute(accountId)).ReturnsAsync(accountTokens);

            // Act
            var actionResult = await controller.GetTokensInfoForAccount(accountId, queryMock.Object);

            // Assert
            Assert.IsInstanceOf <OkObjectResult>(actionResult);
            var okResult = (OkObjectResult)actionResult;

            Assert.IsInstanceOf <Page <AccountTokenModel> >(okResult.Value);
            var resultPage = (Page <AccountTokenModel>)okResult.Value;

            Assert.AreEqual(accountTokens, resultPage.List);
            Assert.AreEqual(resultPage.List.Count(), resultPage.TotalItems);
        }
        public async Task GetTokensInfoForAccount_When_Called_With_Null_AccountId_Returns_BadRequest()
        {
            // Arrange
            ILogger logger = new Mock <ILogger>().Object;
            RefreshTokenController controller = new RefreshTokenController(logger);
            var query = new Mock <IGetAllTokensForAccountQuery>().Object;

            // Act
            var actionResult = await controller.GetTokensInfoForAccount(null as string, query);

            // Assert
            Assert.IsInstanceOf <BadRequestObjectResult>(actionResult);
            var badRequestResult = (BadRequestObjectResult)actionResult;

            Assert.IsInstanceOf <Message>(badRequestResult.Value);
            var errorMessage = (Message)badRequestResult.Value;

            Assert.AreEqual("Something went wrong.", errorMessage.Text);
        }