@@ -35,6 +35,100 @@ Future<PerAccountStore> setupStore({
35
35
}
36
36
37
37
void main () {
38
+ group ('narrowLink' , () {
39
+ test ('CombinedFeedNarrow' , () {
40
+ final store = eg.store ();
41
+ check (narrowLink (store, const CombinedFeedNarrow ()))
42
+ .equals (store.realmUrl.resolve ('#narrow' ));
43
+ check (narrowLink (store, const CombinedFeedNarrow (), nearMessageId: 1 ))
44
+ .equals (store.realmUrl.resolve ('#narrow/near/1' ));
45
+ });
46
+
47
+ test ('MentionsNarrow' , () {
48
+ final store = eg.store ();
49
+ check (narrowLink (store, const MentionsNarrow ()))
50
+ .equals (store.realmUrl.resolve ('#narrow/is/mentioned' ));
51
+ check (narrowLink (store, const MentionsNarrow (), nearMessageId: 1 ))
52
+ .equals (store.realmUrl.resolve ('#narrow/is/mentioned/near/1' ));
53
+ });
54
+
55
+ test ('StarredMessagesNarrow' , () {
56
+ final store = eg.store ();
57
+ check (narrowLink (store, const StarredMessagesNarrow ()))
58
+ .equals (store.realmUrl.resolve ('#narrow/is/starred' ));
59
+ check (narrowLink (store, const StarredMessagesNarrow (), nearMessageId: 1 ))
60
+ .equals (store.realmUrl.resolve ('#narrow/is/starred/near/1' ));
61
+ });
62
+
63
+ test ('ChannelNarrow / TopicNarrow' , () {
64
+ void checkNarrow (String expectedFragment, {
65
+ required int streamId,
66
+ required String name,
67
+ String ? topic,
68
+ int ? nearMessageId,
69
+ }) async {
70
+ assert (expectedFragment.startsWith ('#' ), 'wrong-looking expectedFragment' );
71
+ final store = eg.store ();
72
+ await store.addStream (eg.stream (streamId: streamId, name: name));
73
+ final narrow = topic == null
74
+ ? ChannelNarrow (streamId)
75
+ : TopicNarrow (streamId, topic);
76
+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
77
+ .equals (store.realmUrl.resolve (expectedFragment));
78
+ }
79
+
80
+ checkNarrow (streamId: 1 , name: 'announce' , '#narrow/stream/1-announce' );
81
+ checkNarrow (streamId: 378 , name: 'api design' , '#narrow/stream/378-api-design' );
82
+ checkNarrow (streamId: 391 , name: 'Outreachy' , '#narrow/stream/391-Outreachy' );
83
+ checkNarrow (streamId: 415 , name: 'chat.zulip.org' , '#narrow/stream/415-chat.2Ezulip.2Eorg' );
84
+ checkNarrow (streamId: 419 , name: 'français' , '#narrow/stream/419-fran.C3.A7ais' );
85
+ checkNarrow (streamId: 403 , name: 'Hshs[™~}(.' , '#narrow/stream/403-Hshs.5B.E2.84.A2~.7D.28.2E' );
86
+ checkNarrow (streamId: 60 , name: 'twitter' , nearMessageId: 1570686 , '#narrow/stream/60-twitter/near/1570686' );
87
+
88
+ checkNarrow (streamId: 48 , name: 'mobile' , topic: 'Welcome screen UI' ,
89
+ '#narrow/stream/48-mobile/topic/Welcome.20screen.20UI' );
90
+ checkNarrow (streamId: 243 , name: 'mobile-team' , topic: 'Podfile.lock clash #F92' ,
91
+ '#narrow/stream/243-mobile-team/topic/Podfile.2Elock.20clash.20.23F92' );
92
+ checkNarrow (streamId: 377 , name: 'translation/zh_tw' , topic: '翻譯 "stream"' ,
93
+ '#narrow/stream/377-translation.2Fzh_tw/topic/.E7.BF.BB.E8.AD.AF.20.22stream.22' );
94
+ checkNarrow (streamId: 42 , name: 'Outreachy 2016-2017' , topic: '2017-18 Stream?' , nearMessageId: 302690 ,
95
+ '#narrow/stream/42-Outreachy-2016-2017/topic/2017-18.20Stream.3F/near/302690' );
96
+ });
97
+
98
+ test ('DmNarrow' , () {
99
+ void checkNarrow (String expectedFragment, String legacyExpectedFragment, {
100
+ required List <int > allRecipientIds,
101
+ required int selfUserId,
102
+ int ? nearMessageId,
103
+ }) {
104
+ assert (expectedFragment.startsWith ('#' ), 'wrong-looking expectedFragment' );
105
+ final store = eg.store ();
106
+ final narrow = DmNarrow (allRecipientIds: allRecipientIds, selfUserId: selfUserId);
107
+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
108
+ .equals (store.realmUrl.resolve (expectedFragment));
109
+ store.connection.zulipFeatureLevel = 176 ;
110
+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
111
+ .equals (store.realmUrl.resolve (legacyExpectedFragment));
112
+ }
113
+
114
+ checkNarrow (allRecipientIds: [1 ], selfUserId: 1 ,
115
+ '#narrow/dm/1-dm' ,
116
+ '#narrow/pm-with/1-pm' );
117
+ checkNarrow (allRecipientIds: [1 , 2 ], selfUserId: 1 ,
118
+ '#narrow/dm/1,2-dm' ,
119
+ '#narrow/pm-with/1,2-pm' );
120
+ checkNarrow (allRecipientIds: [1 , 2 , 3 ], selfUserId: 1 ,
121
+ '#narrow/dm/1,2,3-group' ,
122
+ '#narrow/pm-with/1,2,3-group' );
123
+ checkNarrow (allRecipientIds: [1 , 2 , 3 , 4 ], selfUserId: 4 ,
124
+ '#narrow/dm/1,2,3,4-group' ,
125
+ '#narrow/pm-with/1,2,3,4-group' );
126
+ checkNarrow (allRecipientIds: [1 , 2 ], selfUserId: 1 , nearMessageId: 12345 ,
127
+ '#narrow/dm/1,2-dm/near/12345' ,
128
+ '#narrow/pm-with/1,2-pm/near/12345' );
129
+ });
130
+ });
131
+
38
132
final realmUrl = Uri .parse ('https://example.com/' );
39
133
40
134
void testExpectedNarrows (List <(String , Narrow ?)> testCases, {
0 commit comments