public void ShouldCreateFailureMessage()
        {
            var options = new SamlOptions {
                SignOutgoingMessages = false
            };

            var samlLogoutResponseMessage = new SamlLogoutResponseMessage {
                Success = false
            };

            var xmlDocument = _logoutResponseFactory.CreateMessage(options, samlLogoutResponseMessage);

            var mgr = new XmlNamespaceManager(xmlDocument.NameTable);

            mgr.AddNamespace("samlp", "urn:oasis:names:tc:SAML:2.0:protocol");
            mgr.AddNamespace("saml", "urn:oasis:names:tc:SAML:2.0:assertion");

            var logoutResponseNode = xmlDocument.SelectSingleNode("/samlp:LogoutResponse", mgr);
            var issuerNode         = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/saml:Issuer", mgr);
            var statusNode         = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/samlp:Status", mgr);
            var statusCodeNode     = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/samlp:Status/samlp:StatusCode", mgr);

            Assert.NotNull(logoutResponseNode);
            Assert.NotNull(issuerNode);
            Assert.NotNull(statusNode);
            Assert.NotNull(statusCodeNode);

            Assert.Equal("", logoutResponseNode.Attributes["Destination"].Value);
            Assert.Equal("2.0", logoutResponseNode.Attributes["Version"].Value);

            Assert.Equal("urn:oasis:names:tc:SAML:2.0:status:Responder", statusCodeNode.Attributes["Value"].Value);
        }
        public void ShouldCreateSignedMessage()
        {
            var privateCert = new X509Certificate2(File.ReadAllBytes("PrivateTestCert.pfx"), "test");
            var options     = new SamlOptions {
                SignOutgoingMessages = true, ServiceProviderCertificate = privateCert
            };

            var samlLogoutResponseMessage = new SamlLogoutResponseMessage
            {
                Success      = true,
                InResponseTo = $"_{Guid.NewGuid():N}"
            };

            var xmlDocument = _logoutResponseFactory.CreateMessage(options, samlLogoutResponseMessage);

            XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDocument.NameTable);

            mgr.AddNamespace("samlp", "urn:oasis:names:tc:SAML:2.0:protocol");
            mgr.AddNamespace("saml", "urn:oasis:names:tc:SAML:2.0:assertion");

            var logoutResponseNode = xmlDocument.SelectSingleNode("/samlp:LogoutResponse", mgr);
            var issuerNode         = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/saml:Issuer", mgr);
            var statusNode         = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/samlp:Status", mgr);
            var statusCodeNode     = xmlDocument.SelectSingleNode("/samlp:LogoutResponse/samlp:Status/samlp:StatusCode", mgr);

            Assert.NotNull(logoutResponseNode);
            Assert.NotNull(issuerNode);
            Assert.NotNull(statusNode);
            Assert.NotNull(statusCodeNode);

            Assert.Equal("", logoutResponseNode.Attributes["Destination"].Value);
            Assert.Equal("2.0", logoutResponseNode.Attributes["Version"].Value);
            Assert.Equal(samlLogoutResponseMessage.InResponseTo, logoutResponseNode.Attributes["InResponseTo"]?.Value);

            Assert.Equal("urn:oasis:names:tc:SAML:2.0:status:Success", statusCodeNode.Attributes["Value"].Value);
        }