diff --git a/packages/nextcloud/test/core_test.dart b/packages/nextcloud/test/core_test.dart index f7eaf516..54490ccd 100644 --- a/packages/nextcloud/test/core_test.dart +++ b/packages/nextcloud/test/core_test.dart @@ -1,6 +1,8 @@ @Retry(3) library core_test; +import 'dart:convert'; + import 'package:nextcloud/nextcloud.dart'; import 'package:test/test.dart'; @@ -58,6 +60,39 @@ void main() { expect(capabilities.ocs.data.capabilities.theming!.favicon, isNotEmpty); }); + test('Get capabilities with all apps disabled', () async { + // According to https://github.com/nextcloud/server/blob/master/core/shipped.json `alwaysEnabled` + const requiredApps = [ + 'files', + 'cloud_federation_api', + 'dav', + 'federatedfilesharing', + 'lookup_server_connector', + 'provisioning_api', + 'oauth2', + 'settings', + 'theming', + 'twofactor_backupcodes', + 'viewer', + 'workflowengine', + ]; + + final listResult = await container.runOccCommand(['app:list', '--output=json']); + expect(listResult.exitCode, 0); + + final apps = + ((json.decode(listResult.stdout as String) as Map)['enabled'] as Map).keys; + + for (final app in apps.where((final app) => !requiredApps.contains(app))) { + final disableResult = await container.runOccCommand(['app:disable', app]); + expect(disableResult.exitCode, 0); + } + + final capabilities = await client.core.ocs.getCapabilities(); + expect(capabilities.ocs.data.version.major, coreSupportedVersion); + expect(capabilities.ocs.data.version.string, startsWith('$coreSupportedVersion.')); + }); + test('Get navigation apps', () async { final navigationApps = await client.core.navigation.getAppsNavigation(); expect(navigationApps.ocs.data, hasLength(6)); diff --git a/packages/nextcloud/test/helper.dart b/packages/nextcloud/test/helper.dart index 03ccd9cf..9f6178b6 100644 --- a/packages/nextcloud/test/helper.dart +++ b/packages/nextcloud/test/helper.dart @@ -17,24 +17,19 @@ class DockerContainer { final int port; - Future runOccCommand(final List args) async { - final result = await runExecutableArguments( - 'docker', - [ - 'exec', - id, - 'php', - '-f', - 'occ', - ...args, - ], - stdout: stdout, - stderr: stderr, - ); - if (result.exitCode != 0) { - throw Exception('Failed to run occ command'); - } - } + Future runOccCommand(final List args) async => runExecutableArguments( + 'docker', + [ + 'exec', + id, + 'php', + '-f', + 'occ', + ...args, + ], + stdoutEncoding: utf8, + stderrEncoding: utf8, + ); void destroy() => unawaited( runExecutableArguments(