91 lines
3.3 KiB
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);
|
|
});
|
|
}
|