2015-08-22 15:36:01 +03:00
< ? php
/**
2016-07-21 17:49:16 +03:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
* @ author Joas Schilling < coding @ schilljs . com >
2016-05-26 20:56:05 +03:00
* @ author Lukas Reschke < lukas @ statuscode . ch >
2016-07-21 17:49:16 +03:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2015-08-22 15:36:01 +03:00
*
* @ license AGPL - 3.0
*
* This code is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License , version 3 ,
* as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License , version 3 ,
2019-12-03 21:57:53 +03:00
* along with this program . If not , see < http :// www . gnu . org / licenses />
2015-08-22 15:36:01 +03:00
*
*/
2016-05-17 12:42:03 +03:00
namespace OCA\Files_Sharing\Tests\Controllers ;
2015-08-22 15:36:01 +03:00
2016-10-24 12:46:25 +03:00
use OCA\Files_Sharing\Controller\ExternalSharesController ;
2015-08-22 15:36:01 +03:00
use OCP\AppFramework\Http\DataResponse ;
use OCP\AppFramework\Http\JSONResponse ;
use OCP\Http\Client\IClientService ;
use OCP\IRequest ;
2020-03-12 15:43:29 +03:00
use OCP\Http\Client\IResponse ;
use OCP\Http\Client\IClient ;
use OCA\Files_Sharing\External\Manager ;
2015-08-22 15:36:01 +03:00
/**
* Class ExternalShareControllerTest
*
* @ package OCA\Files_Sharing\Controllers
*/
class ExternalShareControllerTest extends \Test\TestCase {
/** @var IRequest */
private $request ;
/** @var \OCA\Files_Sharing\External\Manager */
private $externalManager ;
/** @var IClientService */
private $clientService ;
2019-11-27 17:27:18 +03:00
protected function setUp () : void {
2016-05-17 12:42:03 +03:00
parent :: setUp ();
2020-03-12 15:43:29 +03:00
$this -> request = $this -> createMock ( IRequest :: class );
$this -> externalManager = $this -> createMock ( Manager :: class );
$this -> clientService = $this -> createMock ( IClientService :: class );
2015-08-22 15:36:01 +03:00
}
/**
* @ return ExternalSharesController
*/
public function getExternalShareController () {
return new ExternalSharesController (
'files_sharing' ,
$this -> request ,
$this -> externalManager ,
$this -> clientService
);
}
2015-10-02 10:57:33 +03:00
public function testIndex () {
2015-08-22 15:36:01 +03:00
$this -> externalManager
-> expects ( $this -> once ())
-> method ( 'getOpenShares' )
2020-03-12 15:43:29 +03:00
-> willReturn ([ 'MyDummyArray' ]);
2015-08-22 15:36:01 +03:00
$this -> assertEquals ( new JSONResponse ([ 'MyDummyArray' ]), $this -> getExternalShareController () -> index ());
}
2015-10-02 10:57:33 +03:00
public function testCreate () {
2015-08-22 15:36:01 +03:00
$this -> externalManager
-> expects ( $this -> once ())
-> method ( 'acceptShare' )
-> with ( 4 );
$this -> assertEquals ( new JSONResponse (), $this -> getExternalShareController () -> create ( 4 ));
}
2015-10-02 10:57:33 +03:00
public function testDestroy () {
2015-08-22 15:36:01 +03:00
$this -> externalManager
-> expects ( $this -> once ())
-> method ( 'declineShare' )
-> with ( 4 );
$this -> assertEquals ( new JSONResponse (), $this -> getExternalShareController () -> destroy ( 4 ));
}
public function testRemoteWithValidHttps () {
2020-03-12 15:43:29 +03:00
$client = $this -> createMock ( IClient :: class );
$response = $this -> createMock ( IResponse :: class );
2015-08-22 15:36:01 +03:00
$response
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 2 ))
2015-08-22 15:36:01 +03:00
-> method ( 'getBody' )
2020-03-12 15:43:29 +03:00
-> willReturnOnConsecutiveCalls (
[ 'Certainly not a JSON string' ],
[ '{"installed":true,"maintenance":false,"version":"8.1.0.8","versionstring":"8.1.0","edition":""}' ]
);
2016-02-29 23:52:43 +03:00
$client
-> expects ( $this -> any ())
-> method ( 'get' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $response );
2015-08-22 15:36:01 +03:00
$this -> clientService
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 2 ))
2015-08-22 15:36:01 +03:00
-> method ( 'newClient' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $client );
2015-08-22 15:36:01 +03:00
2020-03-12 15:43:29 +03:00
$this -> assertEquals ( new DataResponse ( 'https' ), $this -> getExternalShareController () -> testRemote ( 'nextcloud.com' ));
2015-08-22 15:36:01 +03:00
}
public function testRemoteWithWorkingHttp () {
2020-03-12 15:43:29 +03:00
$client = $this -> createMock ( IClient :: class );
$response = $this -> createMock ( IResponse :: class );
2015-08-22 15:36:01 +03:00
$client
-> method ( 'get' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $response );
2015-08-22 15:36:01 +03:00
$response
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 5 ))
2015-08-22 15:36:01 +03:00
-> method ( 'getBody' )
2016-02-29 23:52:43 +03:00
-> will ( $this -> onConsecutiveCalls ( 'Certainly not a JSON string' , 'Certainly not a JSON string' , 'Certainly not a JSON string' , 'Certainly not a JSON string' , '{"installed":true,"maintenance":false,"version":"8.1.0.8","versionstring":"8.1.0","edition":""}' ));
2015-08-22 15:36:01 +03:00
$this -> clientService
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 5 ))
2015-08-22 15:36:01 +03:00
-> method ( 'newClient' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $client );
2015-08-22 15:36:01 +03:00
2020-03-12 15:43:29 +03:00
$this -> assertEquals ( new DataResponse ( 'http' ), $this -> getExternalShareController () -> testRemote ( 'nextcloud.com' ));
2015-08-22 15:36:01 +03:00
}
public function testRemoteWithInvalidRemote () {
2020-03-12 15:43:29 +03:00
$client = $this -> createMock ( IClient :: class );
$response = $this -> createMock ( IResponse :: class );
2015-08-22 15:36:01 +03:00
$client
2020-03-12 15:43:29 +03:00
-> expects ( $this -> exactly ( 6 ))
2015-08-22 15:36:01 +03:00
-> method ( 'get' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $response );
2015-08-22 15:36:01 +03:00
$response
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 6 ))
2015-08-22 15:36:01 +03:00
-> method ( 'getBody' )
2020-03-12 15:43:29 +03:00
-> willReturn ( 'Certainly not a JSON string' );
2015-08-22 15:36:01 +03:00
$this -> clientService
2016-02-29 23:52:43 +03:00
-> expects ( $this -> exactly ( 6 ))
2015-08-22 15:36:01 +03:00
-> method ( 'newClient' )
2020-03-12 15:43:29 +03:00
-> willReturn ( $client );
$this -> assertEquals ( new DataResponse ( false ), $this -> getExternalShareController () -> testRemote ( 'nextcloud.com' ));
}
public function dataRemoteWithInvalidRemoteURLs () : array {
return [
[ 'nextcloud.com?query' ],
[ 'nextcloud.com/#anchor' ],
];
}
/**
* @ dataProvider dataRemoteWithInvalidRemoteURLs
* @ param string $remote
*/
public function testRemoteWithInvalidRemoteURLs ( string $remote ) {
$this -> clientService
-> expects ( $this -> never ())
-> method ( 'newClient' );
2015-08-22 15:36:01 +03:00
2020-03-12 15:43:29 +03:00
$this -> assertEquals ( new DataResponse ( false ), $this -> getExternalShareController () -> testRemote ( $remote ));
2015-08-22 15:36:01 +03:00
}
}