implemented a comprehensive Nextcloud file sharing system with support for user, group, and public link shares with gating based on server-side permissions; added sharing management interfaces including a share sheet; updated the file list with visual badges for incoming shares and improved OCS API response handling.
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:marianum_mobile/api/marianumcloud/files_sharing/share_permissions.dart';
|
||||
|
||||
void main() {
|
||||
group('permissionsFor', () {
|
||||
test('readOnly is just the read bit', () {
|
||||
expect(permissionsFor(SharePreset.readOnly), kPermissionRead);
|
||||
});
|
||||
|
||||
test('edit on a file is only read+update (no create/delete)', () {
|
||||
expect(
|
||||
permissionsFor(SharePreset.edit),
|
||||
kPermissionRead | kPermissionUpdate,
|
||||
);
|
||||
});
|
||||
|
||||
test('edit on a folder adds create+delete', () {
|
||||
expect(
|
||||
permissionsFor(SharePreset.edit, isFolder: true),
|
||||
kPermissionRead |
|
||||
kPermissionUpdate |
|
||||
kPermissionCreate |
|
||||
kPermissionDelete,
|
||||
);
|
||||
});
|
||||
|
||||
test('edit adds the share bit when reshare is allowed', () {
|
||||
final mask = permissionsFor(SharePreset.edit, allowReshare: true);
|
||||
expect(hasPermission(mask, kPermissionShare), isTrue);
|
||||
expect(hasPermission(mask, kPermissionUpdate), isTrue);
|
||||
});
|
||||
|
||||
test('fileDrop is create-only (upload)', () {
|
||||
expect(permissionsFor(SharePreset.fileDrop), kPermissionCreate);
|
||||
expect(
|
||||
hasPermission(permissionsFor(SharePreset.fileDrop), kPermissionRead),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group('presetFromBitmask', () {
|
||||
test('round-trips readOnly and fileDrop', () {
|
||||
expect(
|
||||
presetFromBitmask(permissionsFor(SharePreset.readOnly)),
|
||||
SharePreset.readOnly,
|
||||
);
|
||||
expect(
|
||||
presetFromBitmask(permissionsFor(SharePreset.fileDrop)),
|
||||
SharePreset.fileDrop,
|
||||
);
|
||||
});
|
||||
|
||||
test('edit is recognised regardless of the reshare bit', () {
|
||||
expect(
|
||||
presetFromBitmask(permissionsFor(SharePreset.edit)),
|
||||
SharePreset.edit,
|
||||
);
|
||||
expect(
|
||||
presetFromBitmask(permissionsFor(SharePreset.edit, allowReshare: true)),
|
||||
SharePreset.edit,
|
||||
);
|
||||
});
|
||||
|
||||
test('returns null for an unmatched mask', () {
|
||||
// share-only (16) with no read bit matches nothing.
|
||||
expect(presetFromBitmask(kPermissionShare), isNull);
|
||||
expect(presetFromBitmask(0), isNull);
|
||||
});
|
||||
});
|
||||
|
||||
group('hasPermission', () {
|
||||
test('detects individual bits', () {
|
||||
const mask = kPermissionRead | kPermissionUpdate;
|
||||
expect(hasPermission(mask, kPermissionRead), isTrue);
|
||||
expect(hasPermission(mask, kPermissionUpdate), isTrue);
|
||||
expect(hasPermission(mask, kPermissionDelete), isFalse);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user