summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2020-10-06 11:22:15 -0400
committerBrian Evans <grknight@gentoo.org>2020-10-06 11:22:15 -0400
commit4a2d3a0b7596731e11ef9257138653bec81d6fd3 (patch)
tree0e33fdfd38e791cc9ffe46f11f954a7dce86d618 /OAuth/tests/phpunit/Repository
parentOpenIDConnect: Fix newly protected function (diff)
downloadextensions-4a2d3a0b7596731e11ef9257138653bec81d6fd3.tar.gz
extensions-4a2d3a0b7596731e11ef9257138653bec81d6fd3.tar.bz2
extensions-4a2d3a0b7596731e11ef9257138653bec81d6fd3.zip
Add OAuth for API access
Signed-off-by: Brian Evans <grknight@gentoo.org>
Diffstat (limited to 'OAuth/tests/phpunit/Repository')
-rw-r--r--OAuth/tests/phpunit/Repository/AccessTokenRepositoryTest.php52
-rw-r--r--OAuth/tests/phpunit/Repository/AuthCodeRepositoryTest.php47
-rw-r--r--OAuth/tests/phpunit/Repository/ScopeRepositoryTest.php30
3 files changed, 129 insertions, 0 deletions
diff --git a/OAuth/tests/phpunit/Repository/AccessTokenRepositoryTest.php b/OAuth/tests/phpunit/Repository/AccessTokenRepositoryTest.php
new file mode 100644
index 00000000..084c30b3
--- /dev/null
+++ b/OAuth/tests/phpunit/Repository/AccessTokenRepositoryTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace MediaWiki\Extensions\OAuth\Tests\Repository;
+
+use MediaWiki\Extensions\OAuth\Entity\AccessTokenEntity;
+use MediaWiki\Extensions\OAuth\Repository\AccessTokenRepository;
+use MediaWiki\Extensions\OAuth\Tests\Entity\Mock_ClientEntity;
+use MediaWikiTestCase;
+
+/**
+ * @covers \MediaWiki\Extensions\OAuth\Repository\AccessTokenRepository
+ * @group Database
+ */
+class AccessTokenRepositoryTest extends MediaWikiTestCase {
+ protected $accessToken;
+ protected $accessTokenRepo;
+
+ protected $tablesUsed = [ 'oauth2_access_tokens' ];
+
+ protected function setUp() : void {
+ parent::setUp();
+
+ $this->accessToken = new AccessTokenEntity(
+ Mock_ClientEntity::newMock( $this->getTestUser()->getUser() ), []
+ );
+ $identifier = bin2hex( random_bytes( 40 ) );
+ $this->accessToken->setIdentifier( $identifier );
+ $this->accessToken->setExpiryDateTime(
+ ( new \DateTimeImmutable() )->add( new \DateInterval( 'PT1H' ) )
+ );
+
+ $this->accessTokenRepo = new AccessTokenRepository();
+ }
+
+ public function testPersistingToken() {
+ $this->accessTokenRepo->persistNewAccessToken( $this->accessToken );
+
+ $this->assertFalse(
+ $this->accessTokenRepo->isAccessTokenRevoked( $this->accessToken->getIdentifier() ),
+ 'Access token should not be revoked'
+ );
+ }
+
+ public function testRevokingToken() {
+ $this->accessTokenRepo->revokeAccessToken( $this->accessToken->getIdentifier() );
+
+ $this->assertTrue(
+ $this->accessTokenRepo->isAccessTokenRevoked( $this->accessToken->getIdentifier() ),
+ 'Access token should be revoked'
+ );
+ }
+}
diff --git a/OAuth/tests/phpunit/Repository/AuthCodeRepositoryTest.php b/OAuth/tests/phpunit/Repository/AuthCodeRepositoryTest.php
new file mode 100644
index 00000000..2d2dc431
--- /dev/null
+++ b/OAuth/tests/phpunit/Repository/AuthCodeRepositoryTest.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace MediaWiki\Extensions\OAuth\Tests\Repository;
+
+use MediaWiki\Extensions\OAuth\Repository\AuthCodeRepository;
+use MediaWiki\Extensions\OAuth\Tests\Entity\Mock_ClientEntity;
+use MediaWikiTestCase;
+
+/**
+ * @covers \MediaWiki\Extensions\OAuth\Repository\AuthCodeRepository
+ */
+class AuthCodeRepositoryTest extends MediaWikiTestCase {
+ protected $authCodeToken;
+ protected $authCodeTokenRepo;
+
+ protected function setUp() : void {
+ parent::setUp();
+
+ $this->authCodeTokenRepo = AuthCodeRepository::factory();
+ $this->authCodeToken = $this->authCodeTokenRepo->getNewAuthCode();
+ $this->authCodeToken->setIdentifier( bin2hex( random_bytes( 20 ) ) );
+ $this->authCodeToken->setClient(
+ Mock_ClientEntity::newMock( $this->getTestUser()->getUser() )
+ );
+ $this->authCodeToken->setExpiryDateTime(
+ ( new \DateTimeImmutable() )->add( new \DateInterval( 'PT1H' ) )
+ );
+ }
+
+ public function testPersistingToken() {
+ $this->authCodeTokenRepo->persistNewAuthCode( $this->authCodeToken );
+
+ $this->assertFalse(
+ $this->authCodeTokenRepo->isAuthCodeRevoked( $this->authCodeToken->getIdentifier() ),
+ 'AuthCode token must be persisted'
+ );
+ }
+
+ public function testRevokingToken() {
+ $this->authCodeTokenRepo->revokeAuthCode( $this->authCodeToken->getIdentifier() );
+
+ $this->assertTrue(
+ $this->authCodeTokenRepo->isAuthCodeRevoked( $this->authCodeToken->getIdentifier() ),
+ 'AuthCode token should be revoked'
+ );
+ }
+}
diff --git a/OAuth/tests/phpunit/Repository/ScopeRepositoryTest.php b/OAuth/tests/phpunit/Repository/ScopeRepositoryTest.php
new file mode 100644
index 00000000..41196aef
--- /dev/null
+++ b/OAuth/tests/phpunit/Repository/ScopeRepositoryTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace MediaWiki\Extensions\OAuth\Tests\Repository;
+
+use MediaWiki\Extensions\OAuth\Entity\ScopeEntity;
+use MediaWiki\Extensions\OAuth\Repository\ScopeRepository;
+use MediaWikiTestCase;
+
+/**
+ * @covers \MediaWiki\Extensions\OAuth\Repository\ScopeRepository
+ */
+class ScopeRepositoryTest extends MediaWikiTestCase {
+ public function testScopes() {
+ $repo = new ScopeRepository();
+
+ $this->assertInstanceOf(
+ ScopeEntity::class, $repo->getScopeEntityByIdentifier( 'editpage' ),
+ 'Scope \"editpage\" should be a valid scope'
+ );
+ $this->assertInstanceOf(
+ ScopeEntity::class, $repo->getScopeEntityByIdentifier( 'mwoauth-authonlyprivate' ),
+ 'Scope \"mwoauth-authonlyprivate\" should be a valid scope'
+ );
+
+ $this->assertNotInstanceOf(
+ ScopeEntity::class, $repo->getScopeEntityByIdentifier( 'dummynonexistent' ),
+ 'Scope \"dummynonexistent\" should not be a valid scope'
+ );
+ }
+}