Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ dev/compose.override.yaml
dev/.env

# server files
server/
# ignore: server, server34
server/
server[0-9]*/
13 changes: 8 additions & 5 deletions bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,20 @@
use Composer\Autoload\ClassLoader;

include_once __DIR__.'/vendor/autoload.php';
$serverPath = __DIR__ . '/server';

if (!file_exists($serverPath . '/lib/base.php')) {
$serverPath = getenv('SERVER_PATH') ?: __DIR__ . '/server';
$serverBaseFile = '/lib/base.php';

if (!file_exists($serverPath . $serverBaseFile)) {
$serverPath = __DIR__ . '/../..';
}
if (!file_exists($serverPath . '/lib/base.php')) {
throw new RuntimeException('Server path not found: ' . $serverPath);

if (!file_exists($serverPath . $serverBaseFile)) {
throw new RuntimeException('Server files not found at ' . $serverPath);
}

include_once $serverPath.'/3rdparty/autoload.php';
require_once $serverPath. '/lib/base.php';
require_once $serverPath. $serverBaseFile;

$classLoader = new ClassLoader();
$classLoader->addPsr4("OCA\\OpenProject\\", __DIR__ . '/lib', true);
Expand Down
10 changes: 9 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,15 @@ npm-dev:

.PHONY: psalm
psalm:
composer run psalm
@if [ -n "$$SERVER_PATH" ]; then \
sed -i "s|name=\"server/lib\"|name=\"$$SERVER_PATH/lib\"|g" psalm.xml; \
fi

@composer run psalm || exit_code=$$?; \
if [ -n "$$SERVER_PATH" ]; then \
sed -i "s|name=\"$$SERVER_PATH/lib\"|name=\"server/lib\"|g" psalm.xml; \
fi; \
exit $$exit_code

.PHONY: phpcs
phpcs:
Expand Down
12 changes: 6 additions & 6 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
-->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bootstrap="bootstrap.php"
verbose="true" backupGlobals="false" timeoutForSmallTests="900"
timeoutForMediumTests="900" timeoutForLargeTests="900"
verbose="true"
backupGlobals="false"
timeoutForSmallTests="900"
timeoutForMediumTests="900"
timeoutForLargeTests="900"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage>
<report>
Expand All @@ -18,14 +21,12 @@
<directory suffix=".php">lib</directory>
</include>
</coverage>

<testsuites>
<testsuite name="OpenProject">
<directory suffix=".php">tests/lib/</directory>
</testsuite>
</testsuites>
<php>
<env name="PACT_MOCK_SERVER_PORT" value="7300"/>
<env name="PACT_MOCK_SERVER_HOST" value="localhost"/>
<env name="PACT_CONSUMER_NAME" value="integration_openproject"/>
<env name="PACT_CONSUMER_VERSION" value="1.0.0"/>
Expand All @@ -34,7 +35,6 @@
<env name="PACT_OUTPUT_DIR" value="./tests/pact/"/>
<env name="PACT_LOGLEVEL" value="INFO"/>
<env name="PACT_LOG" value="./tests/pact/pact.log"/>
<!-- <env name="PACT_BROKER_URI" value="http://localhost"/> -->
</php>
<logging/>
</phpunit>
</phpunit>
36 changes: 23 additions & 13 deletions tests/lib/Controller/DirectUploadControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
use OCP\Files\Folder;
use OCP\Files\ForbiddenException as FileAccessForbiddenException;
use OCP\Files\InvalidContentException;
use OCP\Files\IUserFolder;
use OCP\IL10N;
use OCP\IRequest;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use function PHPUnit\Framework\assertSame;

Expand All @@ -23,11 +23,21 @@ class DirectUploadControllerTest extends TestCase {
*/
private $l;

/**
* @return mixed
*/
public function getFolderMock(): mixed {
if (interface_exists(IUserFolder::class)) {
return $this->createMock(IUserFolder::class);
}
return $this->createMock(Folder::class);
}

/**
* @return void
*/
public function testprepareDirectUpload() {
$folderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn($this->getNodeMock('dir'));
$directUploadController = $this->createDirectUploadController($folderMock);
$result = $directUploadController->prepareDirectUpload(123);
Expand All @@ -45,7 +55,7 @@ public function testprepareDirectUpload() {
* @return void
*/
public function testprepareDirectUploadTypeFile(): void {
$folderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn($this->getNodeMock('file'));
$directUploadController = $this->createDirectUploadController($folderMock);
$result = $directUploadController->prepareDirectUpload(123);
Expand All @@ -59,7 +69,7 @@ public function testprepareDirectUploadTypeFile(): void {
}

public function testprepareDirectUploadException(): void {
$folderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->will($this->throwException(new \Exception('something bad happened')));
$directUploadController = $this->createDirectUploadController($folderMock);
Expand Down Expand Up @@ -93,7 +103,7 @@ public function directUploadInvalidTokenDataProvider() {
* @return void
*/
public function testDirectUploadInvalidToken(string $token):void {
$folderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn($this->getNodeMock('folder'));
$directUploadController = $this->createDirectUploadController($folderMock);
$result = $directUploadController->directUpload($token);
Expand All @@ -110,7 +120,7 @@ public function testDirectUploadNotEnoughSpace():void {
$nodeMock = $this->getNodeMock('folder');
$nodeMock[0]->method('getFreeSpace')->willReturn(100);

$userFolderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$userFolderMock = $this->getFolderMock();
$userFolderMock->method('getById')->willReturn($nodeMock);
$directUploadController = $this->createDirectUploadController(
$userFolderMock, 101
Expand Down Expand Up @@ -146,7 +156,7 @@ public function fileNotUploadedDataProvider() {
public function testDirectUploadFileNotUploaded(string $tmpName, int $error):void {
$nodeMock = $this->getNodeMock('folder');

$userFolderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$userFolderMock = $this->getFolderMock();
$userFolderMock->method('getById')->willReturn($nodeMock);
$directUploadController = $this->createDirectUploadController(
$userFolderMock, 100, $tmpName, $error
Expand Down Expand Up @@ -185,7 +195,7 @@ public function testDirectUploadException(
$tmpFileName = '/tmp/integration_openproject_unit_test';
touch($tmpFileName);
$nodeMock[0]->method('newFile')->will($this->throwException($exception));
$userFolderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$userFolderMock = $this->getFolderMock();
$userFolderMock->method('getById')->willReturn($nodeMock);
$directUploadController = $this->createDirectUploadController(
$userFolderMock, 0, $tmpFileName);
Expand Down Expand Up @@ -214,7 +224,7 @@ public function testNegativeFreeSpace(): void {
touch($tmpFileName);
$nodeMock[0]->method('getFreeSpace')->willReturn(-3);
$nodeMock[0]->method('newFile')->willReturn($fileMock);
$userFolderMock = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
$userFolderMock = $this->getFolderMock();
$userFolderMock->method('getById')->willReturn($nodeMock);
$directUploadController = $this->createDirectUploadController(
$userFolderMock, 101, $tmpFileName
Expand All @@ -234,14 +244,14 @@ public function testNegativeFreeSpace(): void {


/**
* @param MockObject $folderMock
* @param mixed $folderMock
* @param int $uploadedFileSize
* @param string $uploadedFileTmpName
* @param int $uploadedFileError
* @return DirectUploadController
*/
private function createDirectUploadController(
MockObject $folderMock,
mixed $folderMock,
int $uploadedFileSize = 9999,
string $uploadedFileTmpName = '/tmp/andjashd',
int $uploadedFileError = 0
Expand Down Expand Up @@ -307,7 +317,7 @@ private function createDirectUploadController(
*
* @param string $type
* @param int $id
* @return array<MockObject|Folder>
* @return array<mixed>
*/
private function getNodeMock(string $type, int $id = 123): array {
$ownerMock = $this->getMockBuilder('\OCP\IUser')->getMock();
Expand All @@ -323,7 +333,7 @@ private function getNodeMock(string $type, int $id = 123): array {
$fileMock->method('getId')->willReturn(123);
$fileMock->method('getStorage')->willReturn($storageMock);

$folderMock = $this->createMock('\OCP\Files\Folder');
$folderMock = $this->getFolderMock();
$folderMock->method('getId')->willReturn($id);
$folderMock->method('getType')->willReturn($type);
$folderMock->method('isCreatable')->willReturn(true);
Expand Down
43 changes: 27 additions & 16 deletions tests/lib/Controller/FilesControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use OCP\Files\Config\IUserMountCache;
use OCP\Files\DavUtil;
use OCP\Files\Folder;
use OCP\Files\IUserFolder;
use OCP\Files\Node;
use OCP\IDBConnection;
use OCP\IRequest;
Expand All @@ -28,6 +29,16 @@
class FilesControllerTest extends TestCase {
use PHPMock;

/**
* @return mixed
*/
public function getFolderMock(): mixed {
if (interface_exists(IUserFolder::class)) {
return $this->createMock(IUserFolder::class);
}
return $this->createMock(Folder::class);
}

/**
* @return array<mixed>
*/
Expand Down Expand Up @@ -104,7 +115,7 @@ public function testGetFileInfo(
$expectedMimeType,
$expectedPath
) {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn($nodeMocks);

$mountCacheMock = $this->getSimpleMountCacheMock($internalPath);
Expand Down Expand Up @@ -136,7 +147,7 @@ public function testGetFileInfo(
}

public function testGetFileInfoFileNotFound(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn([]);

$filesController = $this->createFilesController($folderMock);
Expand All @@ -147,7 +158,7 @@ public function testGetFileInfoFileNotFound(): void {
}

public function testGetFileInfoFileExistingButNotReadable(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn([]);
$mountCacheMock = $this->getMockBuilder(IUserMountCache::class)->getMock();
$mountCacheMock->method('getMountsForFileId')
Expand All @@ -165,7 +176,7 @@ public function testGetFileInfoFileExistingButNotReadable(): void {
}

public function testGetFileInfoFileExistingButCannotGetNameInContextOfOwner(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn(
[$this->getNodeMock('image/png', 586, 'file', '/testUser/files/name-in-the-context-of-requester')]
);
Expand All @@ -186,7 +197,7 @@ public function testGetFileInfoFileExistingButCannotGetNameInContextOfOwner(): v
}

public function testGetFilesInfoFourIdsRequestedOneExistsOneInTrashOneNotExisitingOneForbidden(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap(
[
Expand Down Expand Up @@ -243,7 +254,7 @@ public function testGetFilesInfoFourIdsRequestedOneExistsOneInTrashOneNotExisiti
}

public function testGetFilesInfoOneIdRequestedFileExistsReturnsOneResult(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturn(
[
Expand All @@ -268,7 +279,7 @@ public function testGetFilesInfoOneIdRequestedFileExistsReturnsOneResult(): void
}

public function testGetFilesInfoThreeIdsRequestedOneFileExistsReturnsOneResult(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap(
[
Expand Down Expand Up @@ -312,7 +323,7 @@ public function testGetFilesInfoThreeIdsRequestedOneFileExistsReturnsOneResult()
}

public function testGetFilesInfoTwoIdsRequestedAllFilesExistsEachReturnsOneResult(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap(
[
Expand Down Expand Up @@ -356,7 +367,7 @@ public function testGetFilesInfoTwoIdsRequestedAllFilesExistsEachReturnsOneResul
}

public function testGetFilesInfoTwoIdsRequestedAllFilesExistsEachReturnsMultipleResults(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap(
[
Expand Down Expand Up @@ -401,7 +412,7 @@ public function testGetFilesInfoTwoIdsRequestedAllFilesExistsEachReturnsMultiple
}

public function testGetFilesInfoTwoIdsRequestedEachReturnsOneFolder(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap([
[
Expand Down Expand Up @@ -494,7 +505,7 @@ public function testGetFilesInfoTwoIdsRequestedEachReturnsOneFolder(): void {
}

public function testGetFilesInfoInvalidRequest(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$filesController = $this->createFilesController($folderMock);

$result = $filesController->getFilesInfo(null);
Expand All @@ -506,7 +517,7 @@ public function testGetFilesInfoInvalidRequest(): void {
}

public function testGetFilesInfoSendStringIds(): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturnMap([
[ 2,
Expand Down Expand Up @@ -598,7 +609,7 @@ public function testGetFileInfoWithLastModifier() {
$classExistsMock = $this->getFunctionMock(__NAMESPACE__, "class_exists");
$classExistsMock->expects($this->any())->willReturn(false);

$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')
->willReturn([
$this->getNodeMock('image/png', 1, 'file', '/testUser/files/inFolder/image.png')
Expand Down Expand Up @@ -754,7 +765,7 @@ public function testDavPermissions(
$name,
$path
): void {
$folderMock = $this->getMockBuilder(Folder::class)->getMock();
$folderMock = $this->getFolderMock();
$folderMock->method('getById')->willReturn($nodeMocks);

$mountCacheMock = $this->getSimpleMountCacheMock($path);
Expand Down Expand Up @@ -909,14 +920,14 @@ private function createFilesController(

/**
* @param array<string> $onlyMethods
* @param MockObject $folderMock
* @param mixed $folderMock
* @param MockObject|null $mountCacheMock mock for Files that exist but cannot be accessed by this user
* @param MockObject|null $davUtilsMock
* @return FilesController|MockObject
*/
public function getFilesControllerMock(
array $onlyMethods,
MockObject $folderMock,
mixed $folderMock,
MockObject $mountCacheMock = null,
MockObject $davUtilsMock = null
): FilesController|MockObject {
Expand Down
Loading
Loading