전역 구조 리팩터링 및 테스트 확장
This commit is contained in:
73
test/core/permissions/permission_manager_test.dart
Normal file
73
test/core/permissions/permission_manager_test.dart
Normal file
@@ -0,0 +1,73 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:superport_v2/core/permissions/permission_manager.dart';
|
||||
|
||||
void main() {
|
||||
group('PermissionManager', () {
|
||||
test('falls back to environment permissions when no override', () {
|
||||
final manager = PermissionManager();
|
||||
final allowed = manager.can('/any', PermissionAction.view);
|
||||
expect(allowed, isTrue);
|
||||
});
|
||||
|
||||
test('respects overrides', () {
|
||||
final manager = PermissionManager(
|
||||
overrides: {
|
||||
'/inventory/inbound': {
|
||||
PermissionAction.view,
|
||||
PermissionAction.create,
|
||||
},
|
||||
},
|
||||
);
|
||||
expect(manager.can('/inventory/inbound', PermissionAction.view), isTrue);
|
||||
expect(
|
||||
manager.can('/inventory/inbound', PermissionAction.create),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
manager.can('/inventory/inbound', PermissionAction.delete),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
testWidgets('PermissionGate hides child when unauthorized', (tester) async {
|
||||
final manager = PermissionManager(overrides: {'/resource': {}});
|
||||
await tester.pumpWidget(
|
||||
PermissionScope(
|
||||
manager: manager,
|
||||
child: const Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: PermissionGate(
|
||||
resource: '/resource',
|
||||
action: PermissionAction.view,
|
||||
child: Text('secret'),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.text('secret'), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('PermissionGate shows fallback when provided', (tester) async {
|
||||
final manager = PermissionManager(overrides: {'/resource': {}});
|
||||
await tester.pumpWidget(
|
||||
PermissionScope(
|
||||
manager: manager,
|
||||
child: const Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: PermissionGate(
|
||||
resource: '/resource',
|
||||
action: PermissionAction.view,
|
||||
fallback: Text('fallback'),
|
||||
child: Text('secret'),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.text('fallback'), findsOneWidget);
|
||||
expect(find.text('secret'), findsNothing);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user