Files
ignis_app/test/provider_mutation_test.dart

91 lines
3.3 KiB
Dart

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': <Object>[]});
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': <Object>[]});
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': <Object>[]});
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': <Object>[]});
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);
});
}