at main 4.0 kB view raw
1import 'package:coves_flutter/utils/community_handle_utils.dart'; 2import 'package:flutter_test/flutter_test.dart'; 3 4void main() { 5 group('CommunityHandleUtils', () { 6 group('formatHandleForDisplay', () { 7 test('converts DNS format to display format', () { 8 expect( 9 CommunityHandleUtils.formatHandleForDisplay( 10 'gaming.community.coves.social', 11 ), 12 '!gaming@coves.social', 13 ); 14 }); 15 16 test('handles multi-part instance domains', () { 17 expect( 18 CommunityHandleUtils.formatHandleForDisplay( 19 'tech.community.test.coves.social', 20 ), 21 '!tech@test.coves.social', 22 ); 23 }); 24 25 test('handles hyphenated community names', () { 26 expect( 27 CommunityHandleUtils.formatHandleForDisplay( 28 'world-news.community.coves.social', 29 ), 30 '!world-news@coves.social', 31 ); 32 }); 33 34 test('returns null for null input', () { 35 expect(CommunityHandleUtils.formatHandleForDisplay(null), null); 36 }); 37 38 test('returns null for empty string', () { 39 expect(CommunityHandleUtils.formatHandleForDisplay(''), null); 40 }); 41 42 test('returns null for invalid format (missing .community.)', () { 43 expect( 44 CommunityHandleUtils.formatHandleForDisplay('gaming.coves.social'), 45 null, 46 ); 47 }); 48 49 test('returns null for too few parts', () { 50 expect( 51 CommunityHandleUtils.formatHandleForDisplay('gaming.community'), 52 null, 53 ); 54 }); 55 56 test('returns null if second part is not "community"', () { 57 expect( 58 CommunityHandleUtils.formatHandleForDisplay( 59 'gaming.other.coves.social', 60 ), 61 null, 62 ); 63 }); 64 }); 65 66 group('formatHandleForDNS', () { 67 test('converts display format to DNS format', () { 68 expect( 69 CommunityHandleUtils.formatHandleForDNS('!gaming@coves.social'), 70 'gaming.community.coves.social', 71 ); 72 }); 73 74 test('handles handles without leading !', () { 75 expect( 76 CommunityHandleUtils.formatHandleForDNS('gaming@coves.social'), 77 'gaming.community.coves.social', 78 ); 79 }); 80 81 test('handles multi-part instance domains', () { 82 expect( 83 CommunityHandleUtils.formatHandleForDNS('!tech@test.coves.social'), 84 'tech.community.test.coves.social', 85 ); 86 }); 87 88 test('handles hyphenated community names', () { 89 expect( 90 CommunityHandleUtils.formatHandleForDNS('!world-news@coves.social'), 91 'world-news.community.coves.social', 92 ); 93 }); 94 95 test('returns null for null input', () { 96 expect(CommunityHandleUtils.formatHandleForDNS(null), null); 97 }); 98 99 test('returns null for empty string', () { 100 expect(CommunityHandleUtils.formatHandleForDNS(''), null); 101 }); 102 103 test('returns null for invalid format (no @)', () { 104 expect(CommunityHandleUtils.formatHandleForDNS('!gaming'), null); 105 }); 106 107 test('returns null for multiple @ symbols', () { 108 expect( 109 CommunityHandleUtils.formatHandleForDNS('!gaming@coves@social'), 110 null, 111 ); 112 }); 113 }); 114 115 group('round-trip conversions', () { 116 test('DNS → display → DNS preserves value', () { 117 const original = 'gaming.community.coves.social'; 118 final display = CommunityHandleUtils.formatHandleForDisplay(original); 119 final dnsFormat = CommunityHandleUtils.formatHandleForDNS(display); 120 expect(dnsFormat, original); 121 }); 122 123 test('display → DNS → display preserves value', () { 124 const original = '!gaming@coves.social'; 125 final dnsFormat = CommunityHandleUtils.formatHandleForDNS(original); 126 final display = CommunityHandleUtils.formatHandleForDisplay(dnsFormat); 127 expect(display, original); 128 }); 129 }); 130 }); 131}