@@ -129,4 +129,96 @@ describe('AttributesTreeValue', () => {
129129
130130 expect ( screen . getByText ( 'null' ) ) . toBeInTheDocument ( ) ;
131131 } ) ;
132+
133+ it ( 'renders JSON object values as structured data' , ( ) => {
134+ const jsonContent = {
135+ ...defaultProps . content ,
136+ value : '{"key": "value", "number": 42}' ,
137+ } ;
138+
139+ render ( < AttributesTreeValue { ...defaultProps } content = { jsonContent } /> ) ;
140+
141+ expect ( screen . getByText ( 'key' ) ) . toBeInTheDocument ( ) ;
142+ expect ( screen . getByText ( 'value' ) ) . toBeInTheDocument ( ) ;
143+ expect ( screen . getByText ( '42' ) ) . toBeInTheDocument ( ) ;
144+ } ) ;
145+
146+ it ( 'renders JSON array values as structured data' , ( ) => {
147+ const jsonContent = {
148+ ...defaultProps . content ,
149+ value : '[1, 2, 3]' ,
150+ } ;
151+
152+ render ( < AttributesTreeValue { ...defaultProps } content = { jsonContent } /> ) ;
153+
154+ expect ( screen . getByText ( '1' ) ) . toBeInTheDocument ( ) ;
155+ expect ( screen . getByText ( '2' ) ) . toBeInTheDocument ( ) ;
156+ expect ( screen . getByText ( '3' ) ) . toBeInTheDocument ( ) ;
157+ } ) ;
158+
159+ it ( 'renders invalid JSON containing braces as plain text' , ( ) => {
160+ const invalidJsonContent = {
161+ ...defaultProps . content ,
162+ value : 'not {json' ,
163+ } ;
164+
165+ render ( < AttributesTreeValue { ...defaultProps } content = { invalidJsonContent } /> ) ;
166+
167+ expect ( screen . getByText ( 'not {json' ) ) . toBeInTheDocument ( ) ;
168+ } ) ;
169+
170+ it ( 'renders plain strings without braces as plain text' , ( ) => {
171+ const plainContent = {
172+ ...defaultProps . content ,
173+ value : 'hello world' ,
174+ } ;
175+
176+ render ( < AttributesTreeValue { ...defaultProps } content = { plainContent } /> ) ;
177+
178+ expect ( screen . getByText ( 'hello world' ) ) . toBeInTheDocument ( ) ;
179+ } ) ;
180+
181+ it ( 'does not render JSON as structured data when disableRichValue is true' , ( ) => {
182+ const jsonContent = {
183+ ...defaultProps . content ,
184+ value : '{"key": "value"}' ,
185+ } ;
186+
187+ render (
188+ < AttributesTreeValue
189+ { ...defaultProps }
190+ content = { jsonContent }
191+ config = { { disableRichValue : true } }
192+ />
193+ ) ;
194+
195+ expect ( screen . getByText ( '{"key": "value"}' ) ) . toBeInTheDocument ( ) ;
196+ expect ( screen . queryByRole ( 'list' ) ) . not . toBeInTheDocument ( ) ;
197+ } ) ;
198+
199+ it ( 'renders simple JSON with compact class' , ( ) => {
200+ const jsonContent = {
201+ ...defaultProps . content ,
202+ value : '{"boop": "bop"}' ,
203+ } ;
204+
205+ render ( < AttributesTreeValue { ...defaultProps } content = { jsonContent } /> ) ;
206+
207+ const pre = screen . getByText ( 'bop' ) . closest ( 'pre' ) ;
208+ expect ( pre ) . toHaveClass ( 'compact' ) ;
209+ } ) ;
210+
211+ it ( 'renders long JSON without compact class' , ( ) => {
212+ const jsonContent = {
213+ ...defaultProps . content ,
214+ value : '{"k": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}' ,
215+ } ;
216+
217+ render ( < AttributesTreeValue { ...defaultProps } content = { jsonContent } /> ) ;
218+
219+ const pre = screen
220+ . getByText ( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' )
221+ . closest ( 'pre' ) ;
222+ expect ( pre ) . not . toHaveClass ( 'compact' ) ;
223+ } ) ;
132224} ) ;
0 commit comments