feat: launch url and test

pull/359/head
RuiAlonso 3 years ago
parent 6397441428
commit 28aa239914

@ -87,7 +87,10 @@ class Backbox extends PositionComponent with ZIndex {
), ),
); );
}, },
onNavigate: () => launchUrl(Uri.parse(ShareRepository.openSourceUrl)), onNavigate: () {
print("OPEN ${ShareRepository.openSourceUrl}");
openLink(ShareRepository.openSourceUrl);
},
), ),
); );
} else if (state is InitialsFailureState) { } else if (state is InitialsFailureState) {

@ -71,7 +71,7 @@ class GameOverInfoDisplay extends Component with HasGameRef {
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
gameRef.overlays.add(PinballGame.replayButtonOverlay); //gameRef.overlays.add(PinballGame.replayButtonOverlay);
} }
} }

@ -11,6 +11,7 @@ class ShareRepository {
final String _appUrl; final String _appUrl;
/// Url to the Github Open Source Pinball project.
static const openSourceUrl = 'https://github.com/VGVentures/pinball'; static const openSourceUrl = 'https://github.com/VGVentures/pinball';
/// Returns a url to share the [value] on the given [platform]. /// Returns a url to share the [value] on the given [platform].

@ -20,6 +20,9 @@ import 'package:pinball/l10n/l10n.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
import 'package:pinball_theme/pinball_theme.dart' as theme; import 'package:pinball_theme/pinball_theme.dart' as theme;
import 'package:pinball_ui/pinball_ui.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:share_repository/share_repository.dart';
class _TestGame extends Forge2DGame class _TestGame extends Forge2DGame
with HasKeyboardHandlerComponents, HasTappables { with HasKeyboardHandlerComponents, HasTappables {
@ -74,6 +77,10 @@ class _MockLeaderboardRepository extends Mock implements LeaderboardRepository {
class _MockTapDownInfo extends Mock implements TapDownInfo {} class _MockTapDownInfo extends Mock implements TapDownInfo {}
class _MockUrlLauncher extends Mock
with MockPlatformInterfaceMixin
implements UrlLauncherPlatform {}
class _MockAppLocalizations extends Mock implements AppLocalizations { class _MockAppLocalizations extends Mock implements AppLocalizations {
@override @override
String get score => ''; String get score => '';
@ -228,60 +235,119 @@ void main() {
}, },
); );
flameTester.test( group('GameOverInfoDisplay', () {
'adds GameOverInfoDisplay on InitialsSuccessState', late UrlLauncherPlatform urlLauncher;
(game) async {
final state = InitialsSuccessState( setUp(() async {
score: 100, urlLauncher = _MockUrlLauncher();
initials: 'AAA', UrlLauncherPlatform.instance = urlLauncher;
character: theme.AndroidTheme(), });
);
whenListen( flameTester.test(
bloc, 'added on InitialsSuccessState',
const Stream<InitialsSuccessState>.empty(), (game) async {
initialState: state, final state = InitialsSuccessState(
); score: 100,
final backbox = Backbox.test(bloc: bloc); initials: 'AAA',
await game.pump(backbox); character: theme.AndroidTheme(),
);
expect( whenListen(
game.descendants().whereType<GameOverInfoDisplay>().length, bloc,
equals(1), const Stream<InitialsSuccessState>.empty(),
); initialState: state,
}, );
); final backbox = Backbox.test(bloc: bloc);
await game.pump(backbox);
flameTester.test(
'adds ShareScoreRequested event when sharing on GameOverInfoDisplay', expect(
(game) async { game.descendants().whereType<GameOverInfoDisplay>().length,
final state = InitialsSuccessState( equals(1),
score: 100, );
initials: 'AAA', },
character: theme.AndroidTheme(), );
);
whenListen( flameTester.test(
bloc, 'adds ShareScoreRequested event when sharing',
Stream.value(state), (game) async {
initialState: state, final state = InitialsSuccessState(
); score: 100,
final backbox = Backbox.test(bloc: bloc); initials: 'AAA',
await game.pump(backbox); character: theme.AndroidTheme(),
);
final shareLink = whenListen(
game.descendants().whereType<ShareLinkComponent>().first; bloc,
shareLink.onTapDown(_MockTapDownInfo()); Stream.value(state),
initialState: state,
verify( );
() => bloc.add( final backbox = Backbox.test(bloc: bloc);
ShareScoreRequested( await game.pump(backbox);
score: state.score,
initials: state.initials, final shareLink =
character: state.character, game.descendants().whereType<ShareLinkComponent>().first;
shareLink.onTapDown(_MockTapDownInfo());
verify(
() => bloc.add(
ShareScoreRequested(
score: state.score,
initials: state.initials,
character: state.character,
),
), ),
), ).called(1);
).called(1); },
}, );
);
flameTester.test(
'open OpenSource url when navigating',
(game) async {
when(() => urlLauncher.canLaunch(any()))
.thenAnswer((_) async => true);
when(
() => urlLauncher.launch(
any(),
useSafariVC: any(named: 'useSafariVC'),
useWebView: any(named: 'useWebView'),
enableJavaScript: any(named: 'enableJavaScript'),
enableDomStorage: any(named: 'enableDomStorage'),
universalLinksOnly: any(named: 'universalLinksOnly'),
headers: any(named: 'headers'),
),
).thenAnswer((_) async => true);
final state = InitialsSuccessState(
score: 100,
initials: 'AAA',
character: theme.AndroidTheme(),
);
whenListen(
bloc,
Stream.value(state),
initialState: state,
);
final backbox = Backbox.test(bloc: bloc);
await game.pump(backbox);
final shareLink =
game.descendants().whereType<GoogleIOLinkComponent>().first;
shareLink.onTapDown(_MockTapDownInfo());
await game.ready();
verify(
() => urlLauncher.launch(
ShareRepository.openSourceUrl,
useSafariVC: any(named: 'useSafariVC'),
useWebView: any(named: 'useWebView'),
enableJavaScript: any(named: 'enableJavaScript'),
enableDomStorage: any(named: 'enableDomStorage'),
universalLinksOnly: any(named: 'universalLinksOnly'),
headers: any(named: 'headers'),
),
);
},
);
});
flameTester.test( flameTester.test(
'adds InitialsSubmissionFailureDisplay on InitialsFailureState', 'adds InitialsSubmissionFailureDisplay on InitialsFailureState',

@ -98,7 +98,7 @@ void main() {
); );
flameTester.testGameWidget( flameTester.testGameWidget(
'calls onNavigate when go to IO link is tapped', 'calls onNavigate when go to Google IO link is tapped',
setUp: (game, tester) async { setUp: (game, tester) async {
var tapped = false; var tapped = false;

Loading…
Cancel
Save