Add Baron Safe app features through session block skeleton
ci / flutter-check (push) Successful in 4s

This commit is contained in:
2026-06-30 17:17:14 +09:00
parent d2f6af7657
commit 7c8e95e0a3
23 changed files with 1531 additions and 5 deletions
@@ -0,0 +1,63 @@
import 'dart:convert';
import 'package:baron_safe_app/src/features/bridge/baron_safe_bridge_message_handler.dart';
import 'package:baron_safe_app/src/features/bridge/baron_safe_bridge_service.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BaronSafeBridgeMessageHandler', () {
const handler = BaronSafeBridgeMessageHandler(
PlaceholderBaronSafeBridgeService(),
);
test('handles an allowed command and returns response envelope', () async {
final rawResponse = await handler.handle(
jsonEncode({'requestId': 'req-1', 'command': 'getDeviceInfo'}),
);
final response = jsonDecode(rawResponse) as Map<String, Object?>;
expect(response['requestId'], 'req-1');
expect(response['ok'], isTrue);
expect(response['data'], isA<Map<String, Object?>>());
});
test('rejects unknown commands before service handling', () async {
final rawResponse = await handler.handle(
jsonEncode({'requestId': 'req-2', 'command': 'stealPrivateKey'}),
);
final response = jsonDecode(rawResponse) as Map<String, Object?>;
final error = response['error'] as Map<String, Object?>;
expect(response['ok'], isFalse);
expect(error['code'], 'unsupported_command');
});
test('rejects invalid JSON messages', () async {
final rawResponse = await handler.handle('not-json');
final response = jsonDecode(rawResponse) as Map<String, Object?>;
final error = response['error'] as Map<String, Object?>;
expect(response['ok'], isFalse);
expect(error['code'], 'invalid_json');
});
test('rejects non-object payloads', () async {
final rawResponse = await handler.handle(
jsonEncode({
'requestId': 'req-3',
'command': 'openBiometricPrompt',
'payload': 'bad-payload',
}),
);
final response = jsonDecode(rawResponse) as Map<String, Object?>;
final error = response['error'] as Map<String, Object?>;
expect(response['ok'], isFalse);
expect(error['code'], 'invalid_payload');
});
});
}
@@ -1,6 +1,8 @@
import 'package:baron_safe_app/src/features/bridge/baron_safe_bridge_command.dart';
import 'package:baron_safe_app/src/features/bridge/baron_safe_bridge_models.dart';
import 'package:baron_safe_app/src/features/bridge/baron_safe_bridge_service.dart';
import 'package:baron_safe_app/src/features/session/baron_safe_session_block_service.dart';
import 'package:baron_safe_app/src/features/session/baron_safe_session_models.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
@@ -77,5 +79,55 @@ void main() {
expect(response.isSuccess, isFalse);
expect(response.error?.code, 'not_implemented');
});
test('rejects blockSession when sessionId is missing', () async {
const service = PlaceholderBaronSafeBridgeService(
sessionBlockService: _FakeSessionBlockService(),
);
final response = await service.handle(
const BaronSafeBridgeRequest(
command: BaronSafeBridgeCommand.blockSession,
),
);
expect(response.isSuccess, isFalse);
expect(response.error?.code, 'invalid_payload');
});
test('runs injected session block service', () async {
const service = PlaceholderBaronSafeBridgeService(
sessionBlockService: _FakeSessionBlockService(),
);
final response = await service.handle(
const BaronSafeBridgeRequest(
command: BaronSafeBridgeCommand.blockSession,
payload: {'sessionId': 'session-1', 'reason': 'Suspicious login'},
),
);
expect(response.isSuccess, isTrue);
expect(response.data['sessionId'], 'session-1');
expect(response.data['blocked'], isTrue);
expect(response.data['biometricVerified'], isTrue);
});
});
}
class _FakeSessionBlockService implements BaronSafeSessionBlockService {
const _FakeSessionBlockService();
@override
Future<BaronSafeSessionBlockResult> blockSession({
required String sessionId,
required String reason,
}) async {
return BaronSafeSessionBlockResult(
sessionId: sessionId,
blocked: true,
biometricVerified: true,
message: reason,
);
}
}