|
|
|
|
@ -24,92 +24,11 @@ declare(strict_types=1); |
|
|
|
|
|
|
|
|
|
namespace Test\Security; |
|
|
|
|
|
|
|
|
|
use OC\Security\CredentialsManager; |
|
|
|
|
use OCP\DB\IResult; |
|
|
|
|
use OCP\DB\QueryBuilder\IExpressionBuilder; |
|
|
|
|
use OCP\DB\QueryBuilder\IQueryBuilder; |
|
|
|
|
use OCP\IDBConnection; |
|
|
|
|
use OCP\Security\ICrypto; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @group DB |
|
|
|
|
*/ |
|
|
|
|
class CredentialsManagerTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
/** @var ICrypto */ |
|
|
|
|
protected $crypto; |
|
|
|
|
|
|
|
|
|
/** @var IDBConnection */ |
|
|
|
|
protected $dbConnection; |
|
|
|
|
|
|
|
|
|
/** @var CredentialsManager */ |
|
|
|
|
protected $manager; |
|
|
|
|
|
|
|
|
|
protected function setUp(): void { |
|
|
|
|
parent::setUp(); |
|
|
|
|
$this->crypto = $this->createMock(ICrypto::class); |
|
|
|
|
$this->dbConnection = $this->getMockBuilder(IDBConnection::class) |
|
|
|
|
->disableOriginalConstructor() |
|
|
|
|
->getMock(); |
|
|
|
|
$this->manager = new CredentialsManager($this->crypto, $this->dbConnection); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function getQueryResult($row) { |
|
|
|
|
$result = $this->createMock(IResult::class); |
|
|
|
|
|
|
|
|
|
$result->expects($this->any()) |
|
|
|
|
->method('fetch') |
|
|
|
|
->willReturn($row); |
|
|
|
|
|
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testStore() { |
|
|
|
|
$userId = 'abc'; |
|
|
|
|
$identifier = 'foo'; |
|
|
|
|
$credentials = 'bar'; |
|
|
|
|
|
|
|
|
|
$this->crypto->expects($this->once()) |
|
|
|
|
->method('encrypt') |
|
|
|
|
->with(json_encode($credentials)) |
|
|
|
|
->willReturn('baz'); |
|
|
|
|
|
|
|
|
|
$this->dbConnection->expects($this->once()) |
|
|
|
|
->method('setValues') |
|
|
|
|
->with(CredentialsManager::DB_TABLE, |
|
|
|
|
['user' => $userId, 'identifier' => $identifier], |
|
|
|
|
['credentials' => 'baz'] |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$this->manager->store($userId, $identifier, $credentials); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testRetrieve() { |
|
|
|
|
$userId = 'abc'; |
|
|
|
|
$identifier = 'foo'; |
|
|
|
|
|
|
|
|
|
$this->crypto->expects($this->once()) |
|
|
|
|
->method('decrypt') |
|
|
|
|
->with('baz') |
|
|
|
|
->willReturn(json_encode('bar')); |
|
|
|
|
|
|
|
|
|
$eb = $this->createMock(IExpressionBuilder::class); |
|
|
|
|
$qb = $this->createMock(IQueryBuilder::class); |
|
|
|
|
$qb->method('select')->willReturnSelf(); |
|
|
|
|
$qb->method('from')->willReturnSelf(); |
|
|
|
|
$qb->method('where')->willReturnSelf(); |
|
|
|
|
$qb->method('expr')->willReturn($eb); |
|
|
|
|
$qb->expects($this->once()) |
|
|
|
|
->method('execute') |
|
|
|
|
->willReturn($this->getQueryResult(['credentials' => 'baz'])); |
|
|
|
|
|
|
|
|
|
$this->dbConnection->expects($this->once()) |
|
|
|
|
->method('getQueryBuilder') |
|
|
|
|
->willReturn($qb); |
|
|
|
|
|
|
|
|
|
$this->manager->retrieve($userId, $identifier); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @dataProvider credentialsProvider |
|
|
|
|
*/ |
|
|
|
|
|