[builder] Allow patchset descriptions to be null

These can be null in Gerrit in some workflows. Previously, CLs with
patchsets without descriptions would always fail on the CQ.

Change-Id: Ib7ea5614abf3146474ff469eeec0d863caa1b22c
Reviewed-on: https://dart-review.googlesource.com/c/dart_ci/+/225201
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
diff --git a/builder/.gitignore b/builder/.gitignore
index 3c8a157..e6ff0e2 100644
--- a/builder/.gitignore
+++ b/builder/.gitignore
@@ -4,3 +4,7 @@
 
 # Conventional directory for build output.
 build/
+
+# Code coverage
+coverage/
+lcov.info
diff --git a/builder/lib/src/firestore.dart b/builder/lib/src/firestore.dart
index 17eb02f..e0c32f7 100644
--- a/builder/lib/src/firestore.dart
+++ b/builder/lib/src/firestore.dart
@@ -531,7 +531,7 @@
   }
 
   Future<void> storePatchset(String review, int patchset, String kind,
-      String description, int patchsetGroup, int number) async {
+      String? description, int patchsetGroup, int number) async {
     final document = Document()
       ..name = '$documents/reviews/$review/patchsets/$patchset'
       ..fields = taggedMap({
diff --git a/builder/test/fakes.dart b/builder/test/fakes.dart
index 2f11824..0d8e5b6 100644
--- a/builder/test/fakes.dart
+++ b/builder/test/fakes.dart
@@ -209,6 +209,19 @@
   @override
   Future<bool> reviewIsLanded(int review) =>
       Future.value(commits.values.any((commit) => commit[fReview] == review));
+
+  @override
+  Future<bool> hasPatchset(String review, String patchset) async => false;
+
+  @override
+  Future<bool> hasReview(String review) async => false;
+
+  @override
+  Future<void> storeReview(String review, Map<String, Value> data) async {}
+
+  @override
+  Future<void> storePatchset(String review, int patchset, String kind,
+      String? description, int patchsetGroup, int number) async {}
 }
 
 class HttpClientMock extends BaseClient {
diff --git a/builder/test/firestore_test.dart b/builder/test/firestore_test.dart
index 3c9add7..0ca42fa 100644
--- a/builder/test/firestore_test.dart
+++ b/builder/test/firestore_test.dart
@@ -117,7 +117,7 @@
         testReview.toString(),
         2,
         'REWORK',
-        'change',
+        null,
         2,
         2,
       );
diff --git a/builder/test/gerrit_test.dart b/builder/test/gerrit_test.dart
index 9aaf399..cf2951c 100644
--- a/builder/test/gerrit_test.dart
+++ b/builder/test/gerrit_test.dart
@@ -7,6 +7,7 @@
 import 'package:test/test.dart';
 
 import 'package:builder/src/gerrit_change.dart';
+import 'fakes.dart';
 import 'gerrit_review_json.dart';
 
 void main() async {
@@ -14,4 +15,11 @@
     expect(GerritInfo.revert(json.decode(revertReviewGerritLog)),
         '7ed1690b4ed6b56bc818173dff41a7a2530991a2');
   });
+
+  test('update', () async {
+    final httpClientMock = HttpClientMock()
+      ..addDefaultResponse('${GerritInfo.prefix}$revertReviewGerritLog');
+    final gerrit = GerritInfo(123, 4, FirestoreServiceFake(), httpClientMock);
+    await gerrit.update();
+  });
 }