From 081aad9986449ad0136286a66a0dc79457c47425 Mon Sep 17 00:00:00 2001 From: John Okely Date: Fri, 12 May 2017 12:15:25 +0800 Subject: [PATCH] MDL-58898 oauth: Cover orphaned linked logins in unit tests --- auth/oauth2/tests/api_test.php | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 auth/oauth2/tests/api_test.php diff --git a/auth/oauth2/tests/api_test.php b/auth/oauth2/tests/api_test.php new file mode 100644 index 0000000000000..817430ac8cde2 --- /dev/null +++ b/auth/oauth2/tests/api_test.php @@ -0,0 +1,101 @@ +. + +/** + * Auth oauth2 api functions tests. + * + * @package auth_oauth2 + * @copyright 2017 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +/** + * External auth oauth2 API tests. + * + * @package auth_oauth2 + * @copyright 2017 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class auth_oauth2_external_testcase extends advanced_testcase { + + /** + * Test the cleaning of orphaned linked logins for all issuers. + */ + public function test_clean_orphaned_linked_logins() { + $this->resetAfterTest(); + $this->setAdminUser(); + + $issuer = \core\oauth2\api::create_standard_issuer('google'); + \core\oauth2\api::create_standard_issuer('microsoft'); + + $user = $this->getDataGenerator()->create_user(); + $info = []; + $info['username'] = 'banana'; + $info['email'] = 'banana@example.com'; + \auth_oauth2\api::link_login($info, $issuer, $user->id, false); + + \core\oauth2\api::delete_issuer($issuer->get('id')); + + $linkedlogins = \auth_oauth2\api::get_linked_logins($user->id, $issuer); + $this->assertCount(1, $linkedlogins); + + \auth_oauth2\api::clean_orphaned_linked_logins(); + + $linkedlogins = \auth_oauth2\api::get_linked_logins($user->id, $issuer); + $this->assertCount(0, $linkedlogins); + + $match = \auth_oauth2\api::match_username_to_user('banana', $issuer); + $this->assertFalse($match); + } + + /** + * Test the cleaning of orphaned linked logins for a specific issuer. + */ + public function test_clean_orphaned_linked_logins_with_issuer_id() { + $this->resetAfterTest(); + $this->setAdminUser(); + + $issuer1 = \core\oauth2\api::create_standard_issuer('google'); + $issuer2 = \core\oauth2\api::create_standard_issuer('microsoft'); + + $user1 = $this->getDataGenerator()->create_user(); + $info = []; + $info['username'] = 'banana'; + $info['email'] = 'banana@example.com'; + \auth_oauth2\api::link_login($info, $issuer1, $user1->id, false); + + $user2 = $this->getDataGenerator()->create_user(); + $info = []; + $info['username'] = 'apple'; + $info['email'] = 'apple@example.com'; + \auth_oauth2\api::link_login($info, $issuer2, $user2->id, false); + + \core\oauth2\api::delete_issuer($issuer1->get('id')); + + \auth_oauth2\api::clean_orphaned_linked_logins($issuer1->get('id')); + + $linkedlogins = \auth_oauth2\api::get_linked_logins($user1->id, $issuer1); + $this->assertCount(0, $linkedlogins); + + $linkedlogins = \auth_oauth2\api::get_linked_logins($user2->id, $issuer2); + $this->assertCount(1, $linkedlogins); + } + +}