public async Task GetRelayStateFromFormDataTest()
        {
            //ARRANGE
            var relayState = new Dictionary <string, object> {
                { "relayState", "Test state" }
            };
            var form           = new Dictionary <string, string>();
            var compressor     = new DeflateCompressor();
            var messageEncoder = new MessageEncoding(compressor);
            var jsonSerialiser = new NSJsonSerializer(new DefaultSettingsProvider());
            var logger         = new LogProviderMock();
            var serialiser     = new RelaystateSerialiser(jsonSerialiser, messageEncoder, logger) as IRelayStateSerialiser;
            var handler        = new RelayStateHandler(serialiser, logger);
            //ACT
            var serialised = await serialiser.Serialize(relayState);

            form.Add("RelayState", serialised);
            var deserialised = await handler.GetRelayStateFromFormData(form) as Dictionary <string, object>;

            //ASSERT
            Assert.AreEqual(relayState.Count, deserialised.Count);
            Assert.AreEqual(relayState["relayState"], deserialised["relayState"]);
        }
        public async Task DecodeTest()
        {
            //ARRANGE
            var inResponseTo = Guid.NewGuid().ToString();

            var response         = ResponseFactoryMock.GetTokenResponseSuccess(inResponseTo, StatusCodes.Success);
            var logger           = new LogProviderMock();
            var serialised       = ResponseFactoryMock.Serialize(response);
            var responseToBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(serialised));
            var relayState       = new Dictionary <string, object> {
                { "relayState", "Test state" }
            };
            var compressor            = new DeflateCompressor();
            var messageEncoder        = new MessageEncoding(compressor);
            var jsonSerialiser        = new NSJsonSerializer(new DefaultSettingsProvider());
            var serialiser            = new RelaystateSerialiser(jsonSerialiser, messageEncoder, logger) as IRelayStateSerialiser;
            var serialisedRelaySatate = await serialiser.Serialize(relayState);

            var relayStateHandler = new RelayStateHandler(serialiser, logger);
            var form = new Dictionary <string, string>
            {
                { HttpRedirectBindingConstants.SamlResponse, responseToBase64 },
                { HttpRedirectBindingConstants.RelayState, serialisedRelaySatate }
            };

            var decoder = new PostBindingDecoder(logger);
            //ACT
            var message = await decoder.Decode(form);

            var stateFromResult = message.Elements[HttpRedirectBindingConstants.RelayState];

            //ASSERT
            Assert.IsNotNull(stateFromResult);
            Assert.AreEqual(serialised, message.Elements[HttpRedirectBindingConstants.SamlResponse]);
            Assert.AreEqual(serialisedRelaySatate, message.Elements[HttpRedirectBindingConstants.RelayState]);
        }