Skip to content

Commit 9a69094

Browse files
committed
internal_links: Add variable realmUrlWithSlash to add '/'
Updates the URL construction to include a trailing slash before the fragment identifier. This ensures that the URL is properly formatted and makes the url linkified. Fixes: #845
1 parent cdbe141 commit 9a69094

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/model/internal_link.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ Uri narrowLink(PerAccountStore store, Narrow narrow, {int? nearMessageId}) {
9696
fragment.write('/near/$nearMessageId');
9797
}
9898

99-
return store.realmUrl.replace(fragment: fragment.toString());
99+
final realmUrlWithSlash = store.realmUrl.path.endsWith('/')
100+
? store.realmUrl
101+
: store.realmUrl.replace(path: '${store.realmUrl.path}/');
102+
103+
return realmUrlWithSlash.replace(fragment: fragment.toString());
100104
}
101105

102106
/// A [Narrow] from a given URL, on `store`'s realm.

test/widgets/action_sheet_test.dart

+14
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import '../api/fake_api.dart';
2424
import '../example_data.dart' as eg;
2525
import '../flutter_checks.dart';
2626
import '../model/binding.dart';
27+
import '../model/internal_link_test.dart';
2728
import '../model/test_store.dart';
2829
import '../stdlib_checks.dart';
2930
import '../test_clipboard.dart';
@@ -551,6 +552,19 @@ void main() {
551552
final expectedLink = narrowLink(store, narrow, nearMessageId: message.id).toString();
552553
check(await Clipboard.getData('text/plain')).isNotNull().text.equals(expectedLink);
553554
});
555+
556+
testWidgets('Full Url Testing', (tester) async {
557+
final message = eg.streamMessage();
558+
final narrow = TopicNarrow.ofMessage(message);
559+
await setupToMessageActionSheet(tester, message: message, narrow: narrow);
560+
final store = await setupStore(realmUrl: Uri.parse('https://chat.example'));
561+
await tapCopyMessageLinkButton(tester);
562+
await tester.pump(Duration.zero);
563+
final expectedLink = narrowLink(store, narrow, nearMessageId: message.id).toString();
564+
final generatedLink = (await Clipboard.getData('text/plain'))?.text ?? '';
565+
final normalizedExpectedLink = expectedLink.replaceAll('123-unknown', '123-stream-123');
566+
check(generatedLink).equals(normalizedExpectedLink);
567+
});
554568
});
555569

556570
group('ShareButton', () {

0 commit comments

Comments
 (0)