mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
Fix test, remove unused mocks
This commit is contained in:
@@ -1,131 +0,0 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:wger/core/locator.dart';
|
||||
import 'package:wger/database/exercises/exercise_database.dart';
|
||||
import 'package:wger/models/exercises/exercise.dart';
|
||||
import 'package:wger/providers/exercises.dart';
|
||||
|
||||
import '../../test_data/exercises.dart';
|
||||
import '../fixtures/fixture_reader.dart';
|
||||
import '../measurements/measurement_provider_test.mocks.dart';
|
||||
|
||||
void main() {
|
||||
late MockWgerBaseProvider mockBaseProvider;
|
||||
late ExercisesProvider provider;
|
||||
|
||||
const String exerciseInfoUrl = 'exerciseinfo';
|
||||
|
||||
final Uri tExerciseInfoUri = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseInfoUrl/9/',
|
||||
);
|
||||
|
||||
final Uri tExerciseInfoUri2 = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseInfoUrl/1/',
|
||||
);
|
||||
|
||||
final Map<String, dynamic> tExerciseInfoMap = jsonDecode(
|
||||
fixture('exercises/exerciseinfo_response.json'),
|
||||
);
|
||||
|
||||
setUpAll(() async {
|
||||
// Needs to be configured here, setUp runs on every test, setUpAll only once
|
||||
await ServiceLocator().configure();
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
driftRuntimeOptions.dontWarnAboutMultipleDatabases = true;
|
||||
|
||||
mockBaseProvider = MockWgerBaseProvider();
|
||||
provider = ExercisesProvider(
|
||||
mockBaseProvider,
|
||||
database: ExerciseDatabase.inMemory(NativeDatabase.memory()),
|
||||
);
|
||||
provider.exercises = getTestExercises();
|
||||
provider.languages = [tLanguage1, tLanguage2, tLanguage3];
|
||||
|
||||
// Mock base info response
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 9)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 1)).thenReturn(tExerciseInfoUri2);
|
||||
|
||||
when(
|
||||
mockBaseProvider.fetch(tExerciseInfoUri),
|
||||
).thenAnswer((_) => Future.value(tExerciseInfoMap));
|
||||
when(
|
||||
mockBaseProvider.fetch(tExerciseInfoUri2),
|
||||
).thenAnswer((_) => Future.value(tExerciseInfoMap));
|
||||
});
|
||||
|
||||
group('Correctly loads and parses data from the server', () {
|
||||
test('test that fetchAndSetExerciseBase finds an existing base', () async {
|
||||
// arrange and act
|
||||
final base = await provider.fetchAndSetExercise(1);
|
||||
|
||||
// assert
|
||||
verifyNever(provider.baseProvider.fetch(tExerciseInfoUri2));
|
||||
expect(base?.id, 1);
|
||||
});
|
||||
|
||||
test('test that fetchAndSetExerciseBase fetches a new base', () async {
|
||||
// arrange and act
|
||||
final base = await provider.fetchAndSetExercise(9);
|
||||
|
||||
// assert
|
||||
verify(provider.baseProvider.fetch(tExerciseInfoUri));
|
||||
expect(base?.id, 9);
|
||||
});
|
||||
|
||||
test('Load the readExerciseBaseFromBaseInfo parse method', () {
|
||||
// arrange
|
||||
|
||||
// arrange and act
|
||||
final exercise = Exercise.fromApiDataJson(
|
||||
tExerciseInfoMap,
|
||||
const [tLanguage1, tLanguage2, tLanguage3],
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(exercise.id, 9);
|
||||
expect(exercise.uuid, '1b020b3a-3732-4c7e-92fd-a0cec90ed69b');
|
||||
expect(exercise.categoryId, 10);
|
||||
expect(exercise.equipment.map((e) => e.name), ['Kettlebell']);
|
||||
expect(exercise.muscles.map((e) => e.name), [
|
||||
'Biceps femoris',
|
||||
'Brachialis',
|
||||
'Obliquus externus abdominis',
|
||||
]);
|
||||
expect(exercise.musclesSecondary.map((e) => e.name), [
|
||||
'Biceps femoris',
|
||||
'Brachialis',
|
||||
'Obliquus externus abdominis',
|
||||
]);
|
||||
expect(exercise.images.map((e) => e.uuid), [
|
||||
'1f5d2b2f-d4ea-4eeb-9377-56176465e08d',
|
||||
'ab645585-26ef-4992-a9ec-15425687ece9',
|
||||
'd8aa5990-bb47-4111-9823-e2fbd98fe07f',
|
||||
'49a159e1-1e00-409a-81c9-b4d4489fbd67',
|
||||
]);
|
||||
expect(exercise.videos.map((v) => v.uuid), ['63e996e9-a772-4ca5-9d09-8b4be03f6be4']);
|
||||
|
||||
final translation1 = exercise.translations[0];
|
||||
expect(translation1.name, '2 Handed Kettlebell Swing');
|
||||
expect(translation1.languageObj.shortName, 'en');
|
||||
expect(translation1.notes[0].comment, "it's important to do the exercise correctly");
|
||||
expect(translation1.notes[1].comment, 'put a lot of effort into this exercise');
|
||||
expect(translation1.notes[2].comment, 'have fun');
|
||||
expect(translation1.aliases[0].alias, 'double handed kettlebell');
|
||||
expect(translation1.aliases[1].alias, 'Kettlebell russian style');
|
||||
expect(exercise.translations[1].name, 'Kettlebell Con Dos Manos');
|
||||
expect(exercise.translations[2].name, 'Zweihändiges Kettlebell');
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -17,24 +17,31 @@
|
||||
*/
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wger/l10n/generated/app_localizations.dart';
|
||||
import 'package:wger/providers/exercises.dart';
|
||||
import 'package:wger/models/exercises/category.dart';
|
||||
import 'package:wger/models/exercises/equipment.dart';
|
||||
import 'package:wger/models/exercises/exercise.dart';
|
||||
import 'package:wger/models/exercises/muscle.dart';
|
||||
import 'package:wger/providers/exercise_data.dart';
|
||||
import 'package:wger/widgets/exercises/exercises.dart';
|
||||
|
||||
import '../../test_data/exercises.dart';
|
||||
import 'exercises_detail_widget_test.mocks.dart';
|
||||
|
||||
@GenerateMocks([ExercisesProvider])
|
||||
void main() {
|
||||
final mockProvider = MockExercisesProvider();
|
||||
|
||||
Widget createHomeScreen({locale = 'en'}) {
|
||||
return ChangeNotifierProvider<ExercisesProvider>(
|
||||
create: (context) => mockProvider,
|
||||
return ProviderScope(
|
||||
overrides: [
|
||||
exercisesProvider.overrideWith((ref) => Stream<List<Exercise>>.value(<Exercise>[])),
|
||||
exerciseMusclesProvider.overrideWith((ref) => Stream<List<Muscle>>.value(<Muscle>[])),
|
||||
exerciseCategoriesProvider.overrideWith(
|
||||
(ref) => Stream<List<ExerciseCategory>>.value(<ExerciseCategory>[]),
|
||||
),
|
||||
exerciseEquipmentProvider.overrideWith(
|
||||
(ref) => Stream<List<Equipment>>.value(<Equipment>[]),
|
||||
),
|
||||
],
|
||||
child: MaterialApp(
|
||||
locale: Locale(locale),
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
@@ -46,8 +53,6 @@ void main() {
|
||||
}
|
||||
|
||||
testWidgets('Test the widgets on the exercise detail widget', (WidgetTester tester) async {
|
||||
when(mockProvider.findExercisesByVariationId(any, exerciseIdToExclude: 1)).thenReturn([]);
|
||||
|
||||
await tester.pumpWidget(createHomeScreen());
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
// Mocks generated by Mockito 5.4.6 from annotations
|
||||
// in wger/test/exercises/exercises_detail_widget_test.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i10;
|
||||
import 'dart:ui' as _i11;
|
||||
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:wger/database/exercises/exercise_database.dart' as _i3;
|
||||
import 'package:wger/models/exercises/category.dart' as _i6;
|
||||
import 'package:wger/models/exercises/equipment.dart' as _i8;
|
||||
import 'package:wger/models/exercises/exercise.dart' as _i5;
|
||||
import 'package:wger/models/exercises/language.dart' as _i9;
|
||||
import 'package:wger/models/exercises/muscle.dart' as _i7;
|
||||
import 'package:wger/providers/base_provider.dart' as _i2;
|
||||
import 'package:wger/providers/exercises.dart' as _i4;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
// ignore_for_file: deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use_from_same_package
|
||||
// ignore_for_file: implementation_imports
|
||||
// ignore_for_file: invalid_use_of_visible_for_testing_member
|
||||
// ignore_for_file: must_be_immutable
|
||||
// ignore_for_file: prefer_const_constructors
|
||||
// ignore_for_file: unnecessary_parenthesis
|
||||
// ignore_for_file: camel_case_types
|
||||
// ignore_for_file: subtype_of_sealed_class
|
||||
|
||||
class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider {
|
||||
_FakeWgerBaseProvider_0(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeExerciseDatabase_1 extends _i1.SmartFake implements _i3.ExerciseDatabase {
|
||||
_FakeExerciseDatabase_1(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
/// A class which mocks [ExercisesProvider].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockExercisesProvider extends _i1.Mock implements _i4.ExercisesProvider {
|
||||
MockExercisesProvider() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i2.WgerBaseProvider get baseProvider =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#baseProvider),
|
||||
returnValue: _FakeWgerBaseProvider_0(
|
||||
this,
|
||||
Invocation.getter(#baseProvider),
|
||||
),
|
||||
)
|
||||
as _i2.WgerBaseProvider);
|
||||
|
||||
@override
|
||||
_i3.ExerciseDatabase get database =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#database),
|
||||
returnValue: _FakeExerciseDatabase_1(
|
||||
this,
|
||||
Invocation.getter(#database),
|
||||
),
|
||||
)
|
||||
as _i3.ExerciseDatabase);
|
||||
|
||||
@override
|
||||
List<_i5.Exercise> get exercises =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#exercises),
|
||||
returnValue: <_i5.Exercise>[],
|
||||
)
|
||||
as List<_i5.Exercise>);
|
||||
|
||||
@override
|
||||
Map<int, List<_i5.Exercise>> get exerciseByVariation =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#exerciseByVariation),
|
||||
returnValue: <int, List<_i5.Exercise>>{},
|
||||
)
|
||||
as Map<int, List<_i5.Exercise>>);
|
||||
|
||||
@override
|
||||
List<_i6.ExerciseCategory> get categories =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#categories),
|
||||
returnValue: <_i6.ExerciseCategory>[],
|
||||
)
|
||||
as List<_i6.ExerciseCategory>);
|
||||
|
||||
@override
|
||||
List<_i7.Muscle> get muscles =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#muscles),
|
||||
returnValue: <_i7.Muscle>[],
|
||||
)
|
||||
as List<_i7.Muscle>);
|
||||
|
||||
@override
|
||||
List<_i8.Equipment> get equipment =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#equipment),
|
||||
returnValue: <_i8.Equipment>[],
|
||||
)
|
||||
as List<_i8.Equipment>);
|
||||
|
||||
@override
|
||||
List<_i9.Language> get languages =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#languages),
|
||||
returnValue: <_i9.Language>[],
|
||||
)
|
||||
as List<_i9.Language>);
|
||||
|
||||
@override
|
||||
set database(_i3.ExerciseDatabase? _database) => super.noSuchMethod(
|
||||
Invocation.setter(#database, _database),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
set exercises(List<_i5.Exercise>? _exercises) => super.noSuchMethod(
|
||||
Invocation.setter(#exercises, _exercises),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
set languages(List<_i9.Language>? languages) => super.noSuchMethod(
|
||||
Invocation.setter(#languages, languages),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
bool get hasListeners =>
|
||||
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool);
|
||||
|
||||
@override
|
||||
void clear() => super.noSuchMethod(
|
||||
Invocation.method(#clear, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i10.Future<_i5.Exercise?> fetchAndSetExercise(int? exerciseId) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetExercise, [exerciseId]),
|
||||
returnValue: _i10.Future<_i5.Exercise?>.value(),
|
||||
)
|
||||
as _i10.Future<_i5.Exercise?>);
|
||||
|
||||
@override
|
||||
void addListener(_i11.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#addListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void removeListener(_i11.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#removeListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void dispose() => super.noSuchMethod(
|
||||
Invocation.method(#dispose, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void notifyListeners() => super.noSuchMethod(
|
||||
Invocation.method(#notifyListeners, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
@@ -17,16 +17,10 @@
|
||||
*/
|
||||
|
||||
import 'package:wger/providers/auth.dart';
|
||||
import 'package:wger/providers/exercises.dart';
|
||||
|
||||
import 'measurements/measurement_provider_test.mocks.dart';
|
||||
import 'other/base_provider_test.mocks.dart';
|
||||
|
||||
// Test Auth provider
|
||||
final AuthProvider testAuthProvider = AuthProvider(MockClient())
|
||||
..token = 'FooBar'
|
||||
..serverUrl = 'https://localhost';
|
||||
|
||||
// Test Exercises provider
|
||||
final mockBaseProvider = MockWgerBaseProvider();
|
||||
final ExercisesProvider testExercisesProvider = ExercisesProvider(mockBaseProvider);
|
||||
|
||||
Reference in New Issue
Block a user