Skip to content

Commit 54614f0

Browse files
feat(slides): add object-scoped text editing primitives
1 parent 0a43abb commit 54614f0

2 files changed

Lines changed: 9 additions & 0 deletions

File tree

internal/cmd/slides_replace_text.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ func (c *SlidesReplaceTextCmd) runObjectScoped(ctx context.Context, flags *RootF
144144
return err
145145
}
146146
body := &slides.BatchUpdatePresentationRequest{Requests: requests}
147+
if strings.TrimSpace(pres.RevisionId) != "" {
148+
body.WriteControl = &slides.WriteControl{RequiredRevisionId: pres.RevisionId}
149+
}
147150

148151
dryRunErr := dryRunExit(ctx, flags, "slides.replace-text", map[string]any{
149152
"presentation_id": presentationID,

internal/cmd/slides_replace_text_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ func TestSlidesReplaceText(t *testing.T) {
6868

6969
func TestSlidesReplaceText_ObjectScopedShapeText(t *testing.T) {
7070
var captured []*slides.Request
71+
var capturedWriteControl *slides.WriteControl
7172
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
7273
w.Header().Set("Content-Type", "application/json")
7374
switch {
7475
case r.Method == http.MethodGet && strings.Contains(r.URL.Path, "/presentations/pres1"):
7576
_ = json.NewEncoder(w).Encode(map[string]any{
7677
"presentationId": "pres1",
78+
"revisionId": "rev-read",
7779
"slides": []any{
7880
map[string]any{
7981
"objectId": "slide_1",
@@ -102,6 +104,7 @@ func TestSlidesReplaceText_ObjectScopedShapeText(t *testing.T) {
102104
var req slides.BatchUpdatePresentationRequest
103105
if err := json.NewDecoder(r.Body).Decode(&req); err == nil {
104106
captured = req.Requests
107+
capturedWriteControl = req.WriteControl
105108
}
106109
_ = json.NewEncoder(w).Encode(map[string]any{
107110
"presentationId": "pres1",
@@ -133,6 +136,9 @@ func TestSlidesReplaceText_ObjectScopedShapeText(t *testing.T) {
133136
if len(captured) != 4 {
134137
t.Fatalf("expected delete+insert for 2 matches, got %d: %+v", len(captured), captured)
135138
}
139+
if capturedWriteControl == nil || capturedWriteControl.RequiredRevisionId != "rev-read" {
140+
t.Fatalf("expected write control requiredRevisionId=rev-read, got %#v", capturedWriteControl)
141+
}
136142
firstDelete := captured[0].DeleteText
137143
if firstDelete == nil || firstDelete.ObjectId != "shape_1" ||
138144
firstDelete.TextRange == nil || *firstDelete.TextRange.StartIndex != 7 || *firstDelete.TextRange.EndIndex != 10 {

0 commit comments

Comments
 (0)