diff --git a/test/features/public_asset/domain/extensions/string_to_public_asset_extension_test.dart b/test/features/public_asset/domain/extensions/string_to_public_asset_extension_test.dart new file mode 100644 index 000000000..7dd13794e --- /dev/null +++ b/test/features/public_asset/domain/extensions/string_to_public_asset_extension_test.dart @@ -0,0 +1,105 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/extensions/string_to_public_asset_extension.dart'; + +void main() { + group('string to public asset extension test:', () { + test( + 'should convert string to public assets ' + 'when image tags have public-asset-id attribute', + () { + // arrange + const publicAssetIdValue1 = 'public-asset-1'; + const publicAssetIdValue2 = 'public-asset-2'; + const htmlString = '' + ''; + + // act + final publicAssetIds = htmlString.publicAssetIdsFromHtmlContent; + + // assert + expect(publicAssetIds, equals([Id(publicAssetIdValue1), Id(publicAssetIdValue2)])); + }); + + test( + 'should convert string to nothing ' + 'when image tags do not have public-asset-id attribute', + () { + // arrange + const htmlString = ''; + + // act + final publicAssetIds = htmlString.publicAssetIdsFromHtmlContent; + + // assert + expect(publicAssetIds, isEmpty); + }); + + test( + 'should only convert string to public assets ' + 'when image tags have public-asset-id attribute', + () { + // arrange + const publicAssetIdValue1 = 'public-asset-1'; + const htmlString = '' + ''; + + // act + final publicAssetIds = htmlString.publicAssetIdsFromHtmlContent; + + // assert + expect(publicAssetIds, equals([Id(publicAssetIdValue1)])); + }); + + group('should convert string to public assets in various edge cases:', () { + test( + 'when there are two "public-asset-id" attributes in the same image tag', + () { + // arrange + const publicAssetIdValue1 = 'public-asset-1'; + const publicAssetIdValue2 = 'public-asset-2'; + const htmlString = ''; + + // act + final publicAssetIds = htmlString.publicAssetIdsFromHtmlContent; + + // assert + expect(publicAssetIds, equals([Id(publicAssetIdValue1)])); + }); + + test( + 'only with the "public-asset-id" attribute name', + () { + // arrange + const publicAssetIdValue1 = 'public-asset-1'; + const publicAssetIdValue2 = 'public-asset-2'; + const htmlString = ''; + + // act + final publicAssetIds = htmlString.publicAssetIdsFromHtmlContent; + + // assert + expect(publicAssetIds, equals([Id(publicAssetIdValue2)])); + }); + }); + + test( + 'should throw invalid argument exception ' + 'when the public asset id contains invalid characters', + () { + // arrange + const publicAssetIdValue1 = r'#$52323'; + const htmlString = ''; + + // assert + expect( + () => htmlString.publicAssetIdsFromHtmlContent, + throwsA(isA()) + ); + }); + }); +} \ No newline at end of file