mirror of
https://github.com/flutter/samples.git
synced 2026-04-05 03:01:19 +00:00
Compass app (#2446)
This commit is contained in:
63
compass_app/app/test/ui/auth/login_screen_test.dart
Normal file
63
compass_app/app/test/ui/auth/login_screen_test.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
// Copyright 2024 The Flutter team. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:compass_app/ui/auth/login/view_models/login_viewmodel.dart';
|
||||
import 'package:compass_app/ui/auth/login/widgets/login_screen.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
import 'package:mocktail_image_network/mocktail_image_network.dart';
|
||||
|
||||
import '../../../testing/app.dart';
|
||||
import '../../../testing/fakes/repositories/fake_auth_repository.dart';
|
||||
import '../../../testing/mocks.dart';
|
||||
|
||||
void main() {
|
||||
group('LoginScreen test', () {
|
||||
late LoginViewModel viewModel;
|
||||
late MockGoRouter goRouter;
|
||||
late FakeAuthRepository fakeAuthRepository;
|
||||
|
||||
setUp(() {
|
||||
fakeAuthRepository = FakeAuthRepository();
|
||||
viewModel = LoginViewModel(
|
||||
authRepository: fakeAuthRepository,
|
||||
);
|
||||
goRouter = MockGoRouter();
|
||||
});
|
||||
|
||||
Future<void> loadScreen(WidgetTester tester) async {
|
||||
await testApp(
|
||||
tester,
|
||||
LoginScreen(viewModel: viewModel),
|
||||
goRouter: goRouter,
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('should load screen', (WidgetTester tester) async {
|
||||
await mockNetworkImages(() async {
|
||||
await loadScreen(tester);
|
||||
expect(find.byType(LoginScreen), findsOneWidget);
|
||||
});
|
||||
});
|
||||
|
||||
testWidgets('should perform login', (WidgetTester tester) async {
|
||||
await mockNetworkImages(() async {
|
||||
await loadScreen(tester);
|
||||
|
||||
// Repo should have no key
|
||||
expect(fakeAuthRepository.token, null);
|
||||
|
||||
// Perform login
|
||||
await tester.tap(find.text('Login'));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Repo should have key
|
||||
expect(fakeAuthRepository.token, 'TOKEN');
|
||||
|
||||
// Should navigate to home screen
|
||||
verify(() => goRouter.go('/')).called(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
78
compass_app/app/test/ui/auth/logout_button_test.dart
Normal file
78
compass_app/app/test/ui/auth/logout_button_test.dart
Normal file
@@ -0,0 +1,78 @@
|
||||
// Copyright 2024 The Flutter team. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:compass_app/domain/models/itinerary_config/itinerary_config.dart';
|
||||
import 'package:compass_app/ui/auth/logout/view_models/logout_viewmodel.dart';
|
||||
import 'package:compass_app/ui/auth/logout/widgets/logout_button.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mocktail_image_network/mocktail_image_network.dart';
|
||||
|
||||
import '../../../testing/app.dart';
|
||||
import '../../../testing/fakes/repositories/fake_auth_repository.dart';
|
||||
import '../../../testing/fakes/repositories/fake_itinerary_config_repository.dart';
|
||||
import '../../../testing/mocks.dart';
|
||||
|
||||
void main() {
|
||||
group('LogoutButton test', () {
|
||||
late MockGoRouter goRouter;
|
||||
late FakeAuthRepository fakeAuthRepository;
|
||||
late FakeItineraryConfigRepository fakeItineraryConfigRepository;
|
||||
late LogoutViewModel viewModel;
|
||||
|
||||
setUp(() {
|
||||
goRouter = MockGoRouter();
|
||||
fakeAuthRepository = FakeAuthRepository();
|
||||
// Setup a token, should be cleared after logout
|
||||
fakeAuthRepository.token = 'TOKEN';
|
||||
// Setup an ItineraryConfig with some data, should be cleared after logout
|
||||
fakeItineraryConfigRepository = FakeItineraryConfigRepository(
|
||||
itineraryConfig: const ItineraryConfig(continent: 'CONTINENT'));
|
||||
viewModel = LogoutViewModel(
|
||||
authRepository: fakeAuthRepository,
|
||||
itineraryConfigRepository: fakeItineraryConfigRepository,
|
||||
);
|
||||
});
|
||||
|
||||
Future<void> loadScreen(WidgetTester tester) async {
|
||||
await testApp(
|
||||
tester,
|
||||
LogoutButton(viewModel: viewModel),
|
||||
goRouter: goRouter,
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('should load widget', (WidgetTester tester) async {
|
||||
await mockNetworkImages(() async {
|
||||
await loadScreen(tester);
|
||||
expect(find.byType(LogoutButton), findsOneWidget);
|
||||
});
|
||||
});
|
||||
|
||||
testWidgets('should perform logout', (WidgetTester tester) async {
|
||||
await mockNetworkImages(() async {
|
||||
await loadScreen(tester);
|
||||
|
||||
// Repo should have a key
|
||||
expect(fakeAuthRepository.token, 'TOKEN');
|
||||
// Itinerary config should have data
|
||||
expect(
|
||||
fakeItineraryConfigRepository.itineraryConfig,
|
||||
const ItineraryConfig(continent: 'CONTINENT'),
|
||||
);
|
||||
|
||||
// // Perform logout
|
||||
await tester.tap(find.byType(LogoutButton));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Repo should have no key
|
||||
expect(fakeAuthRepository.token, null);
|
||||
// Itinerary config should be cleared
|
||||
expect(
|
||||
fakeItineraryConfigRepository.itineraryConfig,
|
||||
const ItineraryConfig(),
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user