writeStorageLogFile function

Future<String> writeStorageLogFile({
  1. required TestLogger logger,
  2. required String filePrefix,
  3. String? key,
  4. List<StorageStepDiff> stepDiffs = const [],
  5. List<StorageStepDiff> secureStepDiffs = const [],
  6. List<StorageStepDiff> keychainStepDiffs = const [],
  7. Map<String, dynamic>? keys,
})

Implementation

Future<String> writeStorageLogFile({
  required TestLogger logger,
  required String filePrefix,
  String? key,
  List<StorageStepDiff> stepDiffs = const [],
  List<StorageStepDiff> secureStepDiffs = const [],
  List<StorageStepDiff> keychainStepDiffs = const [],
  Map<String, dynamic>? keys,
}) async {
  if (key != null && key.isNotEmpty) {
    return logger.writeLogFile(
      testId: filePrefix,
      name: 'storage_$key',
      content: _prettyJson(StorageManager().read(key)),
      extension: 'json',
    );
  }

  final snapshot = keys ?? capturePublicStorage();
  final contentMap = <String, dynamic>{
    // Keep the legacy top-level fields for consumers that only understand
    // public storage artifacts.
    'keys': snapshot,
    'steps': [for (final diff in stepDiffs) diff.toJson()],
    'storage': {
      'keys': snapshot,
      'steps': [for (final diff in stepDiffs) diff.toJson()],
    },
    'secureStorage': {
      'keys': keys == null ? captureSecureStorage() : <String, dynamic>{},
      'steps': [for (final diff in secureStepDiffs) diff.toJson()],
    },
    'keychain': {
      'keys':
          keys == null ? await captureKeychainStorage() : <String, dynamic>{},
      'steps': [for (final diff in keychainStepDiffs) diff.toJson()],
    },
  };
  final content = _prettyJson(contentMap);
  return logger.writeLogFile(
    testId: filePrefix,
    name: 'storage',
    content: content,
    extension: 'json',
  );
}