전역 구조 리팩터링 및 테스트 확장

This commit is contained in:
JiWoong Sul
2025-09-29 01:51:47 +09:00
parent c00c0c9ab2
commit fef7108479
70 changed files with 7709 additions and 3185 deletions

View 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);
});
}