// Copyright 2016 The Chromium Authors. 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:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import '../lib/card_collection.dart' as card_collection;

void main() {
  testWidgets("Card Collection smoke test", (WidgetTester tester) async {
    card_collection.main(); // builds the app and schedules a frame but doesn't trigger one
    await tester.pump(); // see https://github.com/flutter/flutter/issues/1865
    await tester.pump(); // triggers a frame

    final Finder navigationMenu = find.byWidgetPredicate((Widget widget) {
      if (widget is Tooltip)
        return widget.message == 'Open navigation menu';
      return false;
    });

    expect(navigationMenu, findsOneWidget);

    await tester.tap(navigationMenu);
    await tester.pump(); // start opening menu
    await tester.pump(const Duration(seconds: 1)); // wait til it's really opened

    // smoke test for various checkboxes
    await tester.tap(find.text('Make card labels editable'));
    await tester.pump();
    await tester.tap(find.text('Let the sun shine'));
    await tester.pump();
    await tester.tap(find.text('Make card labels editable'));
    await tester.pump();
    await tester.tap(find.text('Vary font sizes'));
    await tester.pump();
  });
}
