Skip to content

Commit 5c68128

Browse files
authored
Add missing readtime (#10972)
* Add missing readtime as resume type * Add unit test * feedback
1 parent 9aaa3d2 commit 5c68128

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

Firestore/core/src/remote/serializer.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@
4242
#include "Firestore/core/src/model/resource_path.h"
4343
#include "Firestore/core/src/model/server_timestamp_util.h"
4444
#include "Firestore/core/src/model/set_mutation.h"
45+
#include "Firestore/core/src/model/snapshot_version.h"
4546
#include "Firestore/core/src/model/value_util.h"
4647
#include "Firestore/core/src/model/verify_mutation.h"
4748
#include "Firestore/core/src/nanopb/byte_string.h"
4849
#include "Firestore/core/src/nanopb/nanopb_util.h"
4950
#include "Firestore/core/src/nanopb/reader.h"
5051
#include "Firestore/core/src/nanopb/writer.h"
5152
#include "Firestore/core/src/timestamp_internal.h"
53+
#include "Firestore/core/src/util/comparison.h"
5254
#include "Firestore/core/src/util/hard_assert.h"
5355
#include "Firestore/core/src/util/status.h"
5456
#include "Firestore/core/src/util/statusor.h"
@@ -111,6 +113,7 @@ using nanopb::SetRepeatedField;
111113
using nanopb::SharedMessage;
112114
using nanopb::Writer;
113115
using remote::WatchChange;
116+
using util::ComparisonResult;
114117
using util::ReadContext;
115118
using util::Status;
116119
using util::StatusOr;
@@ -635,6 +638,11 @@ google_firestore_v1_Target Serializer::EncodeTarget(
635638
result.which_resume_type = google_firestore_v1_Target_resume_token_tag;
636639
result.resume_type.resume_token =
637640
nanopb::CopyBytesArray(target_data.resume_token().get());
641+
} else if (target_data.snapshot_version().CompareTo(
642+
SnapshotVersion::None()) == ComparisonResult::Descending) {
643+
result.which_resume_type = google_firestore_v1_Target_read_time_tag;
644+
result.resume_type.read_time =
645+
EncodeVersion(target_data.snapshot_version());
638646
}
639647

640648
return result;

Firestore/core/test/unit/remote/serializer_test.cc

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,42 @@ TEST_F(SerializerTest, EncodesFirstLevelKeyQueries) {
11241124
ExpectRoundTrip(model, proto);
11251125
}
11261126

1127+
TEST_F(SerializerTest, EncodesTargetDataWithExpectedResumeType) {
1128+
TargetData target = CreateTargetData("docs/1");
1129+
1130+
{
1131+
SCOPED_TRACE("EncodesTargetDataWithoutResumeType");
1132+
v1::Target proto;
1133+
proto.mutable_documents()->add_documents(ResourceName("docs/1"));
1134+
proto.set_target_id(1);
1135+
ExpectRoundTrip(target, proto);
1136+
}
1137+
1138+
{
1139+
SCOPED_TRACE("EncodesTargetDataWithResumeToken");
1140+
v1::Target proto;
1141+
proto.mutable_documents()->add_documents(ResourceName("docs/1"));
1142+
proto.set_target_id(1);
1143+
proto.set_resume_token("resume_token");
1144+
ExpectRoundTrip(target.WithResumeToken(nanopb::ByteString{"resume_token"},
1145+
model::SnapshotVersion::None()),
1146+
proto);
1147+
}
1148+
1149+
{
1150+
SCOPED_TRACE("EncodesTargetDataWithResumeByReadTime");
1151+
v1::Target proto;
1152+
proto.mutable_documents()->add_documents(ResourceName("docs/1"));
1153+
proto.set_target_id(1);
1154+
proto.mutable_read_time()->set_seconds(1000);
1155+
proto.mutable_read_time()->set_nanos(42);
1156+
ExpectRoundTrip(
1157+
target.WithResumeToken(nanopb::ByteString{""},
1158+
model::SnapshotVersion(Timestamp(1000, 42))),
1159+
proto);
1160+
}
1161+
}
1162+
11271163
TEST_F(SerializerTest, EncodesFirstLevelAncestorQueries) {
11281164
TargetData model = CreateTargetData("messages");
11291165

0 commit comments

Comments
 (0)