import 'package:nextcloud/core.dart' as core; import 'package:nextcloud/nextcloud.dart'; import 'package:test/test.dart'; import 'helper.dart'; void main() { group( 'core', () { late DockerContainer container; late TestNextcloudClient client; setUp(() async { container = await getDockerContainer(); client = await getTestClient(container); }); tearDown(() => container.destroy()); test('Is supported from capabilities', () async { final response = await client.core.ocs.getCapabilities(); expect(response.statusCode, 200); expect(() => response.headers, isA()); final result = client.core.isSupported(response.body.ocs.data); expect(result.isSupported, isTrue); }); test('Is supported from status', () async { final response = await client.core.getStatus(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.isSupported, isTrue); }); test('Get status', () async { final response = await client.core.getStatus(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.installed, isTrue); expect(response.body.maintenance, isFalse); expect(response.body.needsDbUpgrade, isFalse); expect(response.body.version, startsWith('${core.supportedVersion}.')); expect(response.body.versionstring, startsWith('${core.supportedVersion}.')); expect(response.body.edition, ''); expect(response.body.productname, 'Nextcloud'); expect(response.body.extendedSupport, isFalse); }); group('OCS', () { test('Get capabilities', () async { final response = await client.core.ocs.getCapabilities(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.ocs.data.version.major, core.supportedVersion); expect(response.body.ocs.data.version.string, startsWith('${core.supportedVersion}.')); expect(response.body.ocs.data.capabilities.commentsCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.davCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.filesCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.filesSharingCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.filesTrashbinCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.filesVersionsCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.notesCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.notificationsCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.provisioningApiCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.sharebymailCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.spreedPublicCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.themingPublicCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.userStatusCapabilities, isNotNull); expect(response.body.ocs.data.capabilities.weatherStatusCapabilities, isNotNull); }); }); group('Navigation', () { test('Get apps navigation', () async { final response = await client.core.navigation.getAppsNavigation(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.ocs.data, hasLength(7)); expect(response.body.ocs.data[0].id, 'dashboard'); expect(response.body.ocs.data[1].id, 'files'); expect(response.body.ocs.data[2].id, 'photos'); expect(response.body.ocs.data[3].id, 'activity'); expect(response.body.ocs.data[4].id, 'spreed'); expect(response.body.ocs.data[5].id, 'notes'); expect(response.body.ocs.data[6].id, 'news'); }); }); group('Autocomplete', () { test('Get', () async { final response = await client.core.autoComplete.$get( search: '', itemType: 'call', itemId: 'new', shareTypes: [core.ShareType.group.index], ); expect(response.body.ocs.data, hasLength(1)); expect(response.body.ocs.data[0].id, 'admin'); expect(response.body.ocs.data[0].label, 'admin'); expect(response.body.ocs.data[0].icon, ''); expect(response.body.ocs.data[0].source, 'groups'); expect(response.body.ocs.data[0].status.autocompleteResultStatus0, isNull); expect(response.body.ocs.data[0].status.string, isEmpty); expect(response.body.ocs.data[0].subline, ''); expect(response.body.ocs.data[0].shareWithDisplayNameUnique, ''); }); }); group('Preview', () { test('Get', () async { final response = await client.core.preview.getPreview(file: 'Nextcloud.png'); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body, isNotEmpty); }); }); group('Avatar', () { test('Get', () async { final response = await client.core.avatar.getAvatar(userId: 'admin', size: 32); expect(response.body, isNotEmpty); }); test('Get dark', () async { final response = await client.core.avatar.getAvatarDark(userId: 'admin', size: 32); expect(response.body, isNotEmpty); }); }); group('App password', () { test('Delete', () async { await client.core.appPassword.deleteAppPassword(); expect( () => client.core.appPassword.deleteAppPassword(), throwsA(predicate((final e) => (e! as DynamiteApiException).statusCode == 401)), ); }); }); group('Unified search', () { test('Get providers', () async { final response = await client.core.unifiedSearch.getProviders(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.ocs.data, hasLength(17)); }); test('Search', () async { final response = await client.core.unifiedSearch.search( providerId: 'settings', term: 'Personal info', ); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.ocs.data.name, 'Settings'); expect(response.body.ocs.data.isPaginated, isFalse); expect(response.body.ocs.data.entries, hasLength(1)); expect(response.body.ocs.data.entries.single.thumbnailUrl, isEmpty); expect(response.body.ocs.data.entries.single.title, 'Personal info'); expect(response.body.ocs.data.entries.single.subline, isEmpty); expect(response.body.ocs.data.entries.single.resourceUrl, isNotEmpty); expect(response.body.ocs.data.entries.single.icon, 'icon-settings-dark'); expect(response.body.ocs.data.entries.single.rounded, isFalse); expect(response.body.ocs.data.entries.single.attributes, isEmpty); }); }); group('Client login flow V2', () { test('Init and poll', () async { final response = await client.core.clientFlowLoginV2.init(); expect(response.statusCode, 200); expect(() => response.headers, isA()); expect(response.body.login, startsWith('http://localhost')); expect(response.body.poll.endpoint, startsWith('http://localhost')); expect(response.body.poll.token, isNotEmpty); expect( () => client.core.clientFlowLoginV2.poll(token: response.body.poll.token), throwsA(predicate((final e) => e.statusCode == 404)), ); }); }); }, retry: retryCount, timeout: timeout, ); }