initial commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:manager/core/models/models.dart';
|
||||
|
||||
Map<String, dynamic> _loadFixture(String name) {
|
||||
final raw = File('test/fixtures/$name').readAsStringSync();
|
||||
return jsonDecode(raw) as Map<String, dynamic>;
|
||||
}
|
||||
|
||||
void main() {
|
||||
group('Service.fromJson', () {
|
||||
test('parses a fully-populated service including nested backup config', () {
|
||||
final service = Service.fromJson(_loadFixture('service_full.json'));
|
||||
|
||||
expect(service.id, 'svc_123');
|
||||
expect(service.name, 'postgres');
|
||||
expect(service.composeFile, '/opt/compose/postgres/docker-compose.yml');
|
||||
expect(service.composeType, 'docker compose');
|
||||
expect(service.backupFolder, '/opt/data/containers/postgres');
|
||||
expect(service.status, 'up');
|
||||
expect(service.stopOnBackup, isTrue);
|
||||
expect(service.externalBackupStopMinutes, 5);
|
||||
expect(service.externalBackupStartMinutes, 2);
|
||||
|
||||
final backup = service.backup;
|
||||
expect(backup, isNotNull);
|
||||
expect(backup!.sourcePath, '/opt/data/containers/postgres');
|
||||
expect(backup.nextRun, DateTime.parse('2026-07-27T02:00:00Z'));
|
||||
expect(backup.lastRun, DateTime.parse('2026-07-26T02:00:00Z'));
|
||||
|
||||
expect(backup.targets, hasLength(1));
|
||||
final target = backup.targets.single;
|
||||
expect(target.id, 't1');
|
||||
expect(target.method, BackupMethod.restic);
|
||||
expect(target.remote, 'sftp:nas-cold:/backups/edge-01');
|
||||
expect(target.params, {'transfers': '4'});
|
||||
expect(target.schedule, '0 2 * * *');
|
||||
expect(target.lastRun, DateTime.parse('2026-07-26T02:00:00Z'));
|
||||
expect(target.nextRun, DateTime.parse('2026-07-27T02:00:00Z'));
|
||||
|
||||
expect(backup.history, hasLength(1));
|
||||
final execution = backup.history.single;
|
||||
expect(execution.success, isTrue);
|
||||
expect(execution.durationSeconds, 12);
|
||||
expect(execution.targetId, 't1');
|
||||
});
|
||||
|
||||
test('fills in defaults for every omitted/nullable field', () {
|
||||
final service = Service.fromJson(_loadFixture('service_minimal.json'));
|
||||
|
||||
expect(service.id, 'svc_456');
|
||||
expect(service.name, 'n8n');
|
||||
expect(service.status, 'down');
|
||||
expect(service.composeType, isNull);
|
||||
expect(service.backupFolder, isNull);
|
||||
expect(service.stopOnBackup, isFalse);
|
||||
expect(service.externalBackupStopMinutes, 0);
|
||||
expect(service.externalBackupStartMinutes, 0);
|
||||
expect(service.backup, isNull);
|
||||
});
|
||||
|
||||
test('round-trips through toJson/fromJson without losing data', () {
|
||||
final original = Service.fromJson(_loadFixture('service_full.json'));
|
||||
final roundTripped = Service.fromJson(original.toJson());
|
||||
expect(roundTripped, original);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:manager/core/models/severity_mapping.dart';
|
||||
import 'package:manager/core/theme/status_colors.dart';
|
||||
|
||||
void main() {
|
||||
group('severityForServiceStatus', () {
|
||||
test('maps up/down to good/critical and anything else to warning', () {
|
||||
expect(severityForServiceStatus('up'), Severity.good);
|
||||
expect(severityForServiceStatus('down'), Severity.critical);
|
||||
expect(severityForServiceStatus('unknown'), Severity.warning);
|
||||
expect(severityForServiceStatus('anything-else'), Severity.warning);
|
||||
});
|
||||
});
|
||||
|
||||
group('severityForSuccess', () {
|
||||
test('maps true/false to good/critical', () {
|
||||
expect(severityForSuccess(true), Severity.good);
|
||||
expect(severityForSuccess(false), Severity.critical);
|
||||
});
|
||||
});
|
||||
|
||||
group('severityForNodeReachable', () {
|
||||
test('maps true/false to good/critical', () {
|
||||
expect(severityForNodeReachable(true), Severity.good);
|
||||
expect(severityForNodeReachable(false), Severity.critical);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user