iachat/spec/lib
Shivam Mishra 67112647e8
fix: escape special characters in Linear GraphQL queries (#13490)
Creating a Linear issue from Chatwoot fails with a GraphQL parse error
when the title, description, or search term contains double quotes. For
example, a description like `the sender is "Bot"` produces this broken
query:

```graphql
issueCreate(input: { description: "the sender is "Bot"" })
```

Linear's API rejects this with `Syntax Error: Expected ":", found
String`. This affects issue creation, issue linking, and issue search —
any flow where user-provided text is interpolated into a GraphQL query.

The `graphql_value` helper was only escaping newlines (`\n`) but not
quotes, backslashes, or other characters that are meaningful inside a
GraphQL string literal. On top of that, `issue_link` and `search_issue`
bypassed `graphql_value` entirely, using raw string interpolation
instead.

The fix replaces the manual `gsub` escaping with Ruby's `to_json`, which
produces a properly escaped, double-quoted string that handles all
special characters. This is a minimal, well-understood substitution —
`to_json` on a Ruby string returns a valid JSON string literal, which is
also a valid GraphQL string literal since GraphQL uses the same escaping
rules. The `issue_link` mutation and `search_issue` query are updated to
route their parameters through `graphql_value` instead of raw
interpolation.

The `team_entities_query` and `linked_issues` methods in `queries.rb`
also use raw interpolation, but their inputs are system-generated IDs
and URLs rather than user-provided text, so they're left as-is to keep
this change focused.
2026-02-09 16:18:04 +05:30
..
captain feat: search documentation tool for reply suggestions (#13340) 2026-01-30 16:18:33 +05:30
email_templates chore: Enable the new Rubocop rules (#7122) 2023-05-19 14:37:10 +05:30
integrations feat: new Captain Editor (#13235) 2026-01-21 13:39:07 +05:30
redis chore: Unset Redis config after spec (#8685) 2024-01-10 15:32:48 -08:00
webhooks feat: Advanced Search Backend (#12917) 2026-01-07 15:30:49 +05:30
base_markdown_renderer_spec.rb feat: support image height in markdown rendering of messages (#8177) 2023-11-02 13:51:54 -07:00
chatwoot_captcha_spec.rb chore: Update dependencies to the latest versions (#5033) 2022-07-15 09:51:59 +07:00
chatwoot_exception_tracker_spec.rb chore: Load only required APMs (#6497) 2023-03-01 14:31:51 +05:30
chatwoot_hub_spec.rb feat: Provision captain accounts automatically (#10168) 2024-09-26 19:21:29 -07:00
chatwoot_markdown_renderer_spec.rb feat: Standardize rich editor across all channels (#12600) 2025-12-08 14:43:45 +05:30
config_loader_spec.rb Feature: Installation global config (#839) (#840) 2020-05-10 22:40:36 +05:30
custom_markdown_renderer_spec.rb fix: Update Arcade embed aspect ratio (#12923) 2025-11-24 20:22:27 +05:30
dyte_spec.rb feat: Upgrade Dyte apis to v2 (#10706) 2025-02-19 14:47:48 -08:00
global_config_service_spec.rb chore: Update dependencies to the latest versions (#5033) 2022-07-15 09:51:59 +07:00
global_config_spec.rb Feature: Global Config helper (#844) (#845) 2020-05-11 19:00:33 +05:30
linear_spec.rb fix: escape special characters in Linear GraphQL queries (#13490) 2026-02-09 16:18:04 +05:30
online_status_tracker_spec.rb fix: Get online status from db when not present in cache [CW-3233] (#9477) 2024-05-15 21:23:19 -07:00
vapid_service_spec.rb feat: migrate facebook env vars to globalConfig (#3369) 2021-11-25 00:55:26 +05:30