From 51ec496f75686c5a4d0b1946c0f0e595eaae180a Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Mon, 22 Feb 2021 16:20:49 +0100 Subject: [PATCH] MDL-70963 core_badges: Use expected JSON format for OBv2.1 This patch adds some changes to guarantee that OpenBadges 2.1 (OBv2.1) will return always the same JSON format that OBv2.0 (because the only difference between both versions it's the BadgeConnect API). --- badges/assertion.php | 2 +- badges/classes/assertion.php | 4 ++-- badges/tests/badgeslib_test.php | 12 +++++++++++- badges/tests/events_test.php | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/badges/assertion.php b/badges/assertion.php index 0c41062851e..29f1d9ec82f 100644 --- a/badges/assertion.php +++ b/badges/assertion.php @@ -52,7 +52,7 @@ if (!is_null($action)) { } else { // Revoked badge. header("HTTP/1.0 410 Gone"); $assertion = array(); - if ($obversion == OPEN_BADGES_V2) { + if ($obversion >= OPEN_BADGES_V2) { $assertionurl = new moodle_url('/badges/assertion.php', array('b' => $hash)); $assertion['id'] = $assertionurl->out(); } diff --git a/badges/classes/assertion.php b/badges/classes/assertion.php index 9121b9d9fbc..bbfa50b4f0c 100644 --- a/badges/classes/assertion.php +++ b/badges/classes/assertion.php @@ -128,7 +128,7 @@ class core_badges_assertion { $email = empty($this->_data->backpackemail) ? $this->_data->email : $this->_data->backpackemail; $assertionurl = new moodle_url('/badges/assertion.php', array('b' => $hash, 'obversion' => $this->_obversion)); - if ($this->_obversion == OPEN_BADGES_V2) { + if ($this->_obversion >= OPEN_BADGES_V2) { $classurl = new moodle_url('/badges/badge_json.php', array('id' => $this->get_badge_id())); } else { $classurl = new moodle_url('/badges/assertion.php', array('b' => $hash, 'action' => 1)); @@ -325,7 +325,7 @@ class core_badges_assertion { */ protected function embed_data_badge_version2 (&$json, $type = OPEN_BADGES_V2_TYPE_ASSERTION) { // Specification Version 2.0. - if ($this->_obversion == OPEN_BADGES_V2) { + if ($this->_obversion >= OPEN_BADGES_V2) { $badge = new badge($this->_data->id); if (empty($this->_data->courseid)) { $context = context_system::instance(); diff --git a/badges/tests/badgeslib_test.php b/badges/tests/badgeslib_test.php index 475f818658f..fa0baa75c14 100644 --- a/badges/tests/badgeslib_test.php +++ b/badges/tests/badgeslib_test.php @@ -32,7 +32,7 @@ require_once($CFG->dirroot . '/badges/lib.php'); use core_badges\helper; -class core_badges_badgeslib_testcase extends advanced_testcase { +class badgeslib_test extends advanced_testcase { protected $badgeid; protected $course; protected $user; @@ -698,6 +698,16 @@ class core_badges_badgeslib_testcase extends advanced_testcase { $this->assertStringMatchesFormat($testassertion2->badge, json_encode($assertion2->get_badge_assertion())); $this->assertStringMatchesFormat($testassertion2->class, json_encode($assertion2->get_badge_class())); $this->assertStringMatchesFormat($testassertion2->issuer, json_encode($assertion2->get_issuer())); + + // Test Openbadge specification version 2.1. It has the same format as OBv2.0. + // Get assertion version 2.1. + $award = reset($awards); + $assertion2 = new core_badges_assertion($award->uniquehash, OPEN_BADGES_V2P1); + + // Make sure JSON strings have the same structure. + $this->assertStringMatchesFormat($testassertion2->badge, json_encode($assertion2->get_badge_assertion())); + $this->assertStringMatchesFormat($testassertion2->class, json_encode($assertion2->get_badge_class())); + $this->assertStringMatchesFormat($testassertion2->issuer, json_encode($assertion2->get_issuer())); } /** diff --git a/badges/tests/events_test.php b/badges/tests/events_test.php index e6c464fb67b..ab411a9b542 100644 --- a/badges/tests/events_test.php +++ b/badges/tests/events_test.php @@ -31,7 +31,7 @@ require_once($CFG->dirroot . '/badges/tests/badgeslib_test.php'); * @copyright 2015 onwards Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class core_badges_events_testcase extends core_badges_badgeslib_testcase { +class events_test extends badgeslib_test { /** * Test badge awarded event.