From 687b3715b5088ec3715027166a60c4f98baec6ee Mon Sep 17 00:00:00 2001 From: Jonathan Daniels Date: Fri, 22 Apr 2022 12:07:05 -0700 Subject: [PATCH] feat(share_repository): added ability to fetch share url for facebook and twitter --- .../lib/share_repository.dart | 1 + .../lib/src/models/models.dart | 1 + .../lib/src/models/share_platform.dart | 8 ++++ .../lib/src/share_repository.dart | 21 ++++++++++ .../test/src/share_repository_test.dart | 39 ++++++++++++++++++- 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 packages/share_repository/lib/src/models/models.dart create mode 100644 packages/share_repository/lib/src/models/share_platform.dart diff --git a/packages/share_repository/lib/share_repository.dart b/packages/share_repository/lib/share_repository.dart index 0b6d064c..0a68aff4 100644 --- a/packages/share_repository/lib/share_repository.dart +++ b/packages/share_repository/lib/share_repository.dart @@ -1,3 +1,4 @@ library share_repository; +export 'src/models/models.dart'; export 'src/share_repository.dart'; diff --git a/packages/share_repository/lib/src/models/models.dart b/packages/share_repository/lib/src/models/models.dart new file mode 100644 index 00000000..26819946 --- /dev/null +++ b/packages/share_repository/lib/src/models/models.dart @@ -0,0 +1 @@ +export 'share_platform.dart'; diff --git a/packages/share_repository/lib/src/models/share_platform.dart b/packages/share_repository/lib/src/models/share_platform.dart new file mode 100644 index 00000000..054a4f15 --- /dev/null +++ b/packages/share_repository/lib/src/models/share_platform.dart @@ -0,0 +1,8 @@ +/// The platform that is being used to share a score. +enum SharePlatform { + /// Twitter platform. + twitter, + + /// Facebook platform. + facebook, +} diff --git a/packages/share_repository/lib/src/share_repository.dart b/packages/share_repository/lib/src/share_repository.dart index 6c1f36d0..173830d4 100644 --- a/packages/share_repository/lib/src/share_repository.dart +++ b/packages/share_repository/lib/src/share_repository.dart @@ -1,7 +1,28 @@ +import 'package:share_repository/share_repository.dart'; + /// {@template share_repository} /// Repository to facilitate sharing scores. /// {@endtemplate} class ShareRepository { /// {@macro share_repository} const ShareRepository(); + + // TODO(jonathandaniels-vgv): Change to prod url. + static const _shareUrl = 'https://ashehwkdkdjruejdnensjsjdne.web.app/#/'; + + /// Returns a url to share the [shareText] on the given [platform]. The + /// [shareText] must have the score embedded. + String shareScore({ + required String shareText, + required SharePlatform platform, + }) { + final encodedUrl = Uri.encodeComponent(_shareUrl); + final encodedShareText = Uri.encodeComponent(shareText); + switch (platform) { + case SharePlatform.twitter: + return 'https://twitter.com/intent/tweet?url=$encodedUrl&text=$encodedShareText'; + case SharePlatform.facebook: + return 'https://www.facebook.com/sharer.php?u=$encodedUrl"e=$encodedShareText'; + } + } } diff --git a/packages/share_repository/test/src/share_repository_test.dart b/packages/share_repository/test/src/share_repository_test.dart index e6cc536b..3bba84fd 100644 --- a/packages/share_repository/test/src/share_repository_test.dart +++ b/packages/share_repository/test/src/share_repository_test.dart @@ -4,8 +4,43 @@ import 'package:test/test.dart'; void main() { group('ShareRepository', () { - test('can be instantiated', () { - expect(ShareRepository(), isNotNull); + late ShareRepository shareRepository; + + setUp(() { + shareRepository = ShareRepository(); + }); + + group('constructor', () { + test('creates new ShareRepository instance', () { + expect(ShareRepository(), isNotNull); + }); + }); + + group('shareScore', () { + const shareText = 'hello world!'; + test('returns the correct share url for twitter', () async { + expect( + shareRepository.shareScore( + shareText: shareText, + platform: SharePlatform.twitter, + ), + equals( + 'https://twitter.com/intent/tweet?url=https%3A%2F%2Fashehwkdkdjruejdnensjsjdne.web.app%2F%23%2F&text=hello%20world!', + ), + ); + }); + + test('returns the correct share url for facebook', () async { + expect( + shareRepository.shareScore( + shareText: shareText, + platform: SharePlatform.facebook, + ), + equals( + 'https://www.facebook.com/sharer.php?u=https%3A%2F%2Fashehwkdkdjruejdnensjsjdne.web.app%2F%23%2F"e=hello%20world!', + ), + ); + }); }); }); }