Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
d7b5a7a
ci: add initial acceptance test workflow
phil-davis May 19, 2026
d253cb7
ci: add some API acceptance test suites
phil-davis May 19, 2026
5d1c882
ci: run only one test suite for now
phil-davis May 19, 2026
d885a92
ci: find out why no priv for /var/www/html
phil-davis May 19, 2026
dd409b7
ci: temp reduce php unit workflows
phil-davis May 19, 2026
3a49c0c
ci: adjust /var/www permissions
phil-davis May 19, 2026
27769a3
ci: adjust server install
phil-davis May 19, 2026
f4af1ed
ci: run apiFederationToRoot1 suite
phil-davis May 19, 2026
232db2c
fix: avoid trying to access array offset on false
phil-davis May 20, 2026
fe82769
fix: handle passing null to normalizeUrl
phil-davis May 20, 2026
2887662
ci: copy all files including hidden files
phil-davis May 20, 2026
59d83ee
fix: support federation between systems in subdirectories
phil-davis May 20, 2026
54a9b5f
test(deps): bump behat-related minor version dependencies
phil-davis May 20, 2026
4b86218
test(deps): pin symfony/yaml to 7.4.11
phil-davis May 20, 2026
901bd81
test: remove unneeded colons from behat.yml
phil-davis May 20, 2026
c02b999
test: convert behat YML config to behat.php
phil-davis May 20, 2026
03bff3e
test: fix PHP code style of behat.php
phil-davis May 20, 2026
566e66c
test(deps): revert pin symfony/yaml to 7.4.11
phil-davis May 21, 2026
d89d97d
ci: run webUIComments test suite in CI
phil-davis May 21, 2026
84e37e4
test: install all PHP extensions
phil-davis May 21, 2026
cd87792
ci: add more API acceptance test suites
phil-davis May 21, 2026
fad57c2
ci: add all API acceptance test suites
phil-davis May 21, 2026
8ae0ac2
test: fix reference to server root
phil-davis May 25, 2026
fc10bb5
test: fix
phil-davis May 25, 2026
6c8b5e4
ci: shorten acceptance test workflow names
phil-davis May 25, 2026
56e0e76
ci: install ImageMagick for Previews tests
phil-davis May 25, 2026
81659bb
test: update preview test fixture
phil-davis May 25, 2026
f34ff1b
ci: refactor server and federated folder
phil-davis May 25, 2026
8a7c9a5
ci: add some CLI acceptance tests
phil-davis May 25, 2026
179afa3
ci: provide email server for cliProvisioning
phil-davis May 25, 2026
3a21613
ci: explicitly specify utf8mb4 for database
phil-davis May 25, 2026
f1ca2e7
ci: enable UFT-8 Unicode characters for acceptance tests
phil-davis May 25, 2026
ae3b7af
ci: examine locale
phil-davis May 25, 2026
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
526 changes: 526 additions & 0 deletions .github/workflows/acceptance.yml

Large diffs are not rendered by default.

115 changes: 115 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,118 @@ jobs:
uses: ./.github/workflows/php-unit.yml
with:
php-versions: '["8.3"]'

acceptance-api:
name: API Tests
uses: ./.github/workflows/acceptance.yml
with:
do-api-tests: true
server-folder: 'server'
test-suites: "[
'apiAuth',
'apiAuthOcs',
'apiAuthWebDav',
'apiCapabilities',
'apiComments',
'apiFavorites',
'apiMain',
'apiProvisioning-v1',
'apiProvisioning-v2',
'apiProvisioningGroups-v1',
'apiProvisioningGroups-v2',
'apiShareCreateSpecialToRoot1',
'apiShareCreateSpecialToRoot2',
'apiShareCreateSpecialToShares1',
'apiShareCreateSpecialToShares2',
'apiSharees',
'apiShareManagementBasicToRoot',
'apiShareManagementBasicToShares',
'apiShareManagementToRoot',
'apiShareManagementToShares',
'apiShareOperationsToRoot1',
'apiShareOperationsToRoot2',
'apiShareOperationsToShares1',
'apiShareOperationsToShares2',
'apiSharePublicLink1',
'apiSharePublicLink2',
'apiSharePublicLink3',
'apiShareReshareToRoot1',
'apiShareReshareToRoot2',
'apiShareReshareToRoot3',
'apiShareReshareToShares1',
'apiShareReshareToShares2',
'apiShareReshareToShares3',
'apiShareUpdateToRoot',
'apiShareUpdateToShares',
'apiTags',
'apiTranslation',
'apiTrashbin',
'apiTrashbinRestore',
'apiVersions',
'apiWebdavDelete',
'apiWebdavEtagPropagation1',
'apiWebdavEtagPropagation2',
'apiWebdavLocks',
'apiWebdavLocks2',
'apiWebdavLocks3',
'apiWebdavLocksUnlock',
'apiWebdavMove1',
'apiWebdavMove2',
'apiWebdavOperations',
'apiWebdavProperties1',
'apiWebdavProperties2',
'apiWebdavUpload1',
'apiWebdavUpload2',
'apiWebdavUploadTUS']"

