mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 01:30:50 -04:00
Merge pull request #59588 from nextcloud/tests/59511/integration-test-guests-app
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, main, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, guests_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / changes (push) Waiting to run
Psalm static code analysis / static-code-analysis (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-security (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-ocp (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-ncu (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-strict (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-summary (push) Blocked by required conditions
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, main, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, guests_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / changes (push) Waiting to run
Psalm static code analysis / static-code-analysis (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-security (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-ocp (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-ncu (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-strict (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis-summary (push) Blocked by required conditions
test(integration): Add an integration test with the guests app
This commit is contained in:
commit
c574c1b51c
4 changed files with 134 additions and 0 deletions
11
.github/workflows/integration-sqlite.yml
vendored
11
.github/workflows/integration-sqlite.yml
vendored
|
|
@ -73,8 +73,10 @@ jobs:
|
|||
- 'sharing_features'
|
||||
- 'theming_features'
|
||||
- 'videoverification_features'
|
||||
- 'guests_features'
|
||||
|
||||
php-versions: ['8.4']
|
||||
guests-versions: ['main']
|
||||
spreed-versions: ['main']
|
||||
activity-versions: ['master']
|
||||
|
||||
|
|
@ -111,6 +113,15 @@ jobs:
|
|||
path: apps/spreed
|
||||
ref: ${{ matrix.spreed-versions }}
|
||||
|
||||
- name: Checkout Guests app
|
||||
if: ${{ matrix.test-suite == 'guests_features' }}
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/guests
|
||||
path: apps/guests
|
||||
ref: ${{ matrix.guests-versions }}
|
||||
|
||||
- name: Checkout Activity app
|
||||
if: ${{ matrix.test-suite == 'sharing_features' }}
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
|
|
|||
|
|
@ -193,6 +193,17 @@ default:
|
|||
- admin
|
||||
regular_user_password: 123456
|
||||
- TalkContext
|
||||
guests:
|
||||
paths:
|
||||
- "%paths.base%/../guests_features"
|
||||
contexts:
|
||||
- GuestsContext
|
||||
- SharingContext:
|
||||
baseUrl: http://localhost:8080/ocs/
|
||||
admin:
|
||||
- admin
|
||||
- admin
|
||||
regular_user_password: 123456
|
||||
setup:
|
||||
paths:
|
||||
- "%paths.base%/../setup_features"
|
||||
|
|
|
|||
87
build/integration/features/bootstrap/GuestsContext.php
Normal file
87
build/integration/features/bootstrap/GuestsContext.php
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
use Behat\Behat\Context\Context;
|
||||
|
||||
class GuestsContext implements Context {
|
||||
public const TEST_PASSWORD = '123456';
|
||||
protected static $lastStdOut = null;
|
||||
protected static $lastCode = null;
|
||||
|
||||
#[\Behat\Hook\BeforeScenario('@Guests')]
|
||||
#[\Behat\Hook\BeforeFeature('@Guests')]
|
||||
public static function skipTestsIfGuestsIsNotInstalled() {
|
||||
if (!self::isGuestsInstalled()) {
|
||||
throw new Exception('Guests needs to be installed to run features or scenarios tagged with @Guests');
|
||||
}
|
||||
}
|
||||
|
||||
#[\Behat\Hook\AfterScenario('@Guests')]
|
||||
public static function disableGuests() {
|
||||
self::runOcc(['app:disable', 'guests']);
|
||||
}
|
||||
|
||||
private static function isGuestsInstalled(): bool {
|
||||
self::runOcc(['app:list']);
|
||||
return strpos(self::$lastStdOut, 'guests') !== false;
|
||||
}
|
||||
|
||||
private static function runOcc(array $args, array $env = []): int {
|
||||
// Based on "runOcc" from CommandLine trait (which can not be used due
|
||||
// to not being static and being already used in other sibling
|
||||
// contexts).
|
||||
$args = array_map(function ($arg) {
|
||||
return escapeshellarg($arg);
|
||||
}, $args);
|
||||
$args[] = '--no-ansi --no-warnings';
|
||||
$args = implode(' ', $args);
|
||||
|
||||
$descriptor = [
|
||||
0 => ['pipe', 'r'],
|
||||
1 => ['pipe', 'w'],
|
||||
2 => ['pipe', 'w'],
|
||||
];
|
||||
$process = proc_open('php console.php ' . $args, $descriptor, $pipes, $ocPath = '../..', $env);
|
||||
self::$lastStdOut = stream_get_contents($pipes[1]);
|
||||
self::$lastCode = proc_close($process);
|
||||
|
||||
return self::$lastCode;
|
||||
}
|
||||
|
||||
#[\Behat\Step\Given('/^user "([^"]*)" is a guest account user$/')]
|
||||
public function createGuestUser(string $email): void {
|
||||
self::runOcc([
|
||||
'user:delete',
|
||||
$email,
|
||||
]);
|
||||
|
||||
$lastCode = self::runOcc([
|
||||
'config:app:set',
|
||||
'guests',
|
||||
'hash_user_ids',
|
||||
'--value=false',
|
||||
'--type=boolean',
|
||||
]);
|
||||
\PHPUnit\Framework\Assert::assertEquals(0, $lastCode);
|
||||
|
||||
$lastCode = self::runOcc([
|
||||
'guests:add',
|
||||
// creator user
|
||||
'admin',
|
||||
// email
|
||||
$email,
|
||||
'--display-name',
|
||||
$email . '-displayname',
|
||||
'--password-from-env',
|
||||
], [
|
||||
'OC_PASS' => self::TEST_PASSWORD,
|
||||
]);
|
||||
\PHPUnit\Framework\Assert::assertEquals(0, $lastCode, 'Guest creation succeeded for ' . $email);
|
||||
}
|
||||
|
||||
}
|
||||
25
build/integration/guests_features/guest-filesystem.feature
Normal file
25
build/integration/guests_features/guest-filesystem.feature
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
@Guests
|
||||
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
Feature: guests app
|
||||
Background:
|
||||
Given using api version "1"
|
||||
Given using old dav path
|
||||
Given invoking occ with "app:enable --force guests"
|
||||
Given the command was successful
|
||||
And user "user-guest@example.com" is a guest account user
|
||||
|
||||
Scenario: Receive a share as a guests app user
|
||||
And user "user-guest@example.com" should see following elements
|
||||
| / |
|
||||
Given user "user0" exists
|
||||
And As an "user0"
|
||||
When creating a share with
|
||||
| path | welcome.txt |
|
||||
| shareType | 0 |
|
||||
| shareWith | user-guest@example.com |
|
||||
Then the OCS status code should be "100"
|
||||
And the HTTP status code should be "200"
|
||||
And user "user-guest@example.com" should see following elements
|
||||
| / |
|
||||
| /welcome.txt |
|
||||
Loading…
Reference in a new issue