Main coves client
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}