acceptance-api-notifications:
name: API Tests Notifications
uses: ./.github/workflows/acceptance.yml
with:
do-api-tests: true
server-folder: 'server'
additional-app: 'notifications'
test-suites: "['apiSharingNotificationsToRoot', 'apiSharingNotificationsToShares']"

acceptance-api-previews:
name: API Tests Previews
uses: ./.github/workflows/acceptance.yml
with:
do-api-tests: true
additional-packages: 'imagemagick'
server-folder: 'server'
test-suites: "['apiWebdavPreviews']"

acceptance-api-federation:
name: API Tests Federation
uses: ./.github/workflows/acceptance.yml
with:
do-api-tests: true
server-folder: 'server'
federated-folder: 'federated'
test-suites: "['apiFederationToRoot1', 'apiFederationToRoot2', 'apiFederationToShares1', 'apiFederationToShares2']"

acceptance-cli:
name: CLI Tests
uses: ./.github/workflows/acceptance.yml
with:
do-cli-tests: true
server-folder: 'server'
test-suites: "['cliMain', 'cliTrashbin']"

acceptance-cli-email:
name: CLI Tests
uses: ./.github/workflows/acceptance.yml
with:
do-cli-tests: true
use-email-server: true
server-folder: 'server'
test-suites: "['cliProvisioning']"

acceptance-webui:
name: WebUI Tests
uses: ./.github/workflows/acceptance.yml
with:
do-webui-tests: true
server-folder: 'server'
test-suites: "['webUIComments']"
11 changes: 2 additions & 9 deletions .github/workflows/php-unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,6 @@ jobs:
matrix:
php: ${{ fromJSON(inputs.php-versions) }}
database: [sqlite]
include:
- php: "8.3"
database: "mysql:8.0"
- php: "8.3"
database: "mariadb:10.6"
- php: "8.3"
database: "mariadb:10.11"
- php: "8.3"
database: "postgres:10.21"

services:
mysql:
Expand All @@ -42,6 +33,8 @@ jobs:
--health-interval=10s
--health-timeout=5s
--health-retries=3
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
postgres:
Expand Down
3 changes: 3 additions & 0 deletions apps/federation/lib/DbHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,9 @@ protected function hash($url) {
* @return string
*/
protected function normalizeUrl($url) {
if ($url === null) {
$url = '';
}
$normalized = $url;

if (\strpos($url, 'https://') === 0) {
Expand Down
8 changes: 8 additions & 0 deletions apps/files_sharing/lib/External/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -573,20 +573,28 @@ protected function testUrl(IClientService $clientService, string $remote, bool $
public function testRemoteUrl(IClientService $clientService, string $remote) {
$parsed_host = parse_url($remote, PHP_URL_HOST);
$parsed_port = parse_url($remote, PHP_URL_PORT);
$parsed_path = parse_url($remote, PHP_URL_PATH);
if (\is_string($parsed_host)) {
$remote = $parsed_host;
if ($parsed_port !== null) {
$remote .= ':' . $parsed_port;
}
if ($parsed_path !== null) {
$remote .= $parsed_path;
}
} else {
$string_to_parse = 'http://' . $remote;
$parsed_host = parse_url($string_to_parse, PHP_URL_HOST);
$parsed_port = parse_url($string_to_parse, PHP_URL_PORT);
$parsed_path = parse_url($string_to_parse, PHP_URL_PATH);
if (\is_string($parsed_host)) {
$remote = $parsed_host;
if ($parsed_port !== null) {
$remote .= ':' . $parsed_port;
}
if ($parsed_path !== null) {
$remote .= $parsed_path;
}
}
}
try {
Expand Down
2 changes: 1 addition & 1 deletion lib/private/Files/Storage/Wrapper/Encryption.php
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ public function fopen($path, $mode) {
if (!empty($encryptionModuleId)) {
$encryptionModule = $this->encryptionManager->getEncryptionModule($encryptionModuleId);
$shouldEncrypt = true;
} elseif (empty($encryptionModuleId) && $info['encrypted'] === true) {
} elseif ($info !== false && $info->isEncrypted()) {
// we come from a old installation. No header and/or no module defined
// but the file is encrypted. In this case we need to use the
// OC_DEFAULT_MODULE to read the file
Expand Down
Loading
Loading