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