| 330 | } |
| 331 | |
| 332 | func TestHandleAction_Screenshot(t *testing.T) { |
| 333 | t.Parallel() |
| 334 | |
| 335 | logger := slogtest.Make(t, nil) |
| 336 | geometry := workspacesdk.DefaultDesktopGeometry() |
| 337 | fake := &fakeDesktop{ |
| 338 | startCfg: agentdesktop.DisplayConfig{ |
| 339 | Width: geometry.NativeWidth, |
| 340 | Height: geometry.NativeHeight, |
| 341 | }, |
| 342 | screenshotRes: agentdesktop.ScreenshotResult{Data: "base64data"}, |
| 343 | } |
| 344 | api := agentdesktop.NewAPI(logger, fake, nil) |
| 345 | defer api.Close() |
| 346 | |
| 347 | body := agentdesktop.DesktopAction{Action: "screenshot"} |
| 348 | b, err := json.Marshal(body) |
| 349 | require.NoError(t, err) |
| 350 | |
| 351 | rr := httptest.NewRecorder() |
| 352 | req := httptest.NewRequest(http.MethodPost, "/action", bytes.NewReader(b)) |
| 353 | req.Header.Set("Content-Type", "application/json") |
| 354 | |
| 355 | handler := api.Routes() |
| 356 | handler.ServeHTTP(rr, req) |
| 357 | |
| 358 | assert.Equal(t, http.StatusOK, rr.Code) |
| 359 | |
| 360 | var result agentdesktop.DesktopActionResponse |
| 361 | err = json.NewDecoder(rr.Body).Decode(&result) |
| 362 | require.NoError(t, err) |
| 363 | assert.Equal(t, "screenshot", result.Output) |
| 364 | assert.Equal(t, "base64data", result.ScreenshotData) |
| 365 | assert.Equal(t, geometry.NativeWidth, result.ScreenshotWidth) |
| 366 | assert.Equal(t, geometry.NativeHeight, result.ScreenshotHeight) |
| 367 | assert.Equal(t, agentdesktop.ScreenshotOptions{ |
| 368 | TargetWidth: geometry.NativeWidth, |
| 369 | TargetHeight: geometry.NativeHeight, |
| 370 | }, fake.lastShotOpts) |
| 371 | } |
| 372 | |
| 373 | func TestHandleAction_ScreenshotUsesDeclaredDimensionsFromRequest(t *testing.T) { |
| 374 | t.Parallel() |