Browse Source
chore: add file conversion integration tests
chore: add file conversion integration tests
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>pull/50208/head
7 changed files with 189 additions and 13 deletions
-
1.github/workflows/integration-sqlite.yml
-
36build/integration/config/behat.yml
-
BINbuild/integration/data/clouds.jpg
-
2build/integration/data/clouds.jpg.license
-
3build/integration/features/bootstrap/BasicStructure.php
-
59build/integration/features/bootstrap/ConversionsContext.php
-
101build/integration/file_conversions/file_conversions.feature
|
After Width: 6016 | Height: 4016 | Size: 526 KiB |
@ -0,0 +1,2 @@ |
|||
SPDX-FileCopyrightText: 2019 CHUTTERSNAP <https://unsplash.com/@chuttersnap> <https://unsplash.com/photos/blue-clouds-under-white-sky-9AqIdzEc9pY>" |
|||
SPDX-License-Identifier: LicenseRef-Unsplash |
|||
@ -0,0 +1,59 @@ |
|||
<?php |
|||
/** |
|||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc. |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
require __DIR__ . '/../../vendor/autoload.php'; |
|||
|
|||
use Behat\Behat\Context\Context; |
|||
use Behat\Behat\Context\SnippetAcceptingContext; |
|||
use Behat\Gherkin\Node\TableNode; |
|||
|
|||
class ConversionsContext implements Context, SnippetAcceptingContext { |
|||
use AppConfiguration; |
|||
use BasicStructure; |
|||
use WebDav; |
|||
|
|||
/** @BeforeScenario */ |
|||
public function setUpScenario() { |
|||
$this->asAn('admin'); |
|||
$this->setStatusTestingApp(true); |
|||
} |
|||
|
|||
/** @AfterScenario */ |
|||
public function tearDownScenario() { |
|||
$this->asAn('admin'); |
|||
$this->setStatusTestingApp(false); |
|||
} |
|||
|
|||
protected function resetAppConfigs() { |
|||
} |
|||
|
|||
/** |
|||
* @When /^user "([^"]*)" converts file "([^"]*)" to "([^"]*)"$/
|
|||
*/ |
|||
public function userConvertsTheSavedFileId(string $user, string $path, string $mime) { |
|||
$this->userConvertsTheSavedFileIdTo($user, $path, $mime, null); |
|||
} |
|||
|
|||
/** |
|||
* @When /^user "([^"]*)" converts file "([^"]*)" to "([^"]*)" and saves it to "([^"]*)"$/ |
|||
*/ |
|||
public function userConvertsTheSavedFileIdTo(string $user, string $path, string $mime, ?string $destination) { |
|||
try { |
|||
$fileId = $this->getFileIdForPath($user, $path); |
|||
} catch (Exception $e) { |
|||
// return a fake value to keep going and be able to test the error
|
|||
$fileId = 0; |
|||
} |
|||
|
|||
$data = [['fileId', $fileId], ['targetMimeType', $mime]]; |
|||
if ($destination !== null) { |
|||
$data[] = ['destination', $destination]; |
|||
} |
|||
|
|||
$this->asAn($user); |
|||
$this->sendingToWith('post', '/apps/files/api/v1/convert', new TableNode($data)); |
|||
} |
|||
} |
|||
@ -0,0 +1,101 @@ |
|||
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors |
|||
# SPDX-License-Identifier: AGPL-3.0-only |
|||
|
|||
Feature: conversions |
|||
Background: |
|||
Given using api version "2" |
|||
Given using new dav path |
|||
Given user "user0" exists |
|||
|
|||
Scenario: Converting a file works |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
When user "user0" converts file "/image.jpg" to "image/png" |
|||
Then the HTTP status code should be "201" |
|||
Then the OCS status code should be "201" |
|||
Then as "user0" the file "/image.png" exists |
|||
|
|||
Scenario: Converting a file to a given path works |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
And User "user0" created a folder "/folder" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the folder "/folder" exists |
|||
When user "user0" converts file "/image.jpg" to "image/png" and saves it to "/folder/image.png" |
|||
Then the HTTP status code should be "201" |
|||
Then the OCS status code should be "201" |
|||
Then as "user0" the file "/folder/image.png" exists |
|||
Then as "user0" the file "/image.png" does not exist |
|||
|
|||
Scenario: Converting a file path with overwrite |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
And user "user0" uploads file "data/green-square-256.png" to "/image.png" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the file "/image.png" exists |
|||
When user "user0" converts file "/image.jpg" to "image/png" |
|||
Then the HTTP status code should be "201" |
|||
Then the OCS status code should be "201" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the file "/image.png" exists |
|||
Then as "user0" the file "/image (2).png" exists |
|||
|
|||
Scenario: Converting a file path with overwrite to a given path |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
And User "user0" created a folder "/folder" |
|||
And user "user0" uploads file "data/green-square-256.png" to "/folder/image.png" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the folder "/folder" exists |
|||
Then as "user0" the file "/folder/image.png" exists |
|||
When user "user0" converts file "/image.jpg" to "image/png" and saves it to "/folder/image.png" |
|||
Then the HTTP status code should be "201" |
|||
Then the OCS status code should be "201" |
|||
Then as "user0" the file "/folder/image.png" exists |
|||
Then as "user0" the file "/folder/image (2).png" exists |
|||
Then as "user0" the file "/image.png" does not exist |
|||
Then as "user0" the file "/image.jpg" exists |
|||
|
|||
Scenario: Converting a file which does not exist fails |
|||
When user "user0" converts file "/image.jpg" to "image/png" |
|||
Then the HTTP status code should be "404" |
|||
Then the OCS status code should be "404" |
|||
Then as "user0" the file "/image.jpg" does not exist |
|||
Then as "user0" the file "/image.png" does not exist |
|||
|
|||
Scenario: Converting a file to an invalid destination path fails |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
When user "user0" converts file "/image.jpg" to "image/png" and saves it to "/folder/image.png" |
|||
Then the HTTP status code should be "404" |
|||
Then the OCS status code should be "404" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the file "/folder/image.png" does not exist |
|||
|
|||
Scenario: Converting a file to an invalid format fails |
|||
Given user "user0" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
When user "user0" converts file "/image.jpg" to "image/invalid" |
|||
Then the HTTP status code should be "500" |
|||
Then the OCS status code should be "999" |
|||
Then as "user0" the file "/image.jpg" exists |
|||
Then as "user0" the file "/image.png" does not exist |
|||
|
|||
Scenario: Forbid conversion to a destination without create permission |
|||
Given user "user1" exists |
|||
# Share the folder with user1 |
|||
Given User "user0" created a folder "/folder" |
|||
Then As an "user0" |
|||
When creating a share with |
|||
| path | folder | |
|||
| shareWith | user1 | |
|||
| shareType | 0 | |
|||
| permissions | 1 | |
|||
Then the OCS status code should be "200" |
|||
And the HTTP status code should be "200" |
|||
# Create the folder, upload the image |
|||
Then As an "user1" |
|||
Given user "user1" accepts last share |
|||
Given as "user1" the folder "/folder" exists |
|||
Given user "user1" uploads file "data/clouds.jpg" to "/image.jpg" |
|||
Then as "user1" the file "/image.jpg" exists |
|||
# Try to convert the image to a folder where user1 has no create permission |
|||
When user "user1" converts file "/image.jpg" to "image/png" and saves it to "/folder/folder.png" |
|||
Then the OCS status code should be "403" |
|||
And the HTTP status code should be "403" |
|||
Then as "user1" the file "/folder/folder.png" does not exist |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue