[infra] Fix approve_results not inserting primary keys for pre-approvals.

This change fixes that approve_results forgot to insert the primary keys for
pre-approval of new tests without any existing approval. This change also
fixes approve_results crashing on approvals without a result and no
pre-approvals field.

Change-Id: I979fa39005d72926a6a295d12aa6a7c505439e0f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97637
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/tools/approve_results.dart b/tools/approve_results.dart
index 989457c..ff149c3 100755
--- a/tools/approve_results.dart
+++ b/tools/approve_results.dart
@@ -88,7 +88,7 @@
   Map<String, dynamic> get _sharedData =>
       resultData ?? baselineData ?? approvedResultData;
   String get name => _sharedData["name"];
-  String get configuration => _sharedData["configuration"] ?? "";
+  String get configuration => _sharedData["configuration"];
   String get key => "$configuration:$name";
   String get expected => _sharedData["expected"];
   String get result => (resultData ?? const {})["result"];
@@ -853,6 +853,10 @@
           test.bot, () => new SplayTreeMap<String, Map<String, dynamic>>());
       final approvalData =
           newApprovals.putIfAbsent(test.key, () => <String, dynamic>{});
+      approvalData["name"] = test.name;
+      approvalData["configuration"] = test.configuration;
+      approvalData["suite"] = test.resultData["suite"];
+      approvalData["test_name"] = test.resultData["test_name"];
       final preapprovals =
           approvalData.putIfAbsent("preapprovals", () => <String, dynamic>{});
       final preapproval =
@@ -872,7 +876,9 @@
     for (final test in tests) {
       if (test.approvedResultData == null) continue;
       if (test.result == null &&
-          (test.approvedResultData["preapprovals"] ?? "").isEmpty) continue;
+          (test.approvedResultData["preapprovals"] ?? <dynamic>[]).isEmpty) {
+        continue;
+      }
       final approvalData = deepClone(test.approvedResultData);
       // TODO(https://github.com/dart-lang/sdk/issues/36279): Remove needless
       // fields that shouldn't be in the approvals data. Remove this 2019-04-03.