diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ab101fb..fe19a825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.4.0 +----- + +* Added Basic Outcome claim handling + 2.3.0 ----- diff --git a/src/Message/Claim/BasicOutcomeClaim.php b/src/Message/Claim/BasicOutcomeClaim.php new file mode 100644 index 00000000..5193d1f8 --- /dev/null +++ b/src/Message/Claim/BasicOutcomeClaim.php @@ -0,0 +1,74 @@ +lisResultSourcedId = $lisResultSourcedId; + $this->lisOutcomeServiceUrl = $lisOutcomeServiceUrl; + } + + public static function getClaimName(): string + { + return LtiMessageInterface::CLAIM_LTI_BASIC_OUTCOME; + } + + public function getLisResultSourcedId(): string + { + return $this->lisResultSourcedId; + } + + public function getLisOutcomeServiceUrl(): string + { + return $this->lisOutcomeServiceUrl; + } + + public function normalize(): array + { + return array_filter([ + 'lis_result_sourcedid' => $this->lisResultSourcedId, + 'lis_outcome_service_url' => $this->lisOutcomeServiceUrl, + ]); + } + + public static function denormalize(array $claimData): BasicOutcomeClaim + { + return new self( + $claimData['lis_result_sourcedid'], + $claimData['lis_outcome_service_url'] + ); + } +} diff --git a/src/Message/LtiMessage.php b/src/Message/LtiMessage.php index 64ca7f0f..ff6c8328 100644 --- a/src/Message/LtiMessage.php +++ b/src/Message/LtiMessage.php @@ -24,6 +24,7 @@ use OAT\Library\Lti1p3Core\Exception\LtiException; use OAT\Library\Lti1p3Core\Message\Claim\AgsClaim; +use OAT\Library\Lti1p3Core\Message\Claim\BasicOutcomeClaim; use OAT\Library\Lti1p3Core\Message\Claim\ContextClaim; use OAT\Library\Lti1p3Core\Message\Claim\LaunchPresentationClaim; use OAT\Library\Lti1p3Core\Message\Claim\LisClaim; @@ -143,4 +144,9 @@ public function getNrps(): ?NrpsClaim { return $this->getClaim(NrpsClaim::class); } + + public function getBasicOutcome(): ?BasicOutcomeClaim + { + return $this->getClaim(BasicOutcomeClaim::class); + } } diff --git a/src/Message/LtiMessageInterface.php b/src/Message/LtiMessageInterface.php index dfa95fe2..61342ed5 100644 --- a/src/Message/LtiMessageInterface.php +++ b/src/Message/LtiMessageInterface.php @@ -23,6 +23,7 @@ namespace OAT\Library\Lti1p3Core\Message; use OAT\Library\Lti1p3Core\Message\Claim\AgsClaim; +use OAT\Library\Lti1p3Core\Message\Claim\BasicOutcomeClaim; use OAT\Library\Lti1p3Core\Message\Claim\ContextClaim; use OAT\Library\Lti1p3Core\Message\Claim\LaunchPresentationClaim; use OAT\Library\Lti1p3Core\Message\Claim\LisClaim; @@ -59,6 +60,9 @@ interface LtiMessageInterface extends MessageInterface // LTI NRPS claim public const CLAIM_LTI_NRPS = 'https://purl.imsglobal.org/spec/lti-nrps/claim/namesroleservice'; + // LTI Basic Outcome claim + public const CLAIM_LTI_BASIC_OUTCOME = 'https://purl.imsglobal.org/spec/lti-bo/claim/basicoutcome'; + public function getMessageType(): string; public function getVersion(): string; @@ -88,4 +92,6 @@ public function getUserIdentity(): ?UserIdentityInterface; public function getAgs(): ?AgsClaim; public function getNrps(): ?NrpsClaim; + + public function getBasicOutcome(): ?BasicOutcomeClaim; } diff --git a/tests/Integration/Message/LtiMessageTest.php b/tests/Integration/Message/LtiMessageTest.php index 71ee1723..6cf93e6b 100644 --- a/tests/Integration/Message/LtiMessageTest.php +++ b/tests/Integration/Message/LtiMessageTest.php @@ -23,6 +23,7 @@ namespace OAT\Library\Lti1p3Core\Tests\Integration\Message; use OAT\Library\Lti1p3Core\Message\Claim\AgsClaim; +use OAT\Library\Lti1p3Core\Message\Claim\BasicOutcomeClaim; use OAT\Library\Lti1p3Core\Message\Claim\NrpsClaim; use OAT\Library\Lti1p3Core\Registration\RegistrationInterface; use OAT\Library\Lti1p3Core\Launch\Builder\LtiLaunchRequestBuilder; @@ -84,6 +85,7 @@ protected function setUp(): void new LisClaim('course_offering_sourcedid'), new AgsClaim(['scope'], 'line_items_container_url'), new NrpsClaim('context_membership_url', ['1.0', '2.0']), + new BasicOutcomeClaim('id', 'url'), 'aaa' => 'bbb' ] )->getLtiMessage(); @@ -174,4 +176,11 @@ public function testGetNrps(): void $this->assertEquals('context_membership_url', $this->subject->getNrps()->getContextMembershipsUrl()); $this->assertEquals(['1.0', '2.0'], $this->subject->getNrps()->getServiceVersions()); } + + public function testGetBasicOutcome(): void + { + $this->assertInstanceOf(BasicOutcomeClaim::class, $this->subject->getBasicOutcome()); + $this->assertEquals('id', $this->subject->getBasicOutcome()->getLisResultSourcedId()); + $this->assertEquals('url', $this->subject->getBasicOutcome()->getLisOutcomeServiceUrl()); + } } diff --git a/tests/Unit/Message/Claim/BasicOutcomeClaimTest.php b/tests/Unit/Message/Claim/BasicOutcomeClaimTest.php new file mode 100644 index 00000000..8f4cadc5 --- /dev/null +++ b/tests/Unit/Message/Claim/BasicOutcomeClaimTest.php @@ -0,0 +1,72 @@ +subject = new BasicOutcomeClaim('id', 'url'); + } + + public function testGetClaimName(): void + { + $this->assertEquals(LtiMessageInterface::CLAIM_LTI_BASIC_OUTCOME, $this->subject::getClaimName()); + } + + public function testGetters(): void + { + $this->assertEquals('id', $this->subject->getLisResultSourcedId()); + $this->assertEquals('url', $this->subject->getLisOutcomeServiceUrl()); + } + + public function testNormalisation(): void + { + $this->assertEquals( + [ + 'lis_result_sourcedid' => 'id', + 'lis_outcome_service_url' => 'url', + ], + $this->subject->normalize() + ); + } + + public function testDenormalisation(): void + { + $denormalisation = BasicOutcomeClaim::denormalize([ + 'lis_result_sourcedid' => 'id', + 'lis_outcome_service_url' => 'url', + ]); + + $this->assertInstanceOf(BasicOutcomeClaim::class, $denormalisation); + $this->assertEquals('id', $denormalisation->getLisResultSourcedId()); + $this->assertEquals('url', $denormalisation->getLisOutcomeServiceUrl()); + } +}