-
Notifications
You must be signed in to change notification settings - Fork 73
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
142 additions
and
0 deletions.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
core/lib/presentation/utils/html_transformer/sanitize_url.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import 'package:core/utils/app_logger.dart'; | ||
import 'package:get/get.dart'; | ||
|
||
class SanitizeUrl { | ||
|
||
final bool defaultToHttps; | ||
|
||
SanitizeUrl({this.defaultToHttps = true}); | ||
|
||
final _protocolIdentifierRegex = RegExp( | ||
r'^(https?://)', | ||
caseSensitive: false, | ||
); | ||
|
||
String process(String inputText) { | ||
var originalUrl = inputText; | ||
|
||
originalUrl = Uri.decodeFull(originalUrl); | ||
|
||
if (GetUtils.isURL(originalUrl)) { | ||
if (!originalUrl.startsWith(_protocolIdentifierRegex)) { | ||
originalUrl = (defaultToHttps ? "https://" : "http://") + originalUrl; | ||
} | ||
} else { | ||
originalUrl = ''; | ||
} | ||
log('SanitizeUrl::process:originalUrl = $originalUrl'); | ||
return originalUrl; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
import 'package:core/presentation/utils/html_transformer/sanitize_url.dart'; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
|
||
void main() { | ||
group('SanitizeUrl test', () { | ||
final sanitizeUrl = SanitizeUrl(); | ||
|
||
test('SHOULD return valid url WHEN input text is valid url start with https', () { | ||
final validUrl = sanitizeUrl.process('https://linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('https://linagora.com') | ||
); | ||
}); | ||
|
||
test('SHOULD return valid url WHEN input text is valid url start with http', () { | ||
final validUrl = sanitizeUrl.process('http://linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('http://linagora.com') | ||
); | ||
}); | ||
|
||
test('SHOULD return valid url WHEN input text start with www', () { | ||
final validUrl = sanitizeUrl.process('www.linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('https://www.linagora.com') | ||
); | ||
}); | ||
|
||
test('SHOULD return valid url WHEN input text start with valid domain', () { | ||
final validUrl = sanitizeUrl.process('linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('https://linagora.com') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string text WHEN input text is empty', () { | ||
final validUrl = sanitizeUrl.process(''); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string text WHEN input text not contain url', () { | ||
final validUrl = sanitizeUrl.process('Linagora Company'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string text WHEN input text is email address', () { | ||
final validUrl = sanitizeUrl.process('example@linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string text WHEN input text is mailto link', () { | ||
final validUrl = sanitizeUrl.process('mailto:example@linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string text WHEN input text is invalid url', () { | ||
final validUrl = sanitizeUrl.process('linagora mail.com'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string WHEN input text start with //', () { | ||
final validUrl = sanitizeUrl.process('//linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return empty string WHEN input text start with /', () { | ||
final validUrl = sanitizeUrl.process('/linagora.com'); | ||
expect( | ||
validUrl, | ||
equals('') | ||
); | ||
}); | ||
|
||
test('SHOULD return valid url WHEN input text is url encoded start with https', () { | ||
final validUrl = sanitizeUrl.process('https%3A%2F%2Flinagora.com'); | ||
expect( | ||
validUrl, | ||
equals('https://linagora.com') | ||
); | ||
}); | ||
|
||
test('SHOULD return valid url WHEN input text is url encoded start with http', () { | ||
final validUrl = sanitizeUrl.process('http%3A%2F%2Flinagora.com'); | ||
expect( | ||
validUrl, | ||
equals('http://linagora.com') | ||
); | ||
}); | ||
}); | ||
} |