Skip to content

Commit

Permalink
chore: add file conversion integration tests
Browse files Browse the repository at this point in the history
Signed-off-by: skjnldsv <[email protected]>
  • Loading branch information
skjnldsv committed Jan 16, 2025
1 parent 7cbcbdc commit 19ce362
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 13 deletions.
1 change: 1 addition & 0 deletions .github/workflows/integration-sqlite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ jobs:
- 'federation_features'
- '--tags ~@large files_features'
- 'filesdrop_features'
- 'file_conversions'
- 'openldap_features'
- 'openldap_numerical_features'
- 'ldap_features'
Expand Down
36 changes: 23 additions & 13 deletions build/integration/config/behat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ default:
- "%paths.base%/../features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -39,7 +39,7 @@ default:
- "%paths.base%/../comments_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -62,7 +62,7 @@ default:
- "%paths.base%/../dav_features"
contexts:
- DavFeatureContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -85,7 +85,7 @@ default:
- "%paths.base%/../federation_features"
contexts:
- FederationContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -95,7 +95,7 @@ default:
- "%paths.base%/../files_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -113,12 +113,22 @@ default:
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
files_conversion:
paths:
- "%paths.base%/../file_conversions"
contexts:
- ConversionsContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
capabilities:
paths:
- "%paths.base%/../capabilities_features"
contexts:
- CapabilitiesContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -128,7 +138,7 @@ default:
- "%paths.base%/../collaboration_features"
contexts:
- CollaborationContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -138,7 +148,7 @@ default:
- "%paths.base%/../sharees_features"
contexts:
- ShareesContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -148,7 +158,7 @@ default:
- "%paths.base%/../sharing_features"
contexts:
- SharingContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -159,7 +169,7 @@ default:
- "%paths.base%/../videoverification_features"
contexts:
- SharingContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand All @@ -170,7 +180,7 @@ default:
- "%paths.base%/../setup_features"
contexts:
- SetupContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
Expand Down Expand Up @@ -220,10 +230,10 @@ default:
- "%paths.base%/../remoteapi_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- RemoteContext:
remote: http://localhost:8080
remote: http://localhost:8080
Binary file added build/integration/data/clouds.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions build/integration/data/clouds.jpg.license
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions build/integration/features/bootstrap/BasicStructure.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\ServerException;
use PHPUnit\Framework\Assert;
use Psr\Http\Message\ResponseInterface;

Expand Down Expand Up @@ -170,6 +171,8 @@ public function sendingToWith($verb, $url, $body) {
$this->response = $client->request($verb, $fullUrl, $options);
} catch (ClientException $ex) {
$this->response = $ex->getResponse();
} catch (ServerException $ex) {
$this->response = $ex->getResponse();
}
}

Expand Down
59 changes: 59 additions & 0 deletions build/integration/features/bootstrap/ConversionsContext.php
Original file line number Diff line number Diff line change
@@ -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));
}
}
101 changes: 101 additions & 0 deletions build/integration/file_conversions/file_conversions.feature
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 19ce362

Please sign in to comment.