From 69bcf718abd5ecf8e4b5a0e3809aaf1f65b6702e Mon Sep 17 00:00:00 2001 From: "checkly-rca-bot-angie[bot]" <266841500+checkly-rca-bot-angie[bot]@users.noreply.github.com> Date: Fri, 3 Jul 2026 22:42:13 +0000 Subject: [PATCH] feat: add API response text override option --- .../constructs/__tests__/api-check.spec.ts | 28 +++++++++++++++++++ .../checkly.config.js | 11 ++++++++ .../test.check.js | 13 +++++++++ .../cli/src/constructs/api-request-codegen.ts | 4 +++ packages/cli/src/constructs/api-request.ts | 6 ++++ 5 files changed, 62 insertions(+) create mode 100644 packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/checkly.config.js create mode 100644 packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/test.check.js diff --git a/packages/cli/src/constructs/__tests__/api-check.spec.ts b/packages/cli/src/constructs/__tests__/api-check.spec.ts index b3588af34..6eb0ca0f8 100644 --- a/packages/cli/src/constructs/__tests__/api-check.spec.ts +++ b/packages/cli/src/constructs/__tests__/api-check.spec.ts @@ -300,6 +300,34 @@ describe('ApiCheck', () => { })) }, DEFAULT_TEST_TIMEOUT) + it('should synthesize requests that treat binary-labelled responses as text', async () => { + const output = await parseProject( + fixt, + '--config', + fixt.abspath('test-cases/test-treat-response-body-as-text/checkly.config.js'), + ) + + expect(output).toEqual(expect.objectContaining({ + diagnostics: expect.objectContaining({ + fatal: false, + }), + payload: expect.objectContaining({ + resources: expect.arrayContaining([ + expect.objectContaining({ + logicalId: 'check', + type: 'check', + member: true, + payload: expect.objectContaining({ + request: expect.objectContaining({ + treatResponseBodyAsText: true, + }), + }), + }), + ]), + }), + })) + }, DEFAULT_TEST_TIMEOUT) + describe('retryStrategy', () => { it('should synthesize `onlyOn`', async () => { const output = await parseProject( diff --git a/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/checkly.config.js b/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/checkly.config.js new file mode 100644 index 000000000..19a81a24e --- /dev/null +++ b/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/checkly.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'checkly' + +const config = defineConfig({ + projectName: 'Check Fixture', + logicalId: 'check-fixture', + checks: { + checkMatch: '**/*.check.js', + }, +}) + +export default config diff --git a/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/test.check.js b/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/test.check.js new file mode 100644 index 000000000..001093c20 --- /dev/null +++ b/packages/cli/src/constructs/__tests__/fixtures/api-check/test-cases/test-treat-response-body-as-text/test.check.js @@ -0,0 +1,13 @@ +import { ApiCheck, AssertionBuilder } from 'checkly/constructs' + +new ApiCheck('check', { + name: 'Treat response body as text check', + request: { + method: 'GET', + url: 'https://binary-labelled-text.example.test', + treatResponseBodyAsText: true, + assertions: [ + AssertionBuilder.textBody().contains('OK'), + ], + }, +}) diff --git a/packages/cli/src/constructs/api-request-codegen.ts b/packages/cli/src/constructs/api-request-codegen.ts index 92c5b5e7a..d21f56a06 100644 --- a/packages/cli/src/constructs/api-request-codegen.ts +++ b/packages/cli/src/constructs/api-request-codegen.ts @@ -26,6 +26,10 @@ export function valueForRequest ( builder.boolean('skipSSL', request.skipSSL) } + if (request.treatResponseBodyAsText === true) { + builder.boolean('treatResponseBodyAsText', request.treatResponseBodyAsText) + } + if (request.body !== undefined && request.body !== '') { builder.string('body', request.body) } diff --git a/packages/cli/src/constructs/api-request.ts b/packages/cli/src/constructs/api-request.ts index 74af76214..cba41ce64 100644 --- a/packages/cli/src/constructs/api-request.ts +++ b/packages/cli/src/constructs/api-request.ts @@ -54,6 +54,12 @@ export interface Request { */ skipSSL?: boolean + /** + * Whether to treat the response body as text even when the response Content-Type is marked as binary. + * @defaultValue false + */ + treatResponseBodyAsText?: boolean + /** * Assertions to validate the HTTP response. * Check the main Checkly documentation on assertions for specific values like regular expressions