| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- import 'package:cardash_launcher/core/theme/app_theme.dart';
- import 'package:cardash_launcher/data/models/media_playback.dart';
- import 'package:cardash_launcher/data/models/system_status.dart';
- import 'package:cardash_launcher/features/home/widgets/volume_card.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_test/flutter_test.dart';
- void main() {
- testWidgets('the card shows the now-playing title', (tester) async {
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.light(),
- home: const Scaffold(
- body: VolumeCard(
- volume: VolumeInfo(index: 8, max: 15),
- onSetVolume: _ignoreVolume,
- onToggleMute: _ignore,
- isMusicPlaying: true,
- onPlayPause: _ignore,
- media: MediaPlayback(
- hasAccess: true,
- hasSession: true,
- playing: true,
- title: 'Night Drive',
- artist: 'The Dashboard',
- durationMs: 240000,
- positionMs: 60000,
- ),
- ),
- ),
- ),
- );
- expect(find.text('Night Drive — The Dashboard'), findsOneWidget);
- expect(find.text('Nothing playing'), findsNothing);
- });
- testWidgets('the card shows Nothing playing without a session', (
- tester,
- ) async {
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.dark(),
- home: const Scaffold(
- body: VolumeCard(
- volume: VolumeInfo(index: 8, max: 15),
- onSetVolume: _ignoreVolume,
- onToggleMute: _ignore,
- isMusicPlaying: false,
- onPlayPause: _ignore,
- media: MediaPlayback(),
- ),
- ),
- ),
- );
- expect(find.text('Nothing playing'), findsOneWidget);
- });
- testWidgets('fixed car volume disables the slider and explains why', (
- tester,
- ) async {
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.dark(),
- home: const Scaffold(
- body: VolumeCard(
- volume: VolumeInfo(index: 100, max: 100, fixed: true),
- onSetVolume: _ignoreVolume,
- onToggleMute: _ignore,
- isMusicPlaying: false,
- onPlayPause: _ignore,
- media: MediaPlayback(),
- ),
- ),
- ),
- );
- expect(find.text('100%'), findsOneWidget);
- expect(find.text('Volume is controlled by the car'), findsOneWidget);
- expect(tester.widget<Slider>(find.byType(Slider)).onChanged, isNull);
- expect(find.text('Mute'), findsNothing);
- });
- testWidgets('an unconfirmed level is marked with a question mark', (
- tester,
- ) async {
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.dark(),
- home: const Scaffold(
- body: VolumeCard(
- volume: VolumeInfo(index: 5, max: 15),
- onSetVolume: _ignoreVolume,
- onToggleMute: _ignore,
- isMusicPlaying: false,
- onPlayPause: _ignore,
- media: MediaPlayback(),
- unconfirmed: true,
- ),
- ),
- ),
- );
- expect(find.text('33%?'), findsOneWidget);
- });
- testWidgets('the ring switches between play and pause', (tester) async {
- var playing = false;
- var taps = 0;
- await tester.pumpWidget(
- MaterialApp(
- theme: AppTheme.dark(),
- home: Scaffold(
- body: StatefulBuilder(
- builder: (context, setState) {
- return VolumeCard(
- volume: const VolumeInfo(index: 8, max: 15),
- onSetVolume: (_) {},
- onToggleMute: () {},
- isMusicPlaying: playing,
- media: const MediaPlayback(),
- onPlayPause: () {
- taps++;
- setState(() => playing = !playing);
- },
- );
- },
- ),
- ),
- ),
- );
- expect(find.byIcon(Icons.play_arrow_rounded), findsOneWidget);
- expect(find.byIcon(Icons.pause_rounded), findsNothing);
- await tester.tap(find.byIcon(Icons.play_arrow_rounded));
- await tester.pump();
- expect(taps, 1);
- expect(find.byIcon(Icons.pause_rounded), findsOneWidget);
- expect(find.byIcon(Icons.play_arrow_rounded), findsNothing);
- });
- }
- void _ignore() {}
- void _ignoreVolume(int _) {}
|