import 'package:flutter_test/flutter_test.dart'; import 'package:ignis_app/app/load_state.dart'; import 'package:ignis_app/providers/providers.dart'; import 'test_support.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('tasks addOnce sends runAt and reloads tasks', () async { final api = FakeIgnisApi(tasksData: {'tasks': []}); final container = createTestContainer(api); await container .read(tasksProvider.notifier) .addOnce( targetId: 'bedroom', targetState: false, runAt: '2026-05-01T18:00:00Z', ); expect(api.scheduledOnceParams, isNotNull); expect(api.scheduledOnceParams, containsPair('target_id', 'bedroom')); expect(api.scheduledOnceParams, containsPair('state', false)); expect( api.scheduledOnceParams, containsPair('run_at', '2026-05-01T18:00:00Z'), ); expect(api.scheduledOnceParams, containsPair('is_group', true)); expect(container.read(tasksProvider).status, LoadStatus.empty); }); test( 'tasks addCron sends normalized cron params and reloads tasks', () async { final api = FakeIgnisApi(tasksData: {'tasks': []}); final container = createTestContainer(api); await container .read(tasksProvider.notifier) .addCron( targetId: 'kitchen', hour: '7', minute: '30', dayOfWeek: '1,2,3,4,5', targetState: true, ); expect(api.scheduledCronParams, isNotNull); expect(api.scheduledCronParams, containsPair('target_id', 'kitchen')); expect(api.scheduledCronParams, containsPair('hour', '7')); expect(api.scheduledCronParams, containsPair('minute', '30')); expect(api.scheduledCronParams, containsPair('day_of_week', '1,2,3,4,5')); expect(api.scheduledCronParams, containsPair('state', true)); expect(api.scheduledCronParams, containsPair('is_group', true)); expect(container.read(tasksProvider).status, LoadStatus.empty); }, ); test('groups setTimer4h toggles on and schedules auto-off', () async { final api = FakeIgnisApi(tasksData: {'tasks': []}); final container = createTestContainer(api); await container.read(groupsProvider.notifier).setTimer4h('hall'); expect(api.controlledGroupId, 'hall'); expect(api.controlGroupParams, containsPair('state', true)); expect(api.scheduledOnceParams, containsPair('target_id', 'hall')); expect(api.scheduledOnceParams, containsPair('state', false)); expect(api.scheduledOnceParams, containsPair('hours_from_now', 4)); expect(api.scheduledOnceParams, containsPair('is_group', true)); }); test('api key create returns token and refreshes list', () async { final api = FakeIgnisApi(apiKeysData: {'keys': []}); final container = createTestContainer(api); final createdKey = await container .read(apiKeysProvider.notifier) .create('Guest', isAdmin: true); expect(createdKey, 'Guest_token'); expect(api.createdApiKeyName, 'Guest'); expect(api.createdApiKeyIsAdmin, isTrue); final state = container.read(apiKeysProvider); expect(state.status, LoadStatus.data); expect(state.data.single.name, 'Guest'); expect(state.data.single.isAdmin, isTrue); }); }