86 lines
2.7 KiB
Dart
86 lines
2.7 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:motorcycle_dash/services/social/handle_validator.dart';
|
|
|
|
void main() {
|
|
group('HandleValidator', () {
|
|
test('accepts valid handles', () {
|
|
final validCases = [
|
|
'canyon_rider',
|
|
'apex_hunter99',
|
|
'moto_gp',
|
|
'speedy',
|
|
'r1200gs',
|
|
'moto_pilot_2026',
|
|
];
|
|
|
|
for (final handle in validCases) {
|
|
final result = HandleValidator.validate(handle);
|
|
expect(result.isValid, isTrue, reason: 'Expected $handle to be valid');
|
|
expect(result.normalizedHandle, equals(handle.toLowerCase().trim()));
|
|
expect(result.error, isNull);
|
|
}
|
|
});
|
|
|
|
test('normalizes handles with uppercase and whitespace', () {
|
|
final result = HandleValidator.validate(' Apex_Rider ');
|
|
expect(result.isValid, isTrue);
|
|
expect(result.normalizedHandle, equals('apex_rider'));
|
|
});
|
|
|
|
test('rejects empty or blank handles', () {
|
|
expect(HandleValidator.validate('').isValid, isFalse);
|
|
expect(HandleValidator.validate(' ').isValid, isFalse);
|
|
});
|
|
|
|
test('rejects handles shorter than 3 characters', () {
|
|
final result = HandleValidator.validate('ab');
|
|
expect(result.isValid, isFalse);
|
|
expect(result.error, contains('at least 3 characters'));
|
|
});
|
|
|
|
test('rejects handles longer than 20 characters', () {
|
|
final result = HandleValidator.validate('this_handle_is_way_too_long_for_system');
|
|
expect(result.isValid, isFalse);
|
|
expect(result.error, contains('cannot exceed 20 characters'));
|
|
});
|
|
|
|
test('rejects handles not starting with a letter', () {
|
|
expect(HandleValidator.validate('99riders').isValid, isFalse);
|
|
expect(HandleValidator.validate('_speedy').isValid, isFalse);
|
|
});
|
|
|
|
test('rejects invalid characters like hyphens, spaces, and punctuation', () {
|
|
expect(HandleValidator.validate('moto-rider').isValid, isFalse);
|
|
expect(HandleValidator.validate('moto rider').isValid, isFalse);
|
|
expect(HandleValidator.validate('moto@dash').isValid, isFalse);
|
|
expect(HandleValidator.validate('moto!rider').isValid, isFalse);
|
|
});
|
|
|
|
test('rejects reserved handles', () {
|
|
final reserved = [
|
|
'admin',
|
|
'administrator',
|
|
'motorsignal',
|
|
'motorcloud',
|
|
'support',
|
|
'system',
|
|
'mod',
|
|
'moderator',
|
|
'help',
|
|
'official',
|
|
'root',
|
|
'api',
|
|
'bot',
|
|
'guest',
|
|
'anonymous',
|
|
];
|
|
|
|
for (final handle in reserved) {
|
|
final result = HandleValidator.validate(handle);
|
|
expect(result.isValid, isFalse, reason: 'Expected reserved handle $handle to fail');
|
|
expect(result.error, contains('reserved'));
|
|
}
|
|
});
|
|
});
|
|
}
|