diff --git a/package-lock.json b/package-lock.json index 434bfcbc07..9c4d20beab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "AGPL-3.0", "dependencies": { "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-markdown": "^6.0.0", "@codemirror/lang-xml": "^6.0.0", "@codemirror/lint": "^6.2.1", @@ -2263,6 +2264,16 @@ "@lezer/javascript": "^1.0.0" } }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, "node_modules/@codemirror/lang-markdown": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", @@ -5231,6 +5242,17 @@ "@lezer/lr": "^1.3.0" } }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, "node_modules/@lezer/lr": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.8.tgz", diff --git a/package.json b/package.json index ddc79a196c..35d1cb62fd 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ }, "dependencies": { "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-markdown": "^6.0.0", "@codemirror/lang-xml": "^6.0.0", "@codemirror/lint": "^6.2.1", diff --git a/src/advanced-settings/AdvancedSettings.test.tsx b/src/advanced-settings/AdvancedSettings.test.tsx index 8b9d73aa70..53d04c6151 100644 --- a/src/advanced-settings/AdvancedSettings.test.tsx +++ b/src/advanced-settings/AdvancedSettings.test.tsx @@ -12,17 +12,17 @@ import { advancedSettingsMock } from './__mocks__'; import { getCourseAdvancedSettingsApiUrl } from './data/api'; import AdvancedSettings from './AdvancedSettings'; import messages from './messages'; +import filterMessages from './settings-filters/messages'; -let axiosMock; -const mockPathname = '/foo-bar'; -const courseId = '123'; - -// Mock the TextareaAutosize component -jest.mock('react-textarea-autosize', () => - jest.fn((props) => ( +// Mock CodeMirror-based JsonInput with a controlled textarea so tests can +// interact with JSON fields without a real browser layout engine. +jest.mock('./setting-card/inputs/JsonInput', () => + jest.fn(({ initialValue, onChange, onBlur }) => (