Skip to content

Commit

Permalink
Add samlp:StatusMessage
Browse files Browse the repository at this point in the history
  • Loading branch information
tvdijen committed Aug 1, 2024
1 parent 4596a17 commit cf7cd07
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
60 changes: 60 additions & 0 deletions src/SAML11/XML/samlp/StatusMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

declare(strict_types=1);

namespace SimpleSAML\SAML11\XML\samlp;

use DOMElement;
use SimpleSAML\Assert\Assert;
use SimpleSAML\XML\Exception\InvalidDOMElementException;
use SimpleSAML\XML\StringElementTrait;

/**
* Class representing a samlp:StatusMessage element.
*
* @package simplesaml/SAML11
*/
final class StatusMessage extends AbstractSamlpElement
{
use StringElementTrait;


/**
* @param string $content
*/
public function __construct(string $content)
{
$this->setContent($content);
}


/**
* Validate the content of the element.
*
* @param string $content The value to go in the XML textContent
* @throws \Exception on failure
* @return void
*/
protected function validateContent(string $content): void
{
Assert::notWhitespaceOnly($content);
}


/**
* Convert XML into an StatusMessage
*
* @param \DOMElement $xml The XML element we should load
* @return static
*
* @throws \SimpleSAML\XML\Exception\InvalidDOMElementException
* If the qualified name of the supplied element is wrong
*/
public static function fromXML(DOMElement $xml): static
{
Assert::same($xml->localName, 'StatusMessage', InvalidDOMElementException::class);
Assert::same($xml->namespaceURI, StatusMessage::NS, InvalidDOMElementException::class);

return new static($xml->textContent);
}
}
1 change: 1 addition & 0 deletions tests/resources/xml/samlp_StatusMessage.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<samlp:StatusMessage xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol">Something went wrong</samlp:StatusMessage>
57 changes: 57 additions & 0 deletions tests/src/SAML11/XML/samlp/StatusMessageTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

namespace SimpleSAML\SAML11\Test\SAML11\XML\samlp;

use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase;
use SimpleSAML\SAML11\XML\samlp\AbstractSamlpElement;
use SimpleSAML\SAML11\XML\samlp\StatusMessage;
use SimpleSAML\XML\DOMDocumentFactory;
use SimpleSAML\XML\TestUtils\SchemaValidationTestTrait;
use SimpleSAML\XML\TestUtils\SerializableElementTestTrait;

use function dirname;
use function strval;

/**
* Class \SimpleSAML\SAML11\XML\samlp\StatusMessageTest
*
* @package simplesamlphp/SAML11
*/
#[Group('samlp')]
#[CoversClass(StatusMessage::class)]
#[CoversClass(AbstractSamlpElement::class)]
final class StatusMessageTest extends TestCase
{
use SchemaValidationTestTrait;
use SerializableElementTestTrait;

/**
*/
public static function setUpBeforeClass(): void
{
self::$schemaFile = dirname(__FILE__, 6) . '/resources/schemas/oasis-sstc-saml-schema-protocol-1.1.xsd';

self::$testedClass = StatusMessage::class;

self::$xmlRepresentation = DOMDocumentFactory::fromFile(
dirname(__FILE__, 5) . '/resources/xml/samlp_StatusMessage.xml',
);
}


/**
*/
public function testMarshalling(): void
{
$statusMessage = new StatusMessage('Something went wrong');

$this->assertEquals(
self::$xmlRepresentation->saveXML(self::$xmlRepresentation->documentElement),
strval($statusMessage),
);
}
}

0 comments on commit cf7cd07

Please sign in to comment.