286 lines
10 KiB
Dart
286 lines
10 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
|
|
|
void main() {
|
|
group('parseMapMailtoFromUri test', () {
|
|
test('should parse a valid mailto URI', () {
|
|
const mailtoUri = 'mailto:test@example.com?subject=Hello';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals('test@example.com'));
|
|
expect(result[RouteUtils.paramSubject], equals('Hello'));
|
|
});
|
|
|
|
test('should parse a valid mailto URI encoded', () {
|
|
const mailtoUri = 'mailto:test%40example.com%3Fsubject=Hello';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals('test@example.com'));
|
|
expect(result[RouteUtils.paramSubject], equals('Hello'));
|
|
});
|
|
|
|
test('should handle a mailto URI without subject', () {
|
|
const mailtoUri = 'mailto:test@example.com';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals('test@example.com'));
|
|
expect(result[RouteUtils.paramSubject], isNull);
|
|
});
|
|
|
|
test('should handle a mailto URI without subject encoded', () {
|
|
const mailtoUri = 'mailto:test%40example.com';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals('test@example.com'));
|
|
expect(result[RouteUtils.paramSubject], isNull);
|
|
});
|
|
|
|
test('should handle a non-mailto URI', () {
|
|
const nonMailtoUri = 'test@example.com';
|
|
final result = RouteUtils.parseMapMailtoFromUri(nonMailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals(nonMailtoUri));
|
|
expect(result[RouteUtils.paramSubject], isNull);
|
|
});
|
|
|
|
test('should handle a non-mailto URI encoded', () {
|
|
const nonMailtoUri = 'test%40example.com';
|
|
final result = RouteUtils.parseMapMailtoFromUri(nonMailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], equals('test@example.com'));
|
|
expect(result[RouteUtils.paramSubject], isNull);
|
|
});
|
|
|
|
test('should handle null input', () {
|
|
final result = RouteUtils.parseMapMailtoFromUri(null);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], isNull);
|
|
expect(result[RouteUtils.paramSubject], isNull);
|
|
});
|
|
|
|
test('should parse a valid mailto URI encoded contains multiple recipients', () {
|
|
const mailtoUri = 'mailto:test%40example.com%2Ctest2%40example.com%2Ctest3%40example.com%3Fsubject=Hello';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], containsAll(['test@example.com', 'test2@example.com', 'test3@example.com']));
|
|
expect(result[RouteUtils.paramSubject], equals('Hello'));
|
|
});
|
|
|
|
test('should parse a valid mailto URI contains multiple recipients', () {
|
|
const mailtoUri = 'mailto:test@example.com,test2@example.com,test3@example.com?subject=Hello';
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
expect(result[RouteUtils.paramRouteName], equals(AppRoutes.mailtoURL));
|
|
expect(result[RouteUtils.paramMailtoAddress], containsAll(['test@example.com', 'test2@example.com', 'test3@example.com']));
|
|
expect(result[RouteUtils.paramSubject], equals('Hello'));
|
|
});
|
|
|
|
test(
|
|
'should parse a valid mailto URI encoded contains every possible parameters',
|
|
() {
|
|
// arrange
|
|
const to1 = 'to1@example.com';
|
|
const to2 = 'to2@example.com';
|
|
const to3 = 'to3@example.com';
|
|
const cc1 = 'cc1@example.com';
|
|
const cc2 = 'cc2@example.com';
|
|
const bcc1 = 'bcc1@example.com';
|
|
const bcc2 = 'bcc2@example.com';
|
|
const subject = 'Hello';
|
|
const body = 'Bye';
|
|
const mailtoSchemeUri = 'mailto:$to1,$to2'
|
|
'?to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
const mailtoPathUri = 'https://example.com/mailto'
|
|
'?uri=$to1,$to2'
|
|
'&to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
const mailtoPathWithNestedMailtoUri = 'https://example.com/mailto/'
|
|
'?uri=mailto:$to1,$to2'
|
|
'&to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
// act
|
|
final mailtoSchemeResult = RouteUtils.parseMapMailtoFromUri(
|
|
Uri.encodeFull(mailtoSchemeUri));
|
|
final mailtoPathResult = RouteUtils.parseMapMailtoFromUri(
|
|
Uri.encodeFull(mailtoPathUri));
|
|
final mailtoPathWithNestedMailtoResult = RouteUtils.parseMapMailtoFromUri(
|
|
Uri.encodeFull(mailtoPathWithNestedMailtoUri));
|
|
|
|
// assert
|
|
expect(mailtoSchemeResult, equals(mailtoPathResult));
|
|
expect(mailtoSchemeResult, equals(mailtoPathWithNestedMailtoResult));
|
|
expect(mailtoPathResult, equals(mailtoPathWithNestedMailtoResult));
|
|
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramMailtoAddress],
|
|
containsAll([to1, to2, to3,])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramCc],
|
|
containsAll([cc1, cc2])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramBcc],
|
|
containsAll([bcc1, bcc2])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramSubject],
|
|
equals(subject)
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramBody],
|
|
equals(body)
|
|
);
|
|
});
|
|
|
|
test(
|
|
'should parse a valid mailto URI contains every possible parameters',
|
|
() {
|
|
// arrange
|
|
const to1 = 'to1@example.com';
|
|
const to2 = 'to2@example.com';
|
|
const to3 = 'to3@example.com';
|
|
const cc1 = 'cc1@example.com';
|
|
const cc2 = 'cc2@example.com';
|
|
const bcc1 = 'bcc1@example.com';
|
|
const bcc2 = 'bcc2@example.com';
|
|
const subject = 'Hello';
|
|
const body = 'Bye';
|
|
const mailtoSchemeUri = 'mailto:$to1,$to2'
|
|
'?to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
const mailtoPathUri = 'https://example.com/mailto'
|
|
'?uri=$to1,$to2'
|
|
'&to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
const mailtoPathWithNestedMailtoUri = 'https://example.com/mailto/'
|
|
'?uri=mailto:$to1,$to2'
|
|
'&to=$to2,$to3'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&subject=$subject'
|
|
'&body=$body';
|
|
|
|
// act
|
|
final mailtoSchemeResult = RouteUtils.parseMapMailtoFromUri(
|
|
mailtoSchemeUri);
|
|
final mailtoPathResult = RouteUtils.parseMapMailtoFromUri(mailtoPathUri);
|
|
final mailtoPathWithNestedMailtoResult = RouteUtils.parseMapMailtoFromUri(
|
|
mailtoPathWithNestedMailtoUri);
|
|
|
|
// assert
|
|
expect(mailtoSchemeResult, equals(mailtoPathResult));
|
|
expect(mailtoSchemeResult, equals(mailtoPathWithNestedMailtoResult));
|
|
expect(mailtoPathResult, equals(mailtoPathWithNestedMailtoResult));
|
|
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramMailtoAddress],
|
|
containsAll([to1, to2, to3,])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramCc],
|
|
containsAll([cc1, cc2])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramBcc],
|
|
containsAll([bcc1, bcc2])
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramSubject],
|
|
equals(subject)
|
|
);
|
|
expect(
|
|
mailtoSchemeResult[RouteUtils.paramBody],
|
|
equals(body)
|
|
);
|
|
});
|
|
|
|
test(
|
|
'should parse url with mailto uri '
|
|
'when the query parameter belongs to the mailto uri',
|
|
() {
|
|
// arrange
|
|
const to = 'to@example.com';
|
|
const cc1 = 'cc1@example.com', cc2 = 'cc2@example.com';
|
|
const bcc1 = 'bcc1@example.com', bcc2 = 'bcc2@example.com';
|
|
const subject = 'Hello';
|
|
const body = 'Bye';
|
|
const mailtoUri = 'https://example.com/mailto/'
|
|
'?uri=mailto:$to'
|
|
'?subject=$subject'
|
|
'&cc=$cc1,$cc2'
|
|
'&bcc=$bcc1,$bcc2'
|
|
'&body=$body';
|
|
|
|
// act
|
|
final result = RouteUtils.parseMapMailtoFromUri(mailtoUri);
|
|
|
|
// assert
|
|
expect(result[RouteUtils.paramMailtoAddress], equals(to));
|
|
expect(result[RouteUtils.paramCc], containsAll([cc1, cc2]));
|
|
expect(result[RouteUtils.paramBcc], containsAll([bcc1, bcc2]));
|
|
expect(result[RouteUtils.paramSubject], equals(subject));
|
|
expect(result[RouteUtils.paramBody], equals(body));
|
|
});
|
|
});
|
|
|
|
group('getRootDomain', () {
|
|
test('should return null when hostname is empty', () {
|
|
expect(RouteUtils.getRootDomain(hostname: ''), isNull);
|
|
});
|
|
|
|
test('should return null when hostname is empty', () {
|
|
expect(RouteUtils.getRootDomain(hostname: ''), isNull);
|
|
});
|
|
|
|
test('should return root domain for simple domain', () {
|
|
expect(RouteUtils.getRootDomain(hostname: 'example.com'), 'example.com');
|
|
});
|
|
|
|
test('should return root domain and remove subdomains', () {
|
|
expect(RouteUtils.getRootDomain(hostname: 'mail.dev.example.com'), 'example.com');
|
|
});
|
|
|
|
test('should return root domain and remove www subdomain', () {
|
|
expect(RouteUtils.getRootDomain(hostname: 'www.google.com'), 'google.com');
|
|
});
|
|
|
|
test('should return localhost as is', () {
|
|
expect(RouteUtils.getRootDomain(hostname: 'localhost'), 'localhost');
|
|
});
|
|
|
|
test('should handle multi-level tld like co.uk (not fully accurate)', () {
|
|
expect(RouteUtils.getRootDomain(hostname: 'service.example.co.uk'), 'co.uk');
|
|
});
|
|
});
|
|
} |