forked from baron/baron-sso
60 lines
1.8 KiB
Dart
60 lines
1.8 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:userfront/features/dashboard/domain/models.dart';
|
|
import 'package:userfront/features/dashboard/presentation/audit_device_utils.dart';
|
|
|
|
AuditLogEntry _log({
|
|
required String eventType,
|
|
String userAgent = '',
|
|
Map<String, dynamic>? details,
|
|
}) {
|
|
return AuditLogEntry.fromJson({
|
|
'event_id': 'audit-1',
|
|
'timestamp': '2026-04-14T00:00:00Z',
|
|
'user_id': 'user-123',
|
|
'event_type': eventType,
|
|
'status': 'success',
|
|
'user_agent': userAgent,
|
|
'details': details == null ? '' : details.toString(),
|
|
});
|
|
}
|
|
|
|
void main() {
|
|
test('headless link login maps internal client user agent to sentinel', () {
|
|
final log = AuditLogEntry.fromJson({
|
|
'event_id': 'audit-1',
|
|
'timestamp': '2026-04-14T00:00:00Z',
|
|
'user_id': 'user-123',
|
|
'event_type': 'POST /api/v1/auth/login/code/verify',
|
|
'status': 'success',
|
|
'user_agent': 'undici',
|
|
'details':
|
|
'{"approved_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/146.0.0.0 Safari/537.36"}',
|
|
});
|
|
|
|
expect(preferredAuditLogUserAgent(log), headlessServerUserAgentSentinel);
|
|
});
|
|
|
|
test(
|
|
'headless password login maps internal client user agent to sentinel',
|
|
() {
|
|
final log = _log(
|
|
eventType: 'POST /api/v1/auth/headless/password/login',
|
|
userAgent: 'undici',
|
|
);
|
|
|
|
expect(preferredAuditLogUserAgent(log), headlessServerUserAgentSentinel);
|
|
},
|
|
);
|
|
|
|
test('non-headless login preserves original browser user agent', () {
|
|
const browserUa =
|
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/146.0.0.0 Safari/537.36';
|
|
final log = _log(
|
|
eventType: 'POST /api/v1/auth/password/login',
|
|
userAgent: browserUa,
|
|
);
|
|
|
|
expect(preferredAuditLogUserAgent(log), browserUa);
|
|
});
|
|
}
|