nextcloud-gallery/tests/api/GetFilesCest.php

216 lines
6.0 KiB
PHP

<?php
/**
* Nextcloud - Gallery
*
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Olivier Paroz <galleryapps@oparoz.com>
*
* @copyright Olivier Paroz 2017
*/
use Page\Gallery as GalleryApp;
/**
* Class GetFilesCest
*
* @todo Match the original structure
*/
class GetFilesCest {
private $apiUrl;
private $params;
/**
* Sets up the environment for this series of tests
*
* We use custom methods defined in _support/Helper/Api
* If these are re-usable across suites, they may move to _support/Step
*
* @param ApiTester $I
*/
public function _before(ApiTester $I) {
$this->apiUrl = GalleryApp::$URL . 'api/files/list';
list($mediaTypes) = $I->getMediaTypes();
$this->params = [
'mediatypes' => implode(';', $mediaTypes)
];
}
public function _after(ApiTester $I) {
}
/**
* Connects to the API as an anonymous user
*
* @param \Step\Api\Anonymous $I
*/
public function unauthorizedAccess(\Step\Api\Anonymous $I) {
$I->connectToTheApi($this->apiUrl, 'the files/list API');
}
public function getStandardList(\Step\Api\User $I) {
$I->am('an app');
$I->wantTo('get the list of available media files');
$I->getUserCredentialsAndUseHttpAuthentication();
$I->sendGET($this->apiUrl, $this->params);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseJsonMatchesJsonPath('$.files[*]..path]');
$I->seeResponseJsonMatchesJsonPath('$.albums[*]..path]');
$I->dontSeeResponseContainsJson(['path' => 'folder2/testimagelarge.svg']);
// Folder 4 contains the .nomedia file
$I->dontSeeResponseContainsJson(['path' => 'folder4']);
$I->seeResponseContainsJson(
[
'design' => [
'background' => '#ff9f00',
'inherit' => 'yes',
'level' => 0,
],
'information' =>
[
// You have to use double-quotes here in order to be able to insert the line return
'description' => "# This is the official **Gallery** sample folder\xA" .
"Contribute to this project [on Github](https://github.com/nextcloud/gallery)\xA",
'copyright' => 'Copyright 2014-2015 [Acme](http://www.nextcloud.ninja)',
'inherit' => 'yes',
'level' => 0,
],
'sorting' =>
[
'type' => 'date',
'order' => 'des',
'inherit' => 'yes',
'level' => 0,
],
]
);
$I->seeResponseContainsJson(['albumpath' => '']);
$I->seeResponseContainsJson(['updated' => true]);
}
/**
* @depends getStandardList
*
* @param \Step\Api\User $I
*/
public function getListWithNativeSvgEnabled(\Step\Api\User $I) {
$mediaTypes = $this->params['mediatypes'];
$params = ['mediatypes' => $mediaTypes . ';image/svg+xml'];
$I->am('an app');
$I->wantTo('get the list of available media files which should include SVGs');
$I->getUserCredentialsAndUseHttpAuthentication();
$I->sendGET($this->apiUrl, $params);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['path' => 'folder2/testimagelarge.svg']);
}
public function getListOfRootWhenGivenBogusPath(\Step\Api\User $I) {
$params = $this->params;
$params['location'] = '/completely/lost in/tests';
$I->am('an app');
$I->wantTo(
'get the list of files of the root folder when typing a deep path which is completely wrong'
);
$I->getUserCredentialsAndUseHttpAuthentication();
$I->sendGET($this->apiUrl, $params);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['path' => 'testimage-corrupt.jpg']);
$I->seeResponseContainsJson(['albumpath' => '']);
$I->seeResponseContainsJson(['updated' => true]);
}
public function getListOfParentFolderWhenFolderHasTypo(\Step\Api\User $I) {
$params = $this->params;
// This doesn't match any path in the filesystem, the correct path is
// /folder1/shared1/shared1.1, containing testimage.png
$params['location'] = 'folder1/shared1/shared1.2';
// This is the path which will be used instead
$parentPath = 'folder1/shared1';
$I->am('an app');
$I->wantTo(
'get the list of files of the parent folder when the last folder contains a typo'
);
$I->getUserCredentialsAndUseHttpAuthentication();
$I->sendGET($this->apiUrl, $params);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
// /folder1/shared1 only contains 2 files. Warning, alphabetical order
$I->seeResponseContainsJson(
[
'path' => $parentPath . '/testimage.eps',
'sharedwithuser' => false,
'owner' => [
'uid' => 'tester',
'displayname' => 'Gallery Tester (tester)'
],
'permissions' => 27,
'mimetype' => 'application/postscript'
]
);
$I->seeResponseContainsJson(
[
'path' => $parentPath . '/testimage.gif',
'sharedwithuser' => false,
'owner' => [
'uid' => 'tester',
'displayname' => 'Gallery Tester (tester)'
],
'permissions' => 27,
'mimetype' => 'image/gif'
]
);
$I->seeResponseJsonMatchesJsonPath('$.albums[*]..path]');
$I->seeResponseContainsJson(
[
'path' => $parentPath,
'sharedwithuser' => false,
'owner' => [
'uid' => 'tester',
'displayname' => 'Gallery Tester (tester)'
],
'permissions' => 31
]
);
$I->seeResponseContainsJson(['albumpath' => $parentPath]);
$I->seeResponseContainsJson(['updated' => true]);
}
public function getListOfForbiddenPath(\Step\Api\User $I) {
$params = $this->params;
// This folder contains a .nomedia file
$params['location'] = 'folder4';
$I->am('an app');
$I->wantTo(
'get the list of files of a folder which contains the .nomedia file'
);
$I->getUserCredentialsAndUseHttpAuthentication();
$I->sendGET($this->apiUrl, $params);
$statusCode = 403;
$I->seeResponseCodeIs($statusCode);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(
[
'message' => 'The owner has placed a restriction or the storage location is unavailable ('
. $statusCode . ')'
]
);
}
}