@@ -195,22 +195,27 @@ hello
195195 group ('narrowLink' , () {
196196 test ('AllMessagesNarrow' , () {
197197 final store = eg.store ();
198- check (narrowLink (store, const AllMessagesNarrow ())).equals (store.account.realmUrl.resolve ('#narrow' ));
198+ check (narrowLink (store, const AllMessagesNarrow ()))
199+ .equals (store.account.realmUrl.resolve ('#narrow' ));
200+ check (narrowLink (store, const AllMessagesNarrow (), nearMessageId: 1 ))
201+ .equals (store.account.realmUrl.resolve ('#narrow/near/1' ));
199202 });
200203
201204 test ('StreamNarrow / TopicNarrow' , () {
202205 void checkNarrow (String expectedFragment, {
203206 required int streamId,
204207 required String name,
205208 String ? topic,
209+ int ? nearMessageId,
206210 }) {
207211 assert (expectedFragment.startsWith ('#' ), 'wrong-looking expectedFragment' );
208212 final store = eg.store ();
209213 store.addStream (eg.stream (streamId: streamId, name: name));
210214 final narrow = topic == null
211215 ? StreamNarrow (streamId)
212216 : TopicNarrow (streamId, topic);
213- check (narrowLink (store, narrow)).equals (store.account.realmUrl.resolve (expectedFragment));
217+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
218+ .equals (store.account.realmUrl.resolve (expectedFragment));
214219 }
215220
216221 checkNarrow (streamId: 1 , name: 'announce' , '#narrow/stream/1-announce' );
@@ -219,26 +224,32 @@ hello
219224 checkNarrow (streamId: 415 , name: 'chat.zulip.org' , '#narrow/stream/415-chat.2Ezulip.2Eorg' );
220225 checkNarrow (streamId: 419 , name: 'français' , '#narrow/stream/419-fran.C3.A7ais' );
221226 checkNarrow (streamId: 403 , name: 'Hshs[™~}(.' , '#narrow/stream/403-Hshs.5B.E2.84.A2~.7D.28.2E' );
227+ checkNarrow (streamId: 60 , name: 'twitter' , nearMessageId: 1570686 , '#narrow/stream/60-twitter/near/1570686' );
222228
223229 checkNarrow (streamId: 48 , name: 'mobile' , topic: 'Welcome screen UI' ,
224230 '#narrow/stream/48-mobile/topic/Welcome.20screen.20UI' );
225231 checkNarrow (streamId: 243 , name: 'mobile-team' , topic: 'Podfile.lock clash #F92' ,
226232 '#narrow/stream/243-mobile-team/topic/Podfile.2Elock.20clash.20.23F92' );
227233 checkNarrow (streamId: 377 , name: 'translation/zh_tw' , topic: '翻譯 "stream"' ,
228234 '#narrow/stream/377-translation.2Fzh_tw/topic/.E7.BF.BB.E8.AD.AF.20.22stream.22' );
235+ checkNarrow (streamId: 42 , name: 'Outreachy 2016-2017' , topic: '2017-18 Stream?' , nearMessageId: 302690 ,
236+ '#narrow/stream/42-Outreachy-2016-2017/topic/2017-18.20Stream.3F/near/302690' );
229237 });
230238
231239 test ('DmNarrow' , () {
232240 void checkNarrow (String expectedFragment, String legacyExpectedFragment, {
233241 required List <int > allRecipientIds,
234242 required int selfUserId,
243+ int ? nearMessageId,
235244 }) {
236245 assert (expectedFragment.startsWith ('#' ), 'wrong-looking expectedFragment' );
237246 final store = eg.store ();
238247 final narrow = DmNarrow (allRecipientIds: allRecipientIds, selfUserId: selfUserId);
239- check (narrowLink (store, narrow)).equals (store.account.realmUrl.resolve (expectedFragment));
248+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
249+ .equals (store.account.realmUrl.resolve (expectedFragment));
240250 store.connection.zulipFeatureLevel = 176 ;
241- check (narrowLink (store, narrow)).equals (store.account.realmUrl.resolve (legacyExpectedFragment));
251+ check (narrowLink (store, narrow, nearMessageId: nearMessageId))
252+ .equals (store.account.realmUrl.resolve (legacyExpectedFragment));
242253 }
243254
244255 checkNarrow (allRecipientIds: [1 ], selfUserId: 1 ,
@@ -253,6 +264,9 @@ hello
253264 checkNarrow (allRecipientIds: [1 , 2 , 3 , 4 ], selfUserId: 4 ,
254265 '#narrow/dm/1,2,3,4-group' ,
255266 '#narrow/pm-with/1,2,3,4-group' );
267+ checkNarrow (allRecipientIds: [1 , 2 ], selfUserId: 1 , nearMessageId: 12345 ,
268+ '#narrow/dm/1,2-dm/near/12345' ,
269+ '#narrow/pm-with/1,2-pm/near/12345' );
256270 });
257271
258272 // TODO other Narrow subclasses as we add them:
0 commit comments