TF-1606 Add method toQualifiedUrl()` handle relative url
(cherry picked from commit 865055f063391a5f2ae3ad7d9c82b6e45578cb48)
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:core/presentation/extensions/url_extension.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
|
||||||
|
extension URIExtension on Uri {
|
||||||
|
|
||||||
|
Uri toQualifiedUrl({required Uri baseUrl}) {
|
||||||
|
log('SessionUtils::toQualifiedUrl():baseUrl: $baseUrl | sourceUrl: $this');
|
||||||
|
if (toString().startsWith(baseUrl.toString())) {
|
||||||
|
final qualifiedUrl = toString().removeLastSlashOfUrl();
|
||||||
|
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
|
||||||
|
return Uri.parse(qualifiedUrl);
|
||||||
|
} else {
|
||||||
|
final baseUrlValid = baseUrl.toString().removeLastSlashOfUrl();
|
||||||
|
final sourceUrlValid = toString().addFirstSlashOfUrl().removeLastSlashOfUrl();
|
||||||
|
log('SessionUtils::toQualifiedUrl():baseUrlValid: $baseUrlValid | sourceUrlValid: $sourceUrlValid');
|
||||||
|
final qualifiedUrl = baseUrlValid + sourceUrlValid;
|
||||||
|
log('SessionUtils::toQualifiedUrl():qualifiedUrl: $qualifiedUrl');
|
||||||
|
return Uri.parse(qualifiedUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,4 +28,22 @@ extension URLExtension on String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isValid() => startsWith(prefixUrlHttps) || startsWith(prefixUrlHttp);
|
bool isValid() => startsWith(prefixUrlHttps) || startsWith(prefixUrlHttp);
|
||||||
|
|
||||||
|
String removeLastSlashOfUrl() {
|
||||||
|
final lastSlash = lastIndexOf('/');
|
||||||
|
if (lastSlash == length - 1) {
|
||||||
|
return substring(0, lastSlash);
|
||||||
|
} else {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String addFirstSlashOfUrl() {
|
||||||
|
final firstSlash = indexOf('/');
|
||||||
|
if (firstSlash == 0) {
|
||||||
|
return this;
|
||||||
|
} else {
|
||||||
|
return '/$this';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/extensions/uri_extension.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
|
||||||
|
group('method convertToQualifiedUrl test', () {
|
||||||
|
|
||||||
|
test('convertToQualifiedUrl() should return qualified url when baseUrl is `https://domain.com` and sourceUrl is `https://domain.com/jmap`', () async {
|
||||||
|
final baseUrl = Uri.parse('https://domain.com');
|
||||||
|
final sourceUrl = Uri.parse('https://domain.com/jmap');
|
||||||
|
|
||||||
|
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
|
||||||
|
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);
|
||||||
|
|
||||||
|
expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('convertToQualifiedUrl() should return qualified url when baseUrl is `https://domain.com` and sourceUrl is `/jmap/`', () async {
|
||||||
|
final baseUrl = Uri.parse('https://domain.com');
|
||||||
|
final sourceUrl = Uri.parse('/jmap/');
|
||||||
|
|
||||||
|
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
|
||||||
|
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);
|
||||||
|
|
||||||
|
expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('convertToQualifiedUrl() should return qualified url when baseUrl is `https://domain.com` and sourceUrl is `/jmap`', () async {
|
||||||
|
final baseUrl = Uri.parse('https://domain.com');
|
||||||
|
final sourceUrl = Uri.parse('/jmap');
|
||||||
|
|
||||||
|
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
|
||||||
|
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);
|
||||||
|
|
||||||
|
expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('convertToQualifiedUrl() should return qualified url when baseUrl is `https://domain.com/jmap` and sourceUrl is empty', () async {
|
||||||
|
final baseUrl = Uri.parse('https://domain.com/jmap');
|
||||||
|
final sourceUrl = Uri.parse('');
|
||||||
|
|
||||||
|
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
|
||||||
|
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);
|
||||||
|
|
||||||
|
expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('convertToQualifiedUrl() should return qualified url when baseUrl is `https://domain.com/jmap` and sourceUrl is `/`', () async {
|
||||||
|
final baseUrl = Uri.parse('https://domain.com/jmap');
|
||||||
|
final sourceUrl = Uri.parse('/');
|
||||||
|
|
||||||
|
final qualifiedUrlExpected = Uri.parse('https://domain.com/jmap');
|
||||||
|
final qualifiedUrlResult = sourceUrl.toQualifiedUrl(baseUrl: baseUrl);
|
||||||
|
|
||||||
|
expect(qualifiedUrlResult, equals(qualifiedUrlExpected));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user