twonly-app/test/utils/key_value_test.dart

86 lines
2.6 KiB
Dart

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/utils/keyvalue.dart';
void main() {
late Directory tempDir;
setUp(() {
tempDir = Directory.systemTemp.createTempSync('twonly_keyvalue_test_');
AppEnvironment.initTesting(
customCacheDir: tempDir.path,
customSupportDir: tempDir.path,
);
});
tearDown(() {
if (tempDir.existsSync()) {
try {
tempDir.deleteSync(recursive: true);
} catch (_) {}
}
});
group('KeyValueStore Tests', () {
test('get returns null for non-existent key', () async {
final result = await KeyValueStore.get('non_existent');
expect(result, isNull);
});
test('put stores value and get retrieves it correctly', () async {
const key = 'test_key';
final value = {'name': 'twonly', 'version': 1};
await KeyValueStore.put(key, value);
final retrieved = await KeyValueStore.get(key);
expect(retrieved, isNotNull);
expect(retrieved?['name'], equals('twonly'));
expect(retrieved?['version'], equals(1));
});
test('delete removes stored value successfully', () async {
const key = 'delete_key';
final value = {'data': 'to_be_deleted'};
await KeyValueStore.put(key, value);
expect(await KeyValueStore.get(key), isNotNull);
await KeyValueStore.delete(key);
expect(await KeyValueStore.get(key), isNull);
});
test('delete on non-existent key completes without error', () async {
await expectLater(KeyValueStore.delete('non_existent'), completes);
});
test('put overwrites existing value', () async {
const key = 'overwrite_key';
final initialValue = {'status': 'initial'};
final updatedValue = {'status': 'updated'};
await KeyValueStore.put(key, initialValue);
var retrieved = await KeyValueStore.get(key);
expect(retrieved?['status'], equals('initial'));
await KeyValueStore.put(key, updatedValue);
retrieved = await KeyValueStore.get(key);
expect(retrieved?['status'], equals('updated'));
});
test('get handles corrupted JSON file gracefully by deleting it', () async {
const key = 'corrupt_key';
final file = File('${tempDir.path}/keyvalue/$key.json');
await file.parent.create(recursive: true);
await file.writeAsString('invalid json content');
expect(file.existsSync(), isTrue);
final retrieved = await KeyValueStore.get(key);
expect(retrieved, isNull);
expect(file.existsSync(), isFalse);
});
});
}