public async Task SigninFailureReturnsNullAndLogsTheIssue()
        {
            // arrange
            var          loggerMock   = LoggerFixture.SetupLogCatcher();
            const string tokenName    = "Test Token";
            var          refreshToken = Guid.NewGuid().ToString();
            var          fixture      = new TokenManagerFixture();
            await fixture.SetupServerDataAsync(tokenName, true);

            var token = fixture.TokenGenerator.GenerateToken();

            fixture.WellKnownSetup();
            fixture.SetupCertificates();
            fixture.AuthSetup(token, refreshToken);
            var sut = fixture.Instance;

            // act
            var result = await sut.CheckSigninAsync(tokenName);

            // assert
            result.Should().BeNull();
            loggerMock.Verify(t => t.Error("Error occured during user authentication. {Error}", It.IsAny <string>()),
                              Times.Once);

            fixture.HttpMock.HttpMock.Dispose();
        }
        public async Task IfThereAreNoTokensSigninIsExecutedToAcquireTokens()
        {
            // arrange
            const string tokenName    = "Test Token";
            var          refreshToken = Guid.NewGuid().ToString();
            var          fixture      = new TokenManagerFixture();
            await fixture.SetupServerDataAsync(tokenName, true);

            var token = fixture.TokenGenerator.GenerateToken();

            fixture.WellKnownSetup();
            fixture.SetupCertificates();
            fixture.AuthSetup(token, refreshToken);
            fixture.UserInfoSetup();
            var sut = fixture.Instance;

            // act
            var result = await sut.CheckSigninAsync(tokenName);

            // assert
            result.Token.Should().Be(token);
            fixture.TokenStorageMock.Verify(t => t.StoreAccessTokenAsync(tokenName, token), Times.Once);
            fixture.TokenStorageMock.Verify(t => t.StoreRefreshTokenAsync(tokenName, refreshToken), Times.Once);

            fixture.HttpMock.Dispose();
        }
        public async Task FailureDuringRefreshTokenRetrievalWillResultInFullTokenRetrieval()
        {
            // arrange
            var          loggerMock   = LoggerFixture.SetupLogCatcher();
            const string tokenName    = "Test Token";
            var          refreshToken = Guid.NewGuid().ToString();
            var          fixture      = new TokenManagerFixture();
            await fixture.SetupServerDataAsync(tokenName);

            var token = fixture.TokenGenerator.GenerateToken(DateTime.UtcNow.AddMinutes(-15),
                                                             DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(-17));
            var tokenDataDummy = new TokenData(token);
            var newAccessToken = fixture.TokenGenerator.GenerateToken();

            fixture.TokenStorageMock
            .Setup(t => t.RetrieveAccessTokenAsync(tokenName))
            .ReturnsAsync(tokenDataDummy);
            fixture.TokenStorageMock
            .Setup(t => t.RetrieveRefreshTokenAsync(tokenName))
            .ReturnsAsync(refreshToken);

            fixture.WellKnownSetup();
            fixture.SetupCertificates();
            fixture.AuthRefreshSetup(newAccessToken, refreshToken, true);
            fixture.AuthSetup(newAccessToken, refreshToken);
            fixture.UserInfoSetup();
            var sut = fixture.Instance;

            // act
            await sut.CheckSigninAsync(tokenName);

            // assert
            loggerMock.Verify(t =>
                              t.Error("Error occured while trying to refresh Access Token. {Error}", It.IsAny <string>()));
            //result.Should().NotBeNull();
            loggerMock.Verify(t => t.Error("Error occured during user authentication. {Error}", It.IsAny <string>()),
                              Times.Once);

            fixture.HttpMock.HttpMock.Dispose();
        }