chore: bump dart sdk to 3.8 (#20355)
* chore: bump dart sdk to 3.8 * chore: make build * make pigeon * chore: format files --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
@@ -49,19 +49,8 @@ final _activities = [
|
||||
comment: 'Second Activity',
|
||||
user: UserStub.user1,
|
||||
),
|
||||
Activity(
|
||||
id: '3',
|
||||
createdAt: DateTime(300),
|
||||
type: ActivityType.like,
|
||||
assetId: 'asset-1',
|
||||
user: UserStub.user2,
|
||||
),
|
||||
Activity(
|
||||
id: '4',
|
||||
createdAt: DateTime(400),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.user1,
|
||||
),
|
||||
Activity(id: '3', createdAt: DateTime(300), type: ActivityType.like, assetId: 'asset-1', user: UserStub.user2),
|
||||
Activity(id: '4', createdAt: DateTime(400), type: ActivityType.like, user: UserStub.user1),
|
||||
];
|
||||
|
||||
void main() {
|
||||
@@ -85,10 +74,7 @@ void main() {
|
||||
mockCurrentAssetProvider = MockCurrentAssetProvider(AssetStub.image1);
|
||||
activityMock = MockAlbumActivity(_activities);
|
||||
overrides = [
|
||||
albumActivityProvider(
|
||||
AlbumStub.twoAsset.remoteId!,
|
||||
AssetStub.image1.remoteId!,
|
||||
).overrideWith(() => activityMock),
|
||||
albumActivityProvider(AlbumStub.twoAsset.remoteId!, AssetStub.image1.remoteId!).overrideWith(() => activityMock),
|
||||
currentAlbumProvider.overrideWith(() => mockCurrentAlbumProvider),
|
||||
currentAssetProvider.overrideWith(() => mockCurrentAssetProvider),
|
||||
];
|
||||
@@ -108,147 +94,82 @@ void main() {
|
||||
});
|
||||
|
||||
group("App bar", () {
|
||||
testWidgets(
|
||||
"No title when currentAsset != null",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
testWidgets("No title when currentAsset != null", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
|
||||
final listTile = tester.widget<AppBar>(find.byType(AppBar));
|
||||
expect(listTile.title, isNull);
|
||||
},
|
||||
);
|
||||
final listTile = tester.widget<AppBar>(find.byType(AppBar));
|
||||
expect(listTile.title, isNull);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"Album name as title when currentAsset == null",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
testWidgets("Album name as title when currentAsset == null", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
mockCurrentAssetProvider.state = null;
|
||||
await tester.pumpAndSettle();
|
||||
mockCurrentAssetProvider.state = null;
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.text(AlbumStub.twoAsset.name), findsOneWidget);
|
||||
final listTile = tester.widget<AppBar>(find.byType(AppBar));
|
||||
expect(listTile.title, isNotNull);
|
||||
},
|
||||
);
|
||||
expect(find.text(AlbumStub.twoAsset.name), findsOneWidget);
|
||||
final listTile = tester.widget<AppBar>(find.byType(AppBar));
|
||||
expect(listTile.title, isNotNull);
|
||||
});
|
||||
});
|
||||
|
||||
group("Body", () {
|
||||
testWidgets(
|
||||
"Contains a stack with Activity List and Activity Input",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
testWidgets("Contains a stack with Activity List and Activity Input", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.descendant(
|
||||
of: find.byType(Stack),
|
||||
matching: find.byType(ActivityTextField),
|
||||
),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(find.descendant(of: find.byType(Stack), matching: find.byType(ActivityTextField)), findsOneWidget);
|
||||
|
||||
expect(
|
||||
find.descendant(
|
||||
of: find.byType(Stack),
|
||||
matching: find.byType(ListView),
|
||||
),
|
||||
findsOneWidget,
|
||||
);
|
||||
},
|
||||
);
|
||||
expect(find.descendant(of: find.byType(Stack), matching: find.byType(ListView)), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"List Contains all dismissible activities",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
testWidgets("List Contains all dismissible activities", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final listFinder = find.descendant(
|
||||
of: find.byType(Stack),
|
||||
matching: find.byType(ListView),
|
||||
);
|
||||
final listChildren = find.descendant(
|
||||
of: listFinder,
|
||||
matching: find.byType(DismissibleActivity),
|
||||
);
|
||||
expect(listChildren, findsNWidgets(_activities.length));
|
||||
},
|
||||
);
|
||||
final listFinder = find.descendant(of: find.byType(Stack), matching: find.byType(ListView));
|
||||
final listChildren = find.descendant(of: listFinder, matching: find.byType(DismissibleActivity));
|
||||
expect(listChildren, findsNWidgets(_activities.length));
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"Submitting text input adds a comment with the text",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
testWidgets("Submitting text input adds a comment with the text", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
when(() => activityMock.addComment(any())).thenAnswer((_) => Future.value());
|
||||
when(() => activityMock.addComment(any())).thenAnswer((_) => Future.value());
|
||||
|
||||
final textField = find.byType(TextField);
|
||||
await tester.enterText(textField, 'Test comment');
|
||||
await tester.testTextInput.receiveAction(TextInputAction.done);
|
||||
final textField = find.byType(TextField);
|
||||
await tester.enterText(textField, 'Test comment');
|
||||
await tester.testTextInput.receiveAction(TextInputAction.done);
|
||||
|
||||
verify(() => activityMock.addComment('Test comment'));
|
||||
},
|
||||
);
|
||||
verify(() => activityMock.addComment('Test comment'));
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"Owner can remove all activities",
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
testWidgets("Owner can remove all activities", (tester) async {
|
||||
await tester.pumpConsumerWidget(const ActivitiesPage(), overrides: overrides);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final deletableActivityFinder = find.byWidgetPredicate(
|
||||
(widget) => widget is DismissibleActivity && widget.onDismiss != null,
|
||||
);
|
||||
expect(deletableActivityFinder, findsNWidgets(_activities.length));
|
||||
},
|
||||
);
|
||||
final deletableActivityFinder = find.byWidgetPredicate(
|
||||
(widget) => widget is DismissibleActivity && widget.onDismiss != null,
|
||||
);
|
||||
expect(deletableActivityFinder, findsNWidgets(_activities.length));
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"Non-Owner can remove only their activities",
|
||||
(tester) async {
|
||||
final mockCurrentUser = MockCurrentUserProvider();
|
||||
testWidgets("Non-Owner can remove only their activities", (tester) async {
|
||||
final mockCurrentUser = MockCurrentUserProvider();
|
||||
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: [
|
||||
...overrides,
|
||||
currentUserProvider.overrideWith((ref) => mockCurrentUser),
|
||||
],
|
||||
);
|
||||
mockCurrentUser.state = UserStub.user1;
|
||||
await tester.pumpAndSettle();
|
||||
await tester.pumpConsumerWidget(
|
||||
const ActivitiesPage(),
|
||||
overrides: [...overrides, currentUserProvider.overrideWith((ref) => mockCurrentUser)],
|
||||
);
|
||||
mockCurrentUser.state = UserStub.user1;
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final deletableActivityFinder = find.byWidgetPredicate(
|
||||
(widget) => widget is DismissibleActivity && widget.onDismiss != null,
|
||||
);
|
||||
expect(
|
||||
deletableActivityFinder,
|
||||
findsNWidgets(
|
||||
_activities.where((a) => a.user == UserStub.user1).length,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
final deletableActivityFinder = find.byWidgetPredicate(
|
||||
(widget) => widget is DismissibleActivity && widget.onDismiss != null,
|
||||
);
|
||||
expect(deletableActivityFinder, findsNWidgets(_activities.where((a) => a.user == UserStub.user1).length));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -26,19 +26,8 @@ final _activities = [
|
||||
comment: 'Second Activity',
|
||||
user: UserStub.user1,
|
||||
),
|
||||
Activity(
|
||||
id: '3',
|
||||
createdAt: DateTime(300),
|
||||
type: ActivityType.like,
|
||||
assetId: 'asset-1',
|
||||
user: UserStub.admin,
|
||||
),
|
||||
Activity(
|
||||
id: '4',
|
||||
createdAt: DateTime(400),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.user1,
|
||||
),
|
||||
Activity(id: '3', createdAt: DateTime(300), type: ActivityType.like, assetId: 'asset-1', user: UserStub.admin),
|
||||
Activity(id: '4', createdAt: DateTime(400), type: ActivityType.like, user: UserStub.user1),
|
||||
];
|
||||
|
||||
void main() {
|
||||
@@ -70,11 +59,7 @@ void main() {
|
||||
// Init and wait for providers future to complete
|
||||
provider = albumActivityProvider('test-album', 'test-asset');
|
||||
listener = ListenerMock();
|
||||
container.listen(
|
||||
provider,
|
||||
listener.call,
|
||||
fireImmediately: true,
|
||||
);
|
||||
container.listen(provider, listener.call, fireImmediately: true);
|
||||
|
||||
await container.read(provider.future);
|
||||
});
|
||||
@@ -83,18 +68,14 @@ void main() {
|
||||
verifyInOrder([
|
||||
() => listener.call(null, const AsyncLoading()),
|
||||
() => listener.call(
|
||||
const AsyncLoading(),
|
||||
any(
|
||||
that: allOf(
|
||||
[
|
||||
isA<AsyncData<List<Activity>>>(),
|
||||
predicate(
|
||||
(AsyncData<List<Activity>> ad) => ad.requireValue.every((e) => _activities.contains(e)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const AsyncLoading(),
|
||||
any(
|
||||
that: allOf([
|
||||
isA<AsyncData<List<Activity>>>(),
|
||||
predicate((AsyncData<List<Activity>> ad) => ad.requireValue.every((e) => _activities.contains(e))),
|
||||
]),
|
||||
),
|
||||
),
|
||||
]);
|
||||
|
||||
verifyNoMoreInteractions(listener);
|
||||
@@ -102,30 +83,15 @@ void main() {
|
||||
|
||||
group('addLike()', () {
|
||||
test('Like successfully added', () async {
|
||||
final like = Activity(
|
||||
id: '5',
|
||||
createdAt: DateTime(2023),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
);
|
||||
final like = Activity(id: '5', createdAt: DateTime(2023), type: ActivityType.like, user: UserStub.admin);
|
||||
|
||||
when(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.like,
|
||||
assetId: 'test-asset',
|
||||
),
|
||||
() => activityMock.addActivity('test-album', ActivityType.like, assetId: 'test-asset'),
|
||||
).thenAnswer((_) async => AsyncData(like));
|
||||
|
||||
await container.read(provider.notifier).addLike();
|
||||
|
||||
verify(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.like,
|
||||
assetId: 'test-asset',
|
||||
),
|
||||
);
|
||||
verify(() => activityMock.addActivity('test-album', ActivityType.like, assetId: 'test-asset'));
|
||||
|
||||
final activities = await container.read(provider.future);
|
||||
expect(activities, hasLength(5));
|
||||
@@ -136,31 +102,14 @@ void main() {
|
||||
});
|
||||
|
||||
test('Like failed', () async {
|
||||
final like = Activity(
|
||||
id: '5',
|
||||
createdAt: DateTime(2023),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
);
|
||||
final like = Activity(id: '5', createdAt: DateTime(2023), type: ActivityType.like, user: UserStub.admin);
|
||||
when(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.like,
|
||||
assetId: 'test-asset',
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => AsyncError(Exception('Mock'), StackTrace.current),
|
||||
);
|
||||
() => activityMock.addActivity('test-album', ActivityType.like, assetId: 'test-asset'),
|
||||
).thenAnswer((_) async => AsyncError(Exception('Mock'), StackTrace.current));
|
||||
|
||||
await container.read(provider.notifier).addLike();
|
||||
|
||||
verify(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.like,
|
||||
assetId: 'test-asset',
|
||||
),
|
||||
);
|
||||
verify(() => activityMock.addActivity('test-album', ActivityType.like, assetId: 'test-asset'));
|
||||
|
||||
final activities = await container.read(provider.future);
|
||||
expect(activities, hasLength(4));
|
||||
@@ -174,16 +123,11 @@ void main() {
|
||||
|
||||
await container.read(provider.notifier).removeActivity('3');
|
||||
|
||||
verify(
|
||||
() => activityMock.removeActivity('3'),
|
||||
);
|
||||
verify(() => activityMock.removeActivity('3'));
|
||||
|
||||
final activities = await container.read(provider.future);
|
||||
expect(activities, hasLength(3));
|
||||
expect(
|
||||
activities,
|
||||
isNot(anyElement(predicate((Activity a) => a.id == '3'))),
|
||||
);
|
||||
expect(activities, isNot(anyElement(predicate((Activity a) => a.id == '3'))));
|
||||
|
||||
verifyNever(() => activityStatisticsMock.removeActivity());
|
||||
});
|
||||
@@ -195,10 +139,7 @@ void main() {
|
||||
|
||||
final activities = await container.read(provider.future);
|
||||
expect(activities, hasLength(4));
|
||||
expect(
|
||||
activities,
|
||||
anyElement(predicate((Activity a) => a.id == '3')),
|
||||
);
|
||||
expect(activities, anyElement(predicate((Activity a) => a.id == '3')));
|
||||
});
|
||||
|
||||
test('Comment successfully removed', () async {
|
||||
@@ -207,10 +148,7 @@ void main() {
|
||||
await container.read(provider.notifier).removeActivity('1');
|
||||
|
||||
final activities = await container.read(provider.future);
|
||||
expect(
|
||||
activities,
|
||||
isNot(anyElement(predicate((Activity a) => a.id == '1'))),
|
||||
);
|
||||
expect(activities, isNot(anyElement(predicate((Activity a) => a.id == '1'))));
|
||||
|
||||
verify(() => activityStatisticsMock.removeActivity());
|
||||
});
|
||||
@@ -281,11 +219,7 @@ void main() {
|
||||
);
|
||||
|
||||
when(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.comment,
|
||||
comment: 'Test-Comment',
|
||||
),
|
||||
() => activityMock.addActivity('test-album', ActivityType.comment, comment: 'Test-Comment'),
|
||||
).thenAnswer((_) async => AsyncData(comment));
|
||||
when(() => albumActivityStatisticsMock.build('test-album')).thenReturn(2);
|
||||
when(() => activityMock.getAllActivities('test-album')).thenAnswer((_) async => [..._activities]);
|
||||
@@ -294,12 +228,7 @@ void main() {
|
||||
await container.read(albumProvider.notifier).addComment('Test-Comment');
|
||||
|
||||
verify(
|
||||
() => activityMock.addActivity(
|
||||
'test-album',
|
||||
ActivityType.comment,
|
||||
assetId: null,
|
||||
comment: 'Test-Comment',
|
||||
),
|
||||
() => activityMock.addActivity('test-album', ActivityType.comment, assetId: null, comment: 'Test-Comment'),
|
||||
);
|
||||
|
||||
final activities = await container.read(albumProvider.future);
|
||||
@@ -327,9 +256,7 @@ void main() {
|
||||
assetId: 'test-asset',
|
||||
comment: 'Test-Comment',
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => AsyncError(Exception('Error'), StackTrace.current),
|
||||
);
|
||||
).thenAnswer((_) async => AsyncError(Exception('Error'), StackTrace.current));
|
||||
|
||||
await container.read(provider.notifier).addComment('Test-Comment');
|
||||
|
||||
|
||||
@@ -15,11 +15,7 @@ void main() {
|
||||
|
||||
setUp(() async {
|
||||
activityMock = ActivityServiceMock();
|
||||
container = TestUtils.createContainer(
|
||||
overrides: [
|
||||
activityServiceProvider.overrideWith((ref) => activityMock),
|
||||
],
|
||||
);
|
||||
container = TestUtils.createContainer(overrides: [activityServiceProvider.overrideWith((ref) => activityMock)]);
|
||||
listener = ListenerMock();
|
||||
});
|
||||
|
||||
@@ -31,34 +27,21 @@ void main() {
|
||||
// Read here to make the getStatistics call
|
||||
container.read(activityStatisticsProvider('test-album', 'test-asset'));
|
||||
|
||||
container.listen(
|
||||
activityStatisticsProvider('test-album', 'test-asset'),
|
||||
listener.call,
|
||||
fireImmediately: true,
|
||||
);
|
||||
container.listen(activityStatisticsProvider('test-album', 'test-asset'), listener.call, fireImmediately: true);
|
||||
|
||||
// Sleep for the getStatistics future to resolve
|
||||
await Future.delayed(const Duration(milliseconds: 1));
|
||||
|
||||
verifyInOrder([
|
||||
() => listener.call(null, 0),
|
||||
() => listener.call(0, 5),
|
||||
]);
|
||||
verifyInOrder([() => listener.call(null, 0), () => listener.call(0, 5)]);
|
||||
|
||||
verifyNoMoreInteractions(listener);
|
||||
});
|
||||
|
||||
test('Adds activity', () async {
|
||||
when(
|
||||
() => activityMock.getStatistics('test-album'),
|
||||
).thenAnswer((_) async => const ActivityStats(comments: 10));
|
||||
when(() => activityMock.getStatistics('test-album')).thenAnswer((_) async => const ActivityStats(comments: 10));
|
||||
|
||||
final provider = activityStatisticsProvider('test-album');
|
||||
container.listen(
|
||||
provider,
|
||||
listener.call,
|
||||
fireImmediately: true,
|
||||
);
|
||||
container.listen(provider, listener.call, fireImmediately: true);
|
||||
|
||||
// Sleep for the getStatistics future to resolve
|
||||
await Future.delayed(const Duration(milliseconds: 1));
|
||||
@@ -75,11 +58,7 @@ void main() {
|
||||
).thenAnswer((_) async => const ActivityStats(comments: 10));
|
||||
|
||||
final provider = activityStatisticsProvider('new-album', 'test-asset');
|
||||
container.listen(
|
||||
provider,
|
||||
listener.call,
|
||||
fireImmediately: true,
|
||||
);
|
||||
container.listen(provider, listener.call, fireImmediately: true);
|
||||
|
||||
// Sleep for the getStatistics future to resolve
|
||||
await Future.delayed(const Duration(milliseconds: 1));
|
||||
|
||||
@@ -49,12 +49,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('Returns an Input text field', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTextField(onSubmit: (_) {}), overrides: overrides);
|
||||
|
||||
expect(find.byType(TextField), findsOneWidget);
|
||||
});
|
||||
@@ -63,76 +58,38 @@ void main() {
|
||||
final userProvider = MockCurrentUserProvider();
|
||||
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
),
|
||||
overrides: [
|
||||
currentUserProvider.overrideWith((ref) => userProvider),
|
||||
...overrides,
|
||||
],
|
||||
ActivityTextField(onSubmit: (_) {}),
|
||||
overrides: [currentUserProvider.overrideWith((ref) => userProvider), ...overrides],
|
||||
);
|
||||
|
||||
expect(find.byType(UserCircleAvatar), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('UserCircleAvatar displayed when user != null', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTextField(onSubmit: (_) {}), overrides: overrides);
|
||||
|
||||
expect(find.byType(UserCircleAvatar), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'Filled icon if likedId != null',
|
||||
(tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
likeId: '1',
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
expect(
|
||||
find.widgetWithIcon(IconButton, Icons.favorite_rounded),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(
|
||||
find.widgetWithIcon(IconButton, Icons.favorite_border_rounded),
|
||||
findsNothing,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets('Bordered icon if likedId == null', (tester) async {
|
||||
testWidgets('Filled icon if likedId != null', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
),
|
||||
ActivityTextField(onSubmit: (_) {}, likeId: '1'),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
expect(
|
||||
find.widgetWithIcon(IconButton, Icons.favorite_border_rounded),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(
|
||||
find.widgetWithIcon(IconButton, Icons.favorite_rounded),
|
||||
findsNothing,
|
||||
);
|
||||
expect(find.widgetWithIcon(IconButton, Icons.favorite_rounded), findsOneWidget);
|
||||
expect(find.widgetWithIcon(IconButton, Icons.favorite_border_rounded), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('Bordered icon if likedId == null', (tester) async {
|
||||
await tester.pumpConsumerWidget(ActivityTextField(onSubmit: (_) {}), overrides: overrides);
|
||||
|
||||
expect(find.widgetWithIcon(IconButton, Icons.favorite_border_rounded), findsOneWidget);
|
||||
expect(find.widgetWithIcon(IconButton, Icons.favorite_rounded), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('Adds new like', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTextField(onSubmit: (_) {}), overrides: overrides);
|
||||
|
||||
when(() => activityMock.addLike()).thenAnswer((_) => Future.value());
|
||||
|
||||
@@ -144,10 +101,7 @@ void main() {
|
||||
|
||||
testWidgets('Removes like if already liked', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (_) {},
|
||||
likeId: 'test-suffix',
|
||||
),
|
||||
ActivityTextField(onSubmit: (_) {}, likeId: 'test-suffix'),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
@@ -163,10 +117,7 @@ void main() {
|
||||
String? receivedText;
|
||||
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (text) => receivedText = text,
|
||||
likeId: 'test-suffix',
|
||||
),
|
||||
ActivityTextField(onSubmit: (text) => receivedText = text, likeId: 'test-suffix'),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
@@ -180,11 +131,7 @@ void main() {
|
||||
String? receviedText;
|
||||
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTextField(
|
||||
onSubmit: (text) => receviedText = text,
|
||||
isEnabled: false,
|
||||
likeId: 'test-suffix',
|
||||
),
|
||||
ActivityTextField(onSubmit: (text) => receviedText = text, isEnabled: false, likeId: 'test-suffix'),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
|
||||
@@ -43,14 +43,7 @@ void main() {
|
||||
|
||||
testWidgets('Returns a ListTile', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(
|
||||
Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
),
|
||||
),
|
||||
ActivityTile(Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin)),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
@@ -59,14 +52,7 @@ void main() {
|
||||
|
||||
testWidgets('No trailing widget when activity assetId == null', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(
|
||||
Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
),
|
||||
),
|
||||
ActivityTile(Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin)),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
@@ -77,13 +63,7 @@ void main() {
|
||||
testWidgets('Asset Thumbanil as trailing widget when activity assetId != null', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(
|
||||
Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
assetId: '1',
|
||||
),
|
||||
Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin, assetId: '1'),
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
@@ -96,13 +76,7 @@ void main() {
|
||||
testWidgets('No trailing widget when current asset != null', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(
|
||||
Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
assetId: '1',
|
||||
),
|
||||
Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin, assetId: '1'),
|
||||
),
|
||||
overrides: overrides,
|
||||
);
|
||||
@@ -115,37 +89,23 @@ void main() {
|
||||
});
|
||||
|
||||
group('Like Activity', () {
|
||||
final activity = Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
);
|
||||
final activity = Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin);
|
||||
|
||||
testWidgets('Like contains filled heart as leading', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
// Leading widget should not be null
|
||||
final listTile = tester.widget<ListTile>(find.byType(ListTile));
|
||||
expect(listTile.leading, isNotNull);
|
||||
|
||||
// And should have a favorite icon
|
||||
final favoIconFinder = find.widgetWithIcon(
|
||||
listTile.leading!.runtimeType,
|
||||
Icons.favorite_rounded,
|
||||
);
|
||||
final favoIconFinder = find.widgetWithIcon(listTile.leading!.runtimeType, Icons.favorite_rounded);
|
||||
|
||||
expect(favoIconFinder, findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('Like title is center aligned', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
final listTile = tester.widget<ListTile>(find.byType(ListTile));
|
||||
|
||||
@@ -153,10 +113,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('No subtitle for likes', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
final listTile = tester.widget<ListTile>(find.byType(ListTile));
|
||||
|
||||
@@ -174,10 +131,7 @@ void main() {
|
||||
);
|
||||
|
||||
testWidgets('Comment contains User Circle Avatar as leading', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
final userAvatarFinder = find.byType(UserCircleAvatar);
|
||||
expect(userAvatarFinder, findsOneWidget);
|
||||
@@ -192,10 +146,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('Comment title is top aligned', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
final listTile = tester.widget<ListTile>(find.byType(ListTile));
|
||||
|
||||
@@ -203,21 +154,12 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('Contains comment text as subtitle', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
ActivityTile(activity),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(ActivityTile(activity), overrides: overrides);
|
||||
|
||||
final listTile = tester.widget<ListTile>(find.byType(ListTile));
|
||||
|
||||
expect(listTile.subtitle, isNotNull);
|
||||
expect(
|
||||
find.descendant(
|
||||
of: find.byType(ListTile),
|
||||
matching: find.text(activity.comment!),
|
||||
),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(find.descendant(of: find.byType(ListTile), matching: find.text(activity.comment!)), findsOneWidget);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,12 +15,7 @@ import '../../test_utils.dart';
|
||||
import '../../widget_tester_extensions.dart';
|
||||
import '../asset_viewer/asset_viewer_mocks.dart';
|
||||
|
||||
final activity = Activity(
|
||||
id: '1',
|
||||
createdAt: DateTime(100),
|
||||
type: ActivityType.like,
|
||||
user: UserStub.admin,
|
||||
);
|
||||
final activity = Activity(id: '1', createdAt: DateTime(100), type: ActivityType.like, user: UserStub.admin);
|
||||
|
||||
void main() {
|
||||
late MockCurrentAssetProvider assetProvider;
|
||||
@@ -34,10 +29,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('Returns a Dismissible', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
DismissibleActivity('1', ActivityTile(activity)),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(DismissibleActivity('1', ActivityTile(activity)), overrides: overrides);
|
||||
|
||||
expect(find.byType(Dismissible), findsOneWidget);
|
||||
});
|
||||
@@ -58,11 +50,7 @@ void main() {
|
||||
testWidgets('Ok action in ConfirmDialog should call onDismiss with activityId', (tester) async {
|
||||
String? receivedActivityId;
|
||||
await tester.pumpConsumerWidget(
|
||||
DismissibleActivity(
|
||||
'1',
|
||||
ActivityTile(activity),
|
||||
onDismiss: (id) => receivedActivityId = id,
|
||||
),
|
||||
DismissibleActivity('1', ActivityTile(activity), onDismiss: (id) => receivedActivityId = id),
|
||||
overrides: overrides,
|
||||
);
|
||||
|
||||
@@ -91,10 +79,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('No delete dialog if onDismiss is not set', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
DismissibleActivity('1', ActivityTile(activity)),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(DismissibleActivity('1', ActivityTile(activity)), overrides: overrides);
|
||||
|
||||
final dismissible = find.byType(Dismissible);
|
||||
await tester.drag(dismissible, const Offset(500, 0));
|
||||
@@ -104,10 +89,7 @@ void main() {
|
||||
});
|
||||
|
||||
testWidgets('No icon for background if onDismiss is not set', (tester) async {
|
||||
await tester.pumpConsumerWidget(
|
||||
DismissibleActivity('1', ActivityTile(activity)),
|
||||
overrides: overrides,
|
||||
);
|
||||
await tester.pumpConsumerWidget(DismissibleActivity('1', ActivityTile(activity)), overrides: overrides);
|
||||
|
||||
final dismissible = find.byType(Dismissible);
|
||||
await tester.drag(dismissible, const Offset(-500, 0));
|
||||
|
||||
Reference in New Issue
Block a user