writeApiCallsLogFile function
Future<String>
writeApiCallsLogFile({
- required TestLogger logger,
- required String filePrefix,
- required List<
APICallRecord> calls,
Implementation
Future<String> writeApiCallsLogFile({
required TestLogger logger,
required String filePrefix,
required List<APICallRecord> calls,
}) {
final callsByName = <String, List<DateTime>>{};
for (final call in calls) {
callsByName.putIfAbsent(call.name, () => <DateTime>[]).add(call.timestamp);
}
final content = const JsonEncoder.withIndent(' ').convert(
_toSerializable({
'total': calls.length,
'calls': callsByName.entries
.map(
(entry) => {
'name': entry.key,
'count': entry.value.length,
'timestamps': [
for (final timestamp in entry.value)
timestamp.toIso8601String(),
],
},
)
.toList(),
'events': [
for (var i = 0; i < calls.length; i++)
{
'index': i + 1,
'name': calls[i].name,
'timestamp': calls[i].timestamp.toIso8601String(),
if (calls[i].stepIndex != null) 'stepIndex': calls[i].stepIndex,
if (calls[i].mocked != null) 'mocked': calls[i].mocked,
if (calls[i].statusCode != null) 'statusCode': calls[i].statusCode,
if (calls[i].error != null) 'error': calls[i].error,
if (calls[i].responseBody != null)
'responseBody': _loggableResponseBody(calls[i].responseBody),
if (calls[i].type != null) 'type': calls[i].type,
'request': {
'url': (calls[i].resolvedUrl?.isNotEmpty == true)
? calls[i].resolvedUrl!
: (calls[i].type == 'firestore'
? ((calls[i].apiDefinition['path'] ??
calls[i].apiDefinition['firestore']?['path'])
?.toString() ??
'')
: (calls[i].type == 'functions'
? ((calls[i].apiDefinition['name'] ??
calls[i].apiDefinition['function']
?['name'])
?.toString() ??
'')
: (calls[i].apiDefinition['url'] ??
calls[i].apiDefinition['uri'])
?.toString() ??
'')),
'method': calls[i].type == 'firestore'
? ((calls[i].apiDefinition['operation'] ??
calls[i].apiDefinition['firestore']?['operation'])
?.toString()
.toUpperCase() ??
'GET')
: (calls[i].type == 'functions'
? 'CALL'
: (calls[i].apiDefinition['method']?.toString() ??
'GET')),
if (calls[i].resolvedHeaders != null ||
calls[i].apiDefinition['headers'] != null ||
calls[i].apiDefinition['firestore']?['headers'] != null ||
calls[i].apiDefinition['function']?['headers'] != null)
'headers': calls[i].resolvedHeaders ??
calls[i].apiDefinition['headers'] ??
calls[i].apiDefinition['firestore']?['headers'] ??
calls[i].apiDefinition['function']?['headers'],
if (calls[i].resolvedBody != null ||
calls[i].apiDefinition['body'] != null ||
calls[i].apiDefinition['data'] != null ||
calls[i].apiDefinition['firestore']?['body'] != null ||
calls[i].apiDefinition['firestore']?['data'] != null ||
calls[i].apiDefinition['function']?['body'] != null ||
calls[i].apiDefinition['function']?['data'] != null)
'body': calls[i].resolvedBody ??
calls[i].apiDefinition['body'] ??
calls[i].apiDefinition['data'] ??
calls[i].apiDefinition['firestore']?['body'] ??
calls[i].apiDefinition['firestore']?['data'] ??
calls[i].apiDefinition['function']?['body'] ??
calls[i].apiDefinition['function']?['data'],
if (calls[i].resolvedParameters != null ||
calls[i].apiDefinition['parameters'] != null ||
calls[i].apiDefinition['query'] != null ||
calls[i].apiDefinition['firestore']?['parameters'] != null ||
calls[i].apiDefinition['firestore']?['query'] != null ||
calls[i].apiDefinition['function']?['parameters'] != null ||
calls[i].apiDefinition['function']?['query'] != null)
'parameters': calls[i].resolvedParameters ??
calls[i].apiDefinition['parameters'] ??
calls[i].apiDefinition['query'] ??
calls[i].apiDefinition['firestore']?['parameters'] ??
calls[i].apiDefinition['firestore']?['query'] ??
calls[i].apiDefinition['function']?['parameters'] ??
calls[i].apiDefinition['function']?['query'],
},
},
],
}),
);
return logger.writeLogFile(
testId: filePrefix,
name: 'api_calls',
content: content,
extension: 'json',
);
}