select_friend_logic_test.dart 2.01 KB
import 'package:doublefeel_flutter/app/modules/friends/controllers/friends_controller.dart';
import 'package:doublefeel_flutter/app/modules/friends/controllers/select_friend_logic.dart';
import 'package:doublefeel_flutter/app/modules/friends/views/select_friend_view.dart';
import 'package:doublefeel_flutter/app/modules/friends/widgets/friend_health_card.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';

void main() {
  late FriendsController friendsController;

  setUp(() {
    friendsController = FriendsController();
    friendsController.friends.assignAll(_friends);
  });

  test('sync moves the watch-face selection to the selected friend', () {
    final logic = SelectFriendLogic(friendsController);

    logic.selectFriendAt(1);
    final didSync = logic.syncSelectedFriendToWatchFace();

    expect(didSync, isTrue);
    expect(friendsController.friends[0].isOnWatchFace, isFalse);
    expect(friendsController.friends[1].isOnWatchFace, isTrue);
  });

  testWidgets('tapping a friend updates the selected card', (tester) async {
    await tester.pumpWidget(
      GetMaterialApp(
        home: Scaffold(
          body: SelectFriendView(friendsController: friendsController),
        ),
      ),
    );
    await tester.pump();

    var cards = tester.widgetList<FriendHealthCard>(
      find.byType(FriendHealthCard),
    );
    expect(cards.map((card) => card.isSelected), [isTrue, isFalse]);

    await tester.tap(find.text('Bob'));
    await tester.pump();

    cards = tester.widgetList<FriendHealthCard>(find.byType(FriendHealthCard));
    expect(cards.map((card) => card.isSelected), [isFalse, isTrue]);
  });
}

const _friends = [
  FriendHealthData(
    name: 'Alice',
    updatedAt: '',
    sleepQualityScore: null,
    steps: null,
    statusText: '',
    stressValue: null,
    isOnWatchFace: true,
  ),
  FriendHealthData(
    name: 'Bob',
    updatedAt: '',
    sleepQualityScore: null,
    steps: null,
    statusText: '',
    stressValue: null,
  ),
];