@@ -220,6 +220,62 @@ describe('JSchema', () => {
220220 expect ( inputs . length ) . eq ( 3 ) ;
221221 } ) ;
222222
223+ it ( 'Object with additional array propery' , async ( ) => {
224+ const result = renderSchema ( {
225+ title : 'Object with additionalProperties' ,
226+ type : 'object' ,
227+ properties : {
228+ testProp : {
229+ title : 'testProp' ,
230+ type : 'object' ,
231+ additionalProperties : {
232+ type : 'array' ,
233+ items : {
234+ $ref : '#/definitions/Ref'
235+ }
236+ }
237+ }
238+ } ,
239+ definitions : {
240+ Ref : {
241+ title : 'argument' ,
242+ type : 'object' ,
243+ properties : {
244+ required_string : {
245+ title : 'Required String' ,
246+ type : 'string'
247+ } ,
248+ optional_number : {
249+ title : 'Optional Number' ,
250+ type : 'integer'
251+ }
252+ } ,
253+ required : [ 'required_string' ]
254+ }
255+ }
256+ } ) ;
257+ const input = result . getByRole ( 'textbox' ) ;
258+ await fireEvent . input ( input , { target : { value : 'my-key' } } ) ;
259+ const addPropertyBtn = result . getByRole ( 'button' , { name : 'Add property' } ) ;
260+ await fireEvent . click ( addPropertyBtn ) ;
261+ expect ( result . queryByText ( 'my-key' ) ) . not . null ;
262+ const accordionBtn1 = result . getByRole ( 'button' , { name : 'my-key' } ) ;
263+ await fireEvent . click ( accordionBtn1 ) ;
264+ const addArgumentBtn = result . getByRole ( 'button' , { name : 'Add argument to list' } ) ;
265+ await fireEvent . click ( addArgumentBtn ) ;
266+ const accordionBtn2 = result . getByRole ( 'button' , { name : 'argument' } ) ;
267+ await fireEvent . click ( accordionBtn2 ) ;
268+ expect ( result . queryByText ( 'Required String' ) ) . not . null ;
269+ checkBold ( result . getByText ( 'Required String' ) , true ) ;
270+ checkBold ( result . getByText ( 'Optional Number' ) , false ) ;
271+ const removeArgumentBtn = result . getByRole ( 'button' , { name : 'Remove' } ) ;
272+ await fireEvent . click ( removeArgumentBtn ) ;
273+ expect ( result . queryByText ( 'Required String' ) ) . null ;
274+ const removePropertyBtn = result . getByRole ( 'button' , { name : 'Remove Property Block' } ) ;
275+ await fireEvent . click ( removePropertyBtn ) ;
276+ expect ( result . queryByText ( 'my-key' ) ) . null ;
277+ } ) ;
278+
223279 it ( 'Required nested objects' , async ( ) => {
224280 const result = renderSchema ( {
225281 title : 'Args' ,
0 commit comments