public async void BankIdGetSessionAsync_WithServiceKey_AndSessionId__ShouldGetToGrandIdGetSession_WithServiceKey_AndSessionId()
        {
            // Arrange

            // Act
            await _grandIdApiClient.BankIdGetSessionAsync(new BankIdGetSessionRequest("s"));

            // Assert
            var request = _messageHandlerMock.GetFirstArgumentOfFirstInvocation <HttpMessageHandler, HttpRequestMessage>();

            Assert.Contains("authenticateServiceKey=bsk", request.RequestUri.ToString());
            Assert.Contains("sessionid=s", request.RequestUri.ToString());
        }
        public async void BankIdGetSessionAsync_WithBankIdGetSessionRequest__ShouldParseAndReturnSignatureXml()
        {
            // Arrange
            var httpClient       = GetHttpClientMockWithOkResponse("{ \"userAttributes\": { \"signature\": \"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHNhbXBsZT48dmFsdWU+SGk8L3ZhbHVlPjxjb250ZW50PkJ5ZTwvY29uZW50Pjwvc2FtcGxlPg==\" } }");
            var grandIdApiClient = new GrandIdApiClient(httpClient, new GrandIdApiClientConfiguration("x", "bsk"));

            // Act
            var result = await grandIdApiClient.BankIdGetSessionAsync(new BankIdGetSessionRequest("y"));

            // Assert
            Assert.NotNull(result);
            Assert.NotNull(result.UserAttributes);
            Assert.Equal("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><sample><value>Hi</value><content>Bye</conent></sample>", result.UserAttributes.GetSignatureXml());
        }
        public async void BankIdGetSessionAsync_WithBankIdGetSessionRequest__ShouldParseAndReturnNotBefore_AndNotAfter()
        {
            // Arrange
            var httpClient       = GetHttpClientMockWithOkResponse("{ \"userAttributes\": { \"notBefore\": \"2018-12-25T00:00:00.000+02:00\", \"notAfter\": \"2018-12-26T00:00:00.000+02:00\" } }");
            var grandIdApiClient = new GrandIdApiClient(httpClient, new GrandIdApiClientConfiguration("x", "bsk"));

            // Act
            var result = await grandIdApiClient.BankIdGetSessionAsync(new BankIdGetSessionRequest("y"));

            // Assert
            Assert.NotNull(result);
            Assert.NotNull(result.UserAttributes);
            Assert.Equal(new DateTime(2018, 12, 24, 22, 00, 00, DateTimeKind.Local), result.UserAttributes.GetNotBeforeDateTime());
            Assert.Equal(new DateTime(2018, 12, 25, 22, 00, 00, DateTimeKind.Utc), result.UserAttributes.GetNotAfterDateTime());
        }
        public async void BankIdGetSessionAsync_WithBankIdGetSessionRequest__ShouldParseAndReturnGetSessionResponse()
        {
            // Arrange
            var httpClient       = GetHttpClientMockWithOkResponse("{ \"sessionId\": \"s\", \"username\": \"u\", \"userAttributes\": { \"givenName\": \"ugn\", \"surname\": \"usn\", \"name\": \"un\", \"personalNumber\": \"upn\", \"ipAddress\": \"uip\" } }");
            var grandIdApiClient = new GrandIdApiClient(httpClient, new GrandIdApiClientConfiguration("x", "bsk"));

            // Act
            var result = await grandIdApiClient.BankIdGetSessionAsync(new BankIdGetSessionRequest("y"));

            // Assert
            Assert.NotNull(result);
            Assert.Equal("s", result.SessionId);
            Assert.Equal("u", result.Username);

            Assert.NotNull(result.UserAttributes);
            Assert.Equal("ugn", result.UserAttributes.GivenName);
            Assert.Equal("usn", result.UserAttributes.Surname);
            Assert.Equal("un", result.UserAttributes.Name);
            Assert.Equal("upn", result.UserAttributes.PersonalIdentityNumber);
            Assert.Equal("uip", result.UserAttributes.IpAddress);
        